{
  "id": "3811b46a4af3e9ae7ae001002dc4bd46",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.7.6",
  "solcLongVersion": "0.7.6+commit.7338295f",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/base/ApproveAndCall.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\nimport '@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol';\n\nimport '../interfaces/IApproveAndCall.sol';\nimport './ImmutableState.sol';\n\n/// @title Approve and Call\n/// @notice Allows callers to approve the Astra CL position manager from this contract,\n/// for any token, and then make calls into the position manager\nabstract contract ApproveAndCall is IApproveAndCall, ImmutableState {\n    function tryApprove(address token, uint256 amount) private returns (bool) {\n        (bool success, bytes memory data) =\n            token.call(abi.encodeWithSelector(IERC20.approve.selector, positionManager, amount));\n        return success && (data.length == 0 || abi.decode(data, (bool)));\n    }\n\n    /// @inheritdoc IApproveAndCall\n    function getApprovalType(address token, uint256 amount) external override returns (ApprovalType) {\n        // check existing approval\n        if (IERC20(token).allowance(address(this), positionManager) >= amount) return ApprovalType.NOT_REQUIRED;\n\n        // try type(uint256).max / type(uint256).max - 1\n        if (tryApprove(token, type(uint256).max)) return ApprovalType.MAX;\n        if (tryApprove(token, type(uint256).max - 1)) return ApprovalType.MAX_MINUS_ONE;\n\n        // set approval to 0 (must succeed)\n        require(tryApprove(token, 0));\n\n        // try type(uint256).max / type(uint256).max - 1\n        if (tryApprove(token, type(uint256).max)) return ApprovalType.ZERO_THEN_MAX;\n        if (tryApprove(token, type(uint256).max - 1)) return ApprovalType.ZERO_THEN_MAX_MINUS_ONE;\n\n        revert();\n    }\n\n    /// @inheritdoc IApproveAndCall\n    function approveMax(address token) external payable override {\n        require(tryApprove(token, type(uint256).max));\n    }\n\n    /// @inheritdoc IApproveAndCall\n    function approveMaxMinusOne(address token) external payable override {\n        require(tryApprove(token, type(uint256).max - 1));\n    }\n\n    /// @inheritdoc IApproveAndCall\n    function approveZeroThenMax(address token) external payable override {\n        require(tryApprove(token, 0));\n        require(tryApprove(token, type(uint256).max));\n    }\n\n    /// @inheritdoc IApproveAndCall\n    function approveZeroThenMaxMinusOne(address token) external payable override {\n        require(tryApprove(token, 0));\n        require(tryApprove(token, type(uint256).max - 1));\n    }\n\n    /// @inheritdoc IApproveAndCall\n    function callPositionManager(bytes memory data) public payable override returns (bytes memory result) {\n        bool success;\n        (success, result) = positionManager.call(data);\n\n        if (!success) {\n            // Next 5 lines from https://ethereum.stackexchange.com/a/83577\n            if (result.length < 68) revert();\n            assembly {\n                result := add(result, 0x04)\n            }\n            revert(abi.decode(result, (string)));\n        }\n    }\n\n    function balanceOf(address token) private view returns (uint256) {\n        return IERC20(token).balanceOf(address(this));\n    }\n\n    /// @inheritdoc IApproveAndCall\n    function mint(MintParams calldata params) external payable override returns (bytes memory result) {\n        return\n            callPositionManager(\n                abi.encodeWithSelector(\n                    INonfungiblePositionManager.mint.selector,\n                    INonfungiblePositionManager.MintParams({\n                        token0: params.token0,\n                        token1: params.token1,\n                        fee: params.fee,\n                        tickLower: params.tickLower,\n                        tickUpper: params.tickUpper,\n                        amount0Desired: balanceOf(params.token0),\n                        amount1Desired: balanceOf(params.token1),\n                        amount0Min: params.amount0Min,\n                        amount1Min: params.amount1Min,\n                        recipient: params.recipient,\n                        deadline: type(uint256).max // deadline should be checked via multicall\n                    })\n                )\n            );\n    }\n\n    /// @inheritdoc IApproveAndCall\n    function increaseLiquidity(IncreaseLiquidityParams calldata params)\n        external\n        payable\n        override\n        returns (bytes memory result)\n    {\n        return\n            callPositionManager(\n                abi.encodeWithSelector(\n                    INonfungiblePositionManager.increaseLiquidity.selector,\n                    INonfungiblePositionManager.IncreaseLiquidityParams({\n                        tokenId: params.tokenId,\n                        amount0Desired: balanceOf(params.token0),\n                        amount1Desired: balanceOf(params.token1),\n                        amount0Min: params.amount0Min,\n                        amount1Min: params.amount1Min,\n                        deadline: type(uint256).max // deadline should be checked via multicall\n                    })\n                )\n            );\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\nimport '@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol';\nimport '@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol';\n\nimport './IPoolInitializer.sol';\nimport './IERC721Permit.sol';\nimport './IPeripheryPayments.sol';\nimport './IPeripheryImmutableState.sol';\n\n/// @title Non-fungible token for positions\n/// @notice Wraps AstraDEX CL positions in a non-fungible token interface which allows for them to be transferred\n/// and authorized.\ninterface INonfungiblePositionManager is\n    IPoolInitializer,\n    IPeripheryPayments,\n    IPeripheryImmutableState,\n    IERC721Metadata,\n    IERC721Enumerable,\n    IERC721Permit\n{\n    /// @notice Emitted when liquidity is increased for a position NFT\n    /// @dev Also emitted when a token is minted\n    /// @param tokenId The ID of the token for which liquidity was increased\n    /// @param liquidity The amount by which liquidity for the NFT position was increased\n    /// @param amount0 The amount of token0 that was paid for the increase in liquidity\n    /// @param amount1 The amount of token1 that was paid for the increase in liquidity\n    event IncreaseLiquidity(uint256 indexed tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);\n    /// @notice Emitted when liquidity is decreased for a position NFT\n    /// @param tokenId The ID of the token for which liquidity was decreased\n    /// @param liquidity The amount by which liquidity for the NFT position was decreased\n    /// @param amount0 The amount of token0 that was accounted for the decrease in liquidity\n    /// @param amount1 The amount of token1 that was accounted for the decrease in liquidity\n    event DecreaseLiquidity(uint256 indexed tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);\n    /// @notice Emitted when tokens are collected for a position NFT\n    /// @dev The amounts reported may not be exactly equivalent to the amounts transferred, due to rounding behavior\n    /// @param tokenId The ID of the token for which underlying tokens were collected\n    /// @param recipient The address of the account that received the collected tokens\n    /// @param amount0 The amount of token0 owed to the position that was collected\n    /// @param amount1 The amount of token1 owed to the position that was collected\n    event Collect(uint256 indexed tokenId, address recipient, uint256 amount0, uint256 amount1);\n\n    /// @notice Returns the position information associated with a given token ID.\n    /// @dev Throws if the token ID is not valid.\n    /// @param tokenId The ID of the token that represents the position\n    /// @return nonce The nonce for permits\n    /// @return operator The address that is approved for spending\n    /// @return token0 The address of the token0 for a specific pool\n    /// @return token1 The address of the token1 for a specific pool\n    /// @return fee The fee associated with the pool\n    /// @return tickLower The lower end of the tick range for the position\n    /// @return tickUpper The higher end of the tick range for the position\n    /// @return liquidity The liquidity of the position\n    /// @return feeGrowthInside0LastX128 The fee growth of token0 as of the last action on the individual position\n    /// @return feeGrowthInside1LastX128 The fee growth of token1 as of the last action on the individual position\n    /// @return tokensOwed0 The uncollected amount of token0 owed to the position as of the last computation\n    /// @return tokensOwed1 The uncollected amount of token1 owed to the position as of the last computation\n    function positions(\n        uint256 tokenId\n    )\n        external\n        view\n        returns (\n            uint96 nonce,\n            address operator,\n            address token0,\n            address token1,\n            uint24 fee,\n            int24 tickLower,\n            int24 tickUpper,\n            uint128 liquidity,\n            uint256 feeGrowthInside0LastX128,\n            uint256 feeGrowthInside1LastX128,\n            uint128 tokensOwed0,\n            uint128 tokensOwed1\n        );\n\n    struct MintParams {\n        address token0;\n        address token1;\n        uint24 fee;\n        int24 tickLower;\n        int24 tickUpper;\n        uint256 amount0Desired;\n        uint256 amount1Desired;\n        uint256 amount0Min;\n        uint256 amount1Min;\n        address recipient;\n        uint256 deadline;\n    }\n\n    /// @notice Creates a new position wrapped in a NFT\n    /// @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized\n    /// a method does not exist, i.e. the pool is assumed to be initialized.\n    /// @param params The params necessary to mint a position, encoded as `MintParams` in calldata\n    /// @return tokenId The ID of the token that represents the minted position\n    /// @return liquidity The amount of liquidity for this position\n    /// @return amount0 The amount of token0\n    /// @return amount1 The amount of token1\n    function mint(\n        MintParams calldata params\n    ) external payable returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);\n\n    struct IncreaseLiquidityParams {\n        uint256 tokenId;\n        uint256 amount0Desired;\n        uint256 amount1Desired;\n        uint256 amount0Min;\n        uint256 amount1Min;\n        uint256 deadline;\n    }\n\n    /// @notice Increases the amount of liquidity in a position, with tokens paid by the `msg.sender`\n    /// @param params tokenId The ID of the token for which liquidity is being increased,\n    /// amount0Desired The desired amount of token0 to be spent,\n    /// amount1Desired The desired amount of token1 to be spent,\n    /// amount0Min The minimum amount of token0 to spend, which serves as a slippage check,\n    /// amount1Min The minimum amount of token1 to spend, which serves as a slippage check,\n    /// deadline The time by which the transaction must be included to effect the change\n    /// @return liquidity The new liquidity amount as a result of the increase\n    /// @return amount0 The amount of token0 to acheive resulting liquidity\n    /// @return amount1 The amount of token1 to acheive resulting liquidity\n    function increaseLiquidity(\n        IncreaseLiquidityParams calldata params\n    ) external payable returns (uint128 liquidity, uint256 amount0, uint256 amount1);\n\n    struct DecreaseLiquidityParams {\n        uint256 tokenId;\n        uint128 liquidity;\n        uint256 amount0Min;\n        uint256 amount1Min;\n        uint256 deadline;\n    }\n\n    /// @notice Decreases the amount of liquidity in a position and accounts it to the position\n    /// @param params tokenId The ID of the token for which liquidity is being decreased,\n    /// amount The amount by which liquidity will be decreased,\n    /// amount0Min The minimum amount of token0 that should be accounted for the burned liquidity,\n    /// amount1Min The minimum amount of token1 that should be accounted for the burned liquidity,\n    /// deadline The time by which the transaction must be included to effect the change\n    /// @return amount0 The amount of token0 accounted to the position's tokens owed\n    /// @return amount1 The amount of token1 accounted to the position's tokens owed\n    function decreaseLiquidity(\n        DecreaseLiquidityParams calldata params\n    ) external payable returns (uint256 amount0, uint256 amount1);\n\n    struct CollectParams {\n        uint256 tokenId;\n        address recipient;\n        uint128 amount0Max;\n        uint128 amount1Max;\n    }\n\n    /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient\n    /// @param params tokenId The ID of the NFT for which tokens are being collected,\n    /// recipient The account that should receive the tokens,\n    /// amount0Max The maximum amount of token0 to collect,\n    /// amount1Max The maximum amount of token1 to collect\n    /// @return amount0 The amount of fees collected in token0\n    /// @return amount1 The amount of fees collected in token1\n    function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1);\n\n    /// @notice Burns a token ID, which deletes it from the NFT contract. The token must have 0 liquidity and all tokens\n    /// must be collected first.\n    /// @param tokenId The ID of the token that is being burned\n    function burn(uint256 tokenId) external payable;\n}\n"
      },
      "contracts/interfaces/IApproveAndCall.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\ninterface IApproveAndCall {\n    enum ApprovalType {NOT_REQUIRED, MAX, MAX_MINUS_ONE, ZERO_THEN_MAX, ZERO_THEN_MAX_MINUS_ONE}\n\n    /// @dev Lens to be called off-chain to determine which (if any) of the relevant approval functions should be called\n    /// @param token The token to approve\n    /// @param amount The amount to approve\n    /// @return The required approval type\n    function getApprovalType(address token, uint256 amount) external returns (ApprovalType);\n\n    /// @notice Approves a token for the maximum possible amount\n    /// @param token The token to approve\n    function approveMax(address token) external payable;\n\n    /// @notice Approves a token for the maximum possible amount minus one\n    /// @param token The token to approve\n    function approveMaxMinusOne(address token) external payable;\n\n    /// @notice Approves a token for zero, then the maximum possible amount\n    /// @param token The token to approve\n    function approveZeroThenMax(address token) external payable;\n\n    /// @notice Approves a token for zero, then the maximum possible amount minus one\n    /// @param token The token to approve\n    function approveZeroThenMaxMinusOne(address token) external payable;\n\n    /// @notice Calls the position manager with arbitrary calldata\n    /// @param data Calldata to pass along to the position manager\n    /// @return result The result from the call\n    function callPositionManager(bytes memory data) external payable returns (bytes memory result);\n\n    struct MintParams {\n        address token0;\n        address token1;\n        uint24 fee;\n        int24 tickLower;\n        int24 tickUpper;\n        uint256 amount0Min;\n        uint256 amount1Min;\n        address recipient;\n    }\n\n    /// @notice Calls the position manager's mint function\n    /// @param params Calldata to pass along to the position manager\n    /// @return result The result from the call\n    function mint(MintParams calldata params) external payable returns (bytes memory result);\n\n    struct IncreaseLiquidityParams {\n        address token0;\n        address token1;\n        uint256 tokenId;\n        uint256 amount0Min;\n        uint256 amount1Min;\n    }\n\n    /// @notice Calls the position manager's increaseLiquidity function\n    /// @param params Calldata to pass along to the position manager\n    /// @return result The result from the call\n    function increaseLiquidity(IncreaseLiquidityParams calldata params) external payable returns (bytes memory result);\n}\n"
      },
      "contracts/base/ImmutableState.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\n\nimport '../interfaces/IImmutableState.sol';\n\n/// @title Immutable state\n/// @notice Immutable state used by the swap router\nabstract contract ImmutableState is IImmutableState {\n    /// @inheritdoc IImmutableState\n    address public immutable override factoryClassic;\n    /// @inheritdoc IImmutableState\n    address public immutable override positionManager;\n\n    constructor(address _factoryClassic, address _positionManager) {\n        factoryClassic = _factoryClassic;\n        positionManager = _positionManager;\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"./IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Metadata is IERC721 {\n\n    /**\n     * @dev Returns the token collection name.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the token collection symbol.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n     */\n    function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"./IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Enumerable is IERC721 {\n\n    /**\n     * @dev Returns the total amount of tokens stored by the contract.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n     */\n    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);\n\n    /**\n     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n     * Use along with {totalSupply} to enumerate all tokens.\n     */\n    function tokenByIndex(uint256 index) external view returns (uint256);\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPoolInitializer.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\n/// @title Creates and initializes CL Pools\n/// @notice Provides a method for creating and initializing a pool, if necessary, for bundling with other methods that\n/// require the pool to exist.\ninterface IPoolInitializer {\n    /// @notice Creates a new pool if it does not exist, then initializes if not initialized\n    /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool\n    /// @param token0 The contract address of token0 of the pool\n    /// @param token1 The contract address of token1 of the pool\n    /// @param fee The fee amount of the CL pool for the specified token pair\n    /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value\n    /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary\n    function createAndInitializePoolIfNecessary(\n        address token0,\n        address token1,\n        uint24 fee,\n        uint160 sqrtPriceX96\n    ) external payable returns (address pool);\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IERC721Permit.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\n\nimport '@openzeppelin/contracts/token/ERC721/IERC721.sol';\n\n/// @title ERC721 with permit\n/// @notice Extension to ERC721 that includes a permit function for signature based approvals\ninterface IERC721Permit is IERC721 {\n    /// @notice The permit typehash used in the permit signature\n    /// @return The typehash for the permit\n    function PERMIT_TYPEHASH() external pure returns (bytes32);\n\n    /// @notice The domain separator used in the permit signature\n    /// @return The domain seperator used in encoding of permit signature\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\n\n    /// @notice Approve of a specific token ID for spending by spender via signature\n    /// @param spender The account that is being approved\n    /// @param tokenId The ID of the token that is being approved for spending\n    /// @param deadline The deadline timestamp by which the call must be mined for the approve to work\n    /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n    /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n    /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`\n    function permit(address spender, uint256 tokenId, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external payable;\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\n\n/// @title Periphery Payments\n/// @notice Functions to ease deposits and withdrawals of AMB\ninterface IPeripheryPayments {\n    /// @notice Unwraps the contract's SAMB balance and sends it to recipient as AMB.\n    /// @dev The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\n    /// @param amountMinimum The minimum amount of SAMB to unwrap\n    /// @param recipient The address receiving AMB\n    function unwrapSAMB(uint256 amountMinimum, address recipient) external payable;\n\n    /// @notice Refunds any AMB balance held by this contract to the `msg.sender`\n    /// @dev Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps\n    /// that use ether for the input amount\n    function refundAMB() external payable;\n\n    /// @notice Transfers the full amount of a token held by this contract to recipient\n    /// @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users\n    /// @param token The contract address of the token which will be transferred to `recipient`\n    /// @param amountMinimum The minimum amount of token required for a transfer\n    /// @param recipient The destination address of the token\n    function sweepToken(address token, uint256 amountMinimum, address recipient) external payable;\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Immutable state\n/// @notice Functions that return immutable state of the router\ninterface IPeripheryImmutableState {\n    /// @return Returns the address of the AstraDEX CL factory\n    function factory() external view returns (address);\n\n    /// @return Returns the address of SAMB\n    function SAMB() external view returns (address);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721 is IERC165 {\n    /**\n     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n    /**\n     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n     */\n    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n    /**\n     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n     */\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n    /**\n     * @dev Returns the number of tokens in ``owner``'s account.\n     */\n    function balanceOf(address owner) external view returns (uint256 balance);\n\n    /**\n     * @dev Returns the owner of the `tokenId` token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function ownerOf(uint256 tokenId) external view returns (address owner);\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n     * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n    /**\n     * @dev Transfers `tokenId` token from `from` to `to`.\n     *\n     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must be owned by `from`.\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 tokenId) external;\n\n    /**\n     * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n     * The approval is cleared when the token is transferred.\n     *\n     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n     *\n     * Requirements:\n     *\n     * - The caller must own the token or be an approved operator.\n     * - `tokenId` must exist.\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address to, uint256 tokenId) external;\n\n    /**\n     * @dev Returns the account approved for `tokenId` token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function getApproved(uint256 tokenId) external view returns (address operator);\n\n    /**\n     * @dev Approve or remove `operator` as an operator for the caller.\n     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n     *\n     * Requirements:\n     *\n     * - The `operator` cannot be the caller.\n     *\n     * Emits an {ApprovalForAll} event.\n     */\n    function setApprovalForAll(address operator, bool _approved) external;\n\n    /**\n     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n     *\n     * See {setApprovalForAll}\n     */\n    function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n    /**\n      * @dev Safely transfers `tokenId` token from `from` to `to`.\n      *\n      * Requirements:\n      *\n      * - `from` cannot be the zero address.\n      * - `to` cannot be the zero address.\n      * - `tokenId` token must exist and be owned by `from`.\n      * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n      * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n      *\n      * Emits a {Transfer} event.\n      */\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n"
      },
      "@openzeppelin/contracts/introspection/IERC165.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n    /**\n     * @dev Returns true if this contract implements the interface defined by\n     * `interfaceId`. See the corresponding\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n     * to learn more about how these ids are created.\n     *\n     * This function call must use less than 30 000 gas.\n     */\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"
      },
      "contracts/interfaces/IImmutableState.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Immutable state\n/// @notice Functions that return immutable state of the router\ninterface IImmutableState {\n    /// @return Returns the address of the Astra Classic factory\n    function factoryClassic() external view returns (address);\n\n    /// @return Returns the address of Astra CL NFT position manager\n    function positionManager() external view returns (address);\n}\n"
      },
      "contracts/SwapRouter02.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '@airdao/astra-cl-periphery/contracts/base/SelfPermit.sol';\nimport '@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol';\n\nimport './interfaces/ISwapRouter02.sol';\nimport './ClassicSwapRouter.sol';\nimport './CLSwapRouter.sol';\nimport './base/ApproveAndCall.sol';\nimport './base/MulticallExtended.sol';\n\n/// @title Astra Classic and CL Swap Router\ncontract SwapRouter02 is ISwapRouter02, ClassicSwapRouter, CLSwapRouter, ApproveAndCall, MulticallExtended, SelfPermit {\n    constructor(\n        address _factoryClassic,\n        address factoryCL,\n        address _positionManager,\n        address _SAMB\n    ) ImmutableState(_factoryClassic, _positionManager) PeripheryImmutableState(factoryCL, _SAMB) {}\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/base/SelfPermit.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\nimport '@openzeppelin/contracts/drafts/IERC20Permit.sol';\n\nimport '../interfaces/ISelfPermit.sol';\nimport '../interfaces/external/IERC20PermitAllowed.sol';\n\n/// @title Self Permit\n/// @notice Functionality to call permit on any EIP-2612-compliant token for use in the route\n/// @dev These functions are expected to be embedded in multicalls to allow EOAs to approve a contract and call a function\n/// that requires an approval in a single transaction.\nabstract contract SelfPermit is ISelfPermit {\n    /// @inheritdoc ISelfPermit\n    function selfPermit(\n        address token,\n        uint256 value,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) public payable override {\n        IERC20Permit(token).permit(msg.sender, address(this), value, deadline, v, r, s);\n    }\n\n    /// @inheritdoc ISelfPermit\n    function selfPermitIfNecessary(\n        address token,\n        uint256 value,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) external payable override {\n        if (IERC20(token).allowance(msg.sender, address(this)) < value) selfPermit(token, value, deadline, v, r, s);\n    }\n\n    /// @inheritdoc ISelfPermit\n    function selfPermitAllowed(\n        address token,\n        uint256 nonce,\n        uint256 expiry,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) public payable override {\n        IERC20PermitAllowed(token).permit(msg.sender, address(this), nonce, expiry, true, v, r, s);\n    }\n\n    /// @inheritdoc ISelfPermit\n    function selfPermitAllowedIfNecessary(\n        address token,\n        uint256 nonce,\n        uint256 expiry,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) external payable override {\n        if (IERC20(token).allowance(msg.sender, address(this)) < type(uint256).max)\n            selfPermitAllowed(token, nonce, expiry, v, r, s);\n    }\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\n\nimport '../interfaces/IPeripheryImmutableState.sol';\n\n/// @title Immutable state\n/// @notice Immutable state used by periphery contracts\nabstract contract PeripheryImmutableState is IPeripheryImmutableState {\n    /// @inheritdoc IPeripheryImmutableState\n    address public immutable override factory;\n    /// @inheritdoc IPeripheryImmutableState\n    address public immutable override SAMB;\n\n    constructor(address _factory, address _SAMB) {\n        factory = _factory;\n        SAMB = _SAMB;\n    }\n}\n"
      },
      "contracts/interfaces/ISwapRouter02.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\nimport '@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol';\n\nimport './IClassicSwapRouter.sol';\nimport './ICLSwapRouter.sol';\nimport './IApproveAndCall.sol';\nimport './IMulticallExtended.sol';\n\n/// @title Router token swapping functionality\ninterface ISwapRouter02 is IClassicSwapRouter, ICLSwapRouter, IApproveAndCall, IMulticallExtended, ISelfPermit {\n\n}\n"
      },
      "contracts/ClassicSwapRouter.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol';\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\n\nimport './interfaces/IClassicSwapRouter.sol';\nimport './base/ImmutableState.sol';\nimport './base/PeripheryPaymentsWithFeeExtended.sol';\nimport './libraries/Constants.sol';\nimport './libraries/AstraClassicLibrary.sol';\n\n/// @title Astra Classic Swap Router\n/// @notice Router for stateless execution of swaps against Astra Classic\nabstract contract ClassicSwapRouter is IClassicSwapRouter, ImmutableState, PeripheryPaymentsWithFeeExtended {\n    using LowGasSafeMath for uint256;\n\n    // supports fee-on-transfer tokens\n    // requires the initial amount to have already been sent to the first pair\n    function _swap(address[] memory path, address _to) private {\n        for (uint256 i; i < path.length - 1; i++) {\n            (address input, address output) = (path[i], path[i + 1]);\n            (address token0, ) = AstraClassicLibrary.sortTokens(input, output);\n            IAstraPair pair = IAstraPair(AstraClassicLibrary.pairFor(factoryClassic, input, output));\n            uint256 amountInput;\n            uint256 amountOutput;\n            // scope to avoid stack too deep errors\n            {\n                (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\n                (uint256 reserveInput, uint256 reserveOutput) =\n                    input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);\n                amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);\n                amountOutput = AstraClassicLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);\n            }\n            (uint256 amount0Out, uint256 amount1Out) =\n                input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0));\n            address to = i < path.length - 2 ? AstraClassicLibrary.pairFor(factoryClassic, output, path[i + 2]) : _to;\n            pair.swap(amount0Out, amount1Out, to, new bytes(0));\n        }\n    }\n\n    /// @inheritdoc IClassicSwapRouter\n    function swapExactTokensForTokens(\n        uint256 amountIn,\n        uint256 amountOutMin,\n        address[] calldata path,\n        address to\n    ) external payable override returns (uint256 amountOut) {\n        // use amountIn == Constants.CONTRACT_BALANCE as a flag to swap the entire balance of the contract\n        bool hasAlreadyPaid;\n        if (amountIn == Constants.CONTRACT_BALANCE) {\n            hasAlreadyPaid = true;\n            amountIn = IERC20(path[0]).balanceOf(address(this));\n        }\n\n        pay(\n            path[0],\n            hasAlreadyPaid ? address(this) : msg.sender,\n            AstraClassicLibrary.pairFor(factoryClassic, path[0], path[1]),\n            amountIn\n        );\n\n        // find and replace to addresses\n        if (to == Constants.MSG_SENDER) to = msg.sender;\n        else if (to == Constants.ADDRESS_THIS) to = address(this);\n\n        uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);\n\n        _swap(path, to);\n\n        amountOut = IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore);\n        require(amountOut >= amountOutMin, 'Too little received');\n    }\n\n    /// @inheritdoc IClassicSwapRouter\n    function swapTokensForExactTokens(\n        uint256 amountOut,\n        uint256 amountInMax,\n        address[] calldata path,\n        address to\n    ) external payable override returns (uint256 amountIn) {\n        amountIn = AstraClassicLibrary.getAmountsIn(factoryClassic, amountOut, path)[0];\n        require(amountIn <= amountInMax, 'Too much requested');\n\n        pay(path[0], msg.sender, AstraClassicLibrary.pairFor(factoryClassic, path[0], path[1]), amountIn);\n\n        // find and replace to addresses\n        if (to == Constants.MSG_SENDER) to = msg.sender;\n        else if (to == Constants.ADDRESS_THIS) to = address(this);\n\n        _swap(path, to);\n    }\n}\n"
      },
      "contracts/CLSwapRouter.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '@airdao/astra-cl-core/contracts/libraries/SafeCast.sol';\nimport '@airdao/astra-cl-core/contracts/libraries/TickMath.sol';\nimport '@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/Path.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol';\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\n\nimport './interfaces/ICLSwapRouter.sol';\nimport './base/PeripheryPaymentsWithFeeExtended.sol';\nimport './base/OracleSlippage.sol';\nimport './libraries/Constants.sol';\n\n/// @title Astra CL Swap Router\n/// @notice Router for stateless execution of swaps against Astra CL\nabstract contract CLSwapRouter is ICLSwapRouter, PeripheryPaymentsWithFeeExtended, OracleSlippage {\n    using Path for bytes;\n    using SafeCast for uint256;\n\n    /// @dev Used as the placeholder value for amountInCached, because the computed amount in for an exact output swap\n    /// can never actually be this value\n    uint256 private constant DEFAULT_AMOUNT_IN_CACHED = type(uint256).max;\n\n    /// @dev Transient storage variable used for returning the computed amount in for an exact output swap.\n    uint256 private amountInCached = DEFAULT_AMOUNT_IN_CACHED;\n\n    /// @dev Returns the pool for the given token pair and fee. The pool contract may or may not exist.\n    function getPool(\n        address tokenA,\n        address tokenB,\n        uint24 fee\n    ) private view returns (IAstraCLPool) {\n        return IAstraCLPool(PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)));\n    }\n\n    struct SwapCallbackData {\n        bytes path;\n        address payer;\n    }\n\n    /// @inheritdoc IAstraCLSwapCallback\n    function astraCLSwapCallback(\n        int256 amount0Delta,\n        int256 amount1Delta,\n        bytes calldata _data\n    ) external override {\n        require(amount0Delta > 0 || amount1Delta > 0); // swaps entirely within 0-liquidity regions are not supported\n        SwapCallbackData memory data = abi.decode(_data, (SwapCallbackData));\n        (address tokenIn, address tokenOut, uint24 fee) = data.path.decodeFirstPool();\n        CallbackValidation.verifyCallback(factory, tokenIn, tokenOut, fee);\n\n        (bool isExactInput, uint256 amountToPay) =\n            amount0Delta > 0\n                ? (tokenIn < tokenOut, uint256(amount0Delta))\n                : (tokenOut < tokenIn, uint256(amount1Delta));\n\n        if (isExactInput) {\n            pay(tokenIn, data.payer, msg.sender, amountToPay);\n        } else {\n            // either initiate the next swap or pay\n            if (data.path.hasMultiplePools()) {\n                data.path = data.path.skipToken();\n                exactOutputInternal(amountToPay, msg.sender, 0, data);\n            } else {\n                amountInCached = amountToPay;\n                // note that because exact output swaps are executed in reverse order, tokenOut is actually tokenIn\n                pay(tokenOut, data.payer, msg.sender, amountToPay);\n            }\n        }\n    }\n\n    /// @dev Performs a single exact input swap\n    function exactInputInternal(\n        uint256 amountIn,\n        address recipient,\n        uint160 sqrtPriceLimitX96,\n        SwapCallbackData memory data\n    ) private returns (uint256 amountOut) {\n        // find and replace recipient addresses\n        if (recipient == Constants.MSG_SENDER) recipient = msg.sender;\n        else if (recipient == Constants.ADDRESS_THIS) recipient = address(this);\n\n        (address tokenIn, address tokenOut, uint24 fee) = data.path.decodeFirstPool();\n\n        bool zeroForOne = tokenIn < tokenOut;\n\n        (int256 amount0, int256 amount1) =\n            getPool(tokenIn, tokenOut, fee).swap(\n                recipient,\n                zeroForOne,\n                amountIn.toInt256(),\n                sqrtPriceLimitX96 == 0\n                    ? (zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1)\n                    : sqrtPriceLimitX96,\n                abi.encode(data)\n            );\n\n        return uint256(-(zeroForOne ? amount1 : amount0));\n    }\n\n    /// @inheritdoc ICLSwapRouter\n    function exactInputSingle(ExactInputSingleParams memory params)\n        external\n        payable\n        override\n        returns (uint256 amountOut)\n    {\n        // use amountIn == Constants.CONTRACT_BALANCE as a flag to swap the entire balance of the contract\n        bool hasAlreadyPaid;\n        if (params.amountIn == Constants.CONTRACT_BALANCE) {\n            hasAlreadyPaid = true;\n            params.amountIn = IERC20(params.tokenIn).balanceOf(address(this));\n        }\n\n        amountOut = exactInputInternal(\n            params.amountIn,\n            params.recipient,\n            params.sqrtPriceLimitX96,\n            SwapCallbackData({\n                path: abi.encodePacked(params.tokenIn, params.fee, params.tokenOut),\n                payer: hasAlreadyPaid ? address(this) : msg.sender\n            })\n        );\n        require(amountOut >= params.amountOutMinimum, 'Too little received');\n    }\n\n    /// @inheritdoc ICLSwapRouter\n    function exactInput(ExactInputParams memory params) external payable override returns (uint256 amountOut) {\n        // use amountIn == Constants.CONTRACT_BALANCE as a flag to swap the entire balance of the contract\n        bool hasAlreadyPaid;\n        if (params.amountIn == Constants.CONTRACT_BALANCE) {\n            hasAlreadyPaid = true;\n            (address tokenIn, , ) = params.path.decodeFirstPool();\n            params.amountIn = IERC20(tokenIn).balanceOf(address(this));\n        }\n\n        address payer = hasAlreadyPaid ? address(this) : msg.sender;\n\n        while (true) {\n            bool hasMultiplePools = params.path.hasMultiplePools();\n\n            // the outputs of prior swaps become the inputs to subsequent ones\n            params.amountIn = exactInputInternal(\n                params.amountIn,\n                hasMultiplePools ? address(this) : params.recipient, // for intermediate swaps, this contract custodies\n                0,\n                SwapCallbackData({\n                    path: params.path.getFirstPool(), // only the first pool in the path is necessary\n                    payer: payer\n                })\n            );\n\n            // decide whether to continue or terminate\n            if (hasMultiplePools) {\n                payer = address(this);\n                params.path = params.path.skipToken();\n            } else {\n                amountOut = params.amountIn;\n                break;\n            }\n        }\n\n        require(amountOut >= params.amountOutMinimum, 'Too little received');\n    }\n\n    /// @dev Performs a single exact output swap\n    function exactOutputInternal(\n        uint256 amountOut,\n        address recipient,\n        uint160 sqrtPriceLimitX96,\n        SwapCallbackData memory data\n    ) private returns (uint256 amountIn) {\n        // find and replace recipient addresses\n        if (recipient == Constants.MSG_SENDER) recipient = msg.sender;\n        else if (recipient == Constants.ADDRESS_THIS) recipient = address(this);\n\n        (address tokenOut, address tokenIn, uint24 fee) = data.path.decodeFirstPool();\n\n        bool zeroForOne = tokenIn < tokenOut;\n\n        (int256 amount0Delta, int256 amount1Delta) =\n            getPool(tokenIn, tokenOut, fee).swap(\n                recipient,\n                zeroForOne,\n                -amountOut.toInt256(),\n                sqrtPriceLimitX96 == 0\n                    ? (zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1)\n                    : sqrtPriceLimitX96,\n                abi.encode(data)\n            );\n\n        uint256 amountOutReceived;\n        (amountIn, amountOutReceived) = zeroForOne\n            ? (uint256(amount0Delta), uint256(-amount1Delta))\n            : (uint256(amount1Delta), uint256(-amount0Delta));\n        // it's technically possible to not receive the full output amount,\n        // so if no price limit has been specified, require this possibility away\n        if (sqrtPriceLimitX96 == 0) require(amountOutReceived == amountOut);\n    }\n\n    /// @inheritdoc ICLSwapRouter\n    function exactOutputSingle(ExactOutputSingleParams calldata params)\n        external\n        payable\n        override\n        returns (uint256 amountIn)\n    {\n        // avoid an SLOAD by using the swap return data\n        amountIn = exactOutputInternal(\n            params.amountOut,\n            params.recipient,\n            params.sqrtPriceLimitX96,\n            SwapCallbackData({path: abi.encodePacked(params.tokenOut, params.fee, params.tokenIn), payer: msg.sender})\n        );\n\n        require(amountIn <= params.amountInMaximum, 'Too much requested');\n        // has to be reset even though we don't use it in the single hop case\n        amountInCached = DEFAULT_AMOUNT_IN_CACHED;\n    }\n\n    /// @inheritdoc ICLSwapRouter\n    function exactOutput(ExactOutputParams calldata params) external payable override returns (uint256 amountIn) {\n        exactOutputInternal(\n            params.amountOut,\n            params.recipient,\n            0,\n            SwapCallbackData({path: params.path, payer: msg.sender})\n        );\n\n        amountIn = amountInCached;\n        require(amountIn <= params.amountInMaximum, 'Too much requested');\n        amountInCached = DEFAULT_AMOUNT_IN_CACHED;\n    }\n}\n"
      },
      "contracts/base/MulticallExtended.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '@airdao/astra-cl-periphery/contracts/base/Multicall.sol';\n\nimport '../interfaces/IMulticallExtended.sol';\nimport '../base/PeripheryValidationExtended.sol';\n\n/// @title Multicall\n/// @notice Enables calling multiple methods in a single call to the contract\nabstract contract MulticallExtended is IMulticallExtended, Multicall, PeripheryValidationExtended {\n    /// @inheritdoc IMulticallExtended\n    function multicall(uint256 deadline, bytes[] calldata data)\n        external\n        payable\n        override\n        checkDeadline(deadline)\n        returns (bytes[] memory)\n    {\n        return multicall(data);\n    }\n\n    /// @inheritdoc IMulticallExtended\n    function multicall(bytes32 previousBlockhash, bytes[] calldata data)\n        external\n        payable\n        override\n        checkPreviousBlockhash(previousBlockhash)\n        returns (bytes[] memory)\n    {\n        return multicall(data);\n    }\n}\n"
      },
      "@openzeppelin/contracts/drafts/IERC20Permit.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n */\ninterface IERC20Permit {\n    /**\n     * @dev Sets `value` as the allowance of `spender` over `owner`'s tokens,\n     * given `owner`'s signed approval.\n     *\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n     * ordering also apply here.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `deadline` must be a timestamp in the future.\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n     * over the EIP712-formatted function arguments.\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\n     *\n     * For more information on the signature format, see the\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n     * section].\n     */\n    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;\n\n    /**\n     * @dev Returns the current nonce for `owner`. This value must be\n     * included whenever a signature is generated for {permit}.\n     *\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\n     * prevents a signature from being used multiple times.\n     */\n    function nonces(address owner) external view returns (uint256);\n\n    /**\n     * @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\n\n/// @title Self Permit\n/// @notice Functionality to call permit on any EIP-2612-compliant token for use in the route\ninterface ISelfPermit {\n    /// @notice Permits this contract to spend a given token from `msg.sender`\n    /// @dev The `owner` is always msg.sender and the `spender` is always address(this).\n    /// @param token The address of the token spent\n    /// @param value The amount that can be spent of token\n    /// @param deadline A timestamp, the current blocktime must be less than or equal to this timestamp\n    /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n    /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n    /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`\n    function selfPermit(address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external payable;\n\n    /// @notice Permits this contract to spend a given token from `msg.sender`\n    /// @dev The `owner` is always msg.sender and the `spender` is always address(this).\n    /// Can be used instead of #selfPermit to prevent calls from failing due to a frontrun of a call to #selfPermit\n    /// @param token The address of the token spent\n    /// @param value The amount that can be spent of token\n    /// @param deadline A timestamp, the current blocktime must be less than or equal to this timestamp\n    /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n    /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n    /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`\n    function selfPermitIfNecessary(\n        address token,\n        uint256 value,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) external payable;\n\n    /// @notice Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\n    /// @dev The `owner` is always msg.sender and the `spender` is always address(this)\n    /// @param token The address of the token spent\n    /// @param nonce The current nonce of the owner\n    /// @param expiry The timestamp at which the permit is no longer valid\n    /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n    /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n    /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`\n    function selfPermitAllowed(\n        address token,\n        uint256 nonce,\n        uint256 expiry,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) external payable;\n\n    /// @notice Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\n    /// @dev The `owner` is always msg.sender and the `spender` is always address(this)\n    /// Can be used instead of #selfPermitAllowed to prevent calls from failing due to a frontrun of a call to #selfPermitAllowed.\n    /// @param token The address of the token spent\n    /// @param nonce The current nonce of the owner\n    /// @param expiry The timestamp at which the permit is no longer valid\n    /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n    /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n    /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`\n    function selfPermitAllowedIfNecessary(\n        address token,\n        uint256 nonce,\n        uint256 expiry,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) external payable;\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Interface for permit\n/// @notice Interface used by DAI/CHAI for permit\ninterface IERC20PermitAllowed {\n    /// @notice Approve the spender to spend some tokens via the holder signature\n    /// @dev This is the permit interface used by DAI and CHAI\n    /// @param holder The address of the token holder, the token owner\n    /// @param spender The address of the token spender\n    /// @param nonce The holder's nonce, increases at each call to permit\n    /// @param expiry The timestamp at which the permit is no longer valid\n    /// @param allowed Boolean that sets approval amount, true for type(uint256).max and false for 0\n    /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n    /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n    /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`\n    function permit(\n        address holder,\n        address spender,\n        uint256 nonce,\n        uint256 expiry,\n        bool allowed,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) external;\n}\n"
      },
      "contracts/interfaces/IClassicSwapRouter.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\n/// @title Router token swapping functionality\n/// @notice Functions for swapping tokens via Astra Classic\ninterface IClassicSwapRouter {\n    /// @notice Swaps `amountIn` of one token for as much as possible of another token\n    /// @dev Setting `amountIn` to 0 will cause the contract to look up its own balance,\n    /// and swap the entire amount, enabling contracts to send tokens before calling this function.\n    /// @param amountIn The amount of token to swap\n    /// @param amountOutMin The minimum amount of output that must be received\n    /// @param path The ordered list of tokens to swap through\n    /// @param to The recipient address\n    /// @return amountOut The amount of the received token\n    function swapExactTokensForTokens(\n        uint256 amountIn,\n        uint256 amountOutMin,\n        address[] calldata path,\n        address to\n    ) external payable returns (uint256 amountOut);\n\n    /// @notice Swaps as little as possible of one token for an exact amount of another token\n    /// @param amountOut The amount of token to swap for\n    /// @param amountInMax The maximum amount of input that the caller will pay\n    /// @param path The ordered list of tokens to swap through\n    /// @param to The recipient address\n    /// @return amountIn The amount of token to pay\n    function swapTokensForExactTokens(\n        uint256 amountOut,\n        uint256 amountInMax,\n        address[] calldata path,\n        address to\n    ) external payable returns (uint256 amountIn);\n}\n"
      },
      "contracts/interfaces/ICLSwapRouter.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\nimport '@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol';\n\n/// @title Router token swapping functionality\n/// @notice Functions for swapping tokens via Astra CL\ninterface ICLSwapRouter is IAstraCLSwapCallback {\n    struct ExactInputSingleParams {\n        address tokenIn;\n        address tokenOut;\n        uint24 fee;\n        address recipient;\n        uint256 amountIn;\n        uint256 amountOutMinimum;\n        uint160 sqrtPriceLimitX96;\n    }\n\n    /// @notice Swaps `amountIn` of one token for as much as possible of another token\n    /// @dev Setting `amountIn` to 0 will cause the contract to look up its own balance,\n    /// and swap the entire amount, enabling contracts to send tokens before calling this function.\n    /// @param params The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata\n    /// @return amountOut The amount of the received token\n    function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut);\n\n    struct ExactInputParams {\n        bytes path;\n        address recipient;\n        uint256 amountIn;\n        uint256 amountOutMinimum;\n    }\n\n    /// @notice Swaps `amountIn` of one token for as much as possible of another along the specified path\n    /// @dev Setting `amountIn` to 0 will cause the contract to look up its own balance,\n    /// and swap the entire amount, enabling contracts to send tokens before calling this function.\n    /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata\n    /// @return amountOut The amount of the received token\n    function exactInput(ExactInputParams calldata params) external payable returns (uint256 amountOut);\n\n    struct ExactOutputSingleParams {\n        address tokenIn;\n        address tokenOut;\n        uint24 fee;\n        address recipient;\n        uint256 amountOut;\n        uint256 amountInMaximum;\n        uint160 sqrtPriceLimitX96;\n    }\n\n    /// @notice Swaps as little as possible of one token for `amountOut` of another token\n    /// that may remain in the router after the swap.\n    /// @param params The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata\n    /// @return amountIn The amount of the input token\n    function exactOutputSingle(ExactOutputSingleParams calldata params) external payable returns (uint256 amountIn);\n\n    struct ExactOutputParams {\n        bytes path;\n        address recipient;\n        uint256 amountOut;\n        uint256 amountInMaximum;\n    }\n\n    /// @notice Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed)\n    /// that may remain in the router after the swap.\n    /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata\n    /// @return amountIn The amount of the input token\n    function exactOutput(ExactOutputParams calldata params) external payable returns (uint256 amountIn);\n}\n"
      },
      "contracts/interfaces/IMulticallExtended.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\nimport '@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol';\n\n/// @title MulticallExtended interface\n/// @notice Enables calling multiple methods in a single call to the contract with optional validation\ninterface IMulticallExtended is IMulticall {\n    /// @notice Call multiple functions in the current contract and return the data from all of them if they all succeed\n    /// @dev The `msg.value` should not be trusted for any method callable from multicall.\n    /// @param deadline The time by which this function must be called before failing\n    /// @param data The encoded function data for each of the calls to make to this contract\n    /// @return results The results from each of the calls passed in via data\n    function multicall(uint256 deadline, bytes[] calldata data) external payable returns (bytes[] memory results);\n\n    /// @notice Call multiple functions in the current contract and return the data from all of them if they all succeed\n    /// @dev The `msg.value` should not be trusted for any method callable from multicall.\n    /// @param previousBlockhash The expected parent blockHash\n    /// @param data The encoded function data for each of the calls to make to this contract\n    /// @return results The results from each of the calls passed in via data\n    function multicall(bytes32 previousBlockhash, bytes[] calldata data)\n        external\n        payable\n        returns (bytes[] memory results);\n}\n"
      },
      "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Callback for IAstraCLPoolActions#swap\n/// @notice Any contract that calls IAstraCLPoolActions#swap must implement this interface\ninterface IAstraCLSwapCallback {\n    /// @notice Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\n    /// @dev In the implementation you must pay the pool tokens owed for the swap.\n    /// The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory.\n    /// amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\n    /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by\n    /// the end of the swap. If positive, the callback must send that amount of token0 to the pool.\n    /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by\n    /// the end of the swap. If positive, the callback must send that amount of token1 to the pool.\n    /// @param data Any data passed through by the caller via the IAstraCLPoolActions#swap call\n    function astraCLSwapCallback(int256 amount0Delta, int256 amount1Delta, bytes calldata data) external;\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\n/// @title Multicall interface\n/// @notice Enables calling multiple methods in a single call to the contract\ninterface IMulticall {\n    /// @notice Call multiple functions in the current contract and return the data from all of them if they all succeed\n    /// @dev The `msg.value` should not be trusted for any method callable from multicall.\n    /// @param data The encoded function data for each of the calls to make to this contract\n    /// @return results The results from each of the calls passed in via data\n    function multicall(bytes[] calldata data) external payable returns (bytes[] memory results);\n}\n"
      },
      "@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.0;\n\n/// @title Optimized overflow and underflow safe math operations\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\nlibrary LowGasSafeMath {\n    /// @notice Returns x + y, reverts if sum overflows uint256\n    /// @param x The augend\n    /// @param y The addend\n    /// @return z The sum of x and y\n    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\n        require((z = x + y) >= x);\n    }\n\n    /// @notice Returns x - y, reverts if underflows\n    /// @param x The minuend\n    /// @param y The subtrahend\n    /// @return z The difference of x and y\n    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\n        require((z = x - y) <= x);\n    }\n\n    /// @notice Returns x * y, reverts if overflows\n    /// @param x The multiplicand\n    /// @param y The multiplier\n    /// @return z The product of x and y\n    function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\n        require(x == 0 || (z = x * y) / x == y);\n    }\n\n    /// @notice Returns x + y, reverts if overflows or underflows\n    /// @param x The augend\n    /// @param y The addend\n    /// @return z The sum of x and y\n    function add(int256 x, int256 y) internal pure returns (int256 z) {\n        require((z = x + y) >= x == (y >= 0));\n    }\n\n    /// @notice Returns x - y, reverts if overflows or underflows\n    /// @param x The minuend\n    /// @param y The subtrahend\n    /// @return z The difference of x and y\n    function sub(int256 x, int256 y) internal pure returns (int256 z) {\n        require((z = x - y) <= x == (y >= 0));\n    }\n}\n"
      },
      "contracts/base/PeripheryPaymentsWithFeeExtended.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\n\nimport '@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol';\n\nimport '../interfaces/IPeripheryPaymentsWithFeeExtended.sol';\nimport './PeripheryPaymentsExtended.sol';\n\nabstract contract PeripheryPaymentsWithFeeExtended is\n    IPeripheryPaymentsWithFeeExtended,\n    PeripheryPaymentsExtended,\n    PeripheryPaymentsWithFee\n{\n    /// @inheritdoc IPeripheryPaymentsWithFeeExtended\n    function unwrapSAMBWithFee(\n        uint256 amountMinimum,\n        uint256 feeBips,\n        address feeRecipient\n    ) external payable override {\n        unwrapSAMBWithFee(amountMinimum, msg.sender, feeBips, feeRecipient);\n    }\n\n    /// @inheritdoc IPeripheryPaymentsWithFeeExtended\n    function sweepTokenWithFee(\n        address token,\n        uint256 amountMinimum,\n        uint256 feeBips,\n        address feeRecipient\n    ) external payable override {\n        sweepTokenWithFee(token, amountMinimum, msg.sender, feeBips, feeRecipient);\n    }\n}\n"
      },
      "contracts/libraries/Constants.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\n\n/// @title Constant state\n/// @notice Constant state used by the swap router\nlibrary Constants {\n    /// @dev Used for identifying cases when this contract's balance of a token is to be used\n    uint256 internal constant CONTRACT_BALANCE = 0;\n\n    /// @dev Used as a flag for identifying msg.sender, saves gas by sending more 0 bytes\n    address internal constant MSG_SENDER = address(1);\n\n    /// @dev Used as a flag for identifying address(this), saves gas by sending more 0 bytes\n    address internal constant ADDRESS_THIS = address(2);\n}\n"
      },
      "contracts/libraries/AstraClassicLibrary.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\nimport '@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol';\nimport '@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol';\n\nlibrary AstraClassicLibrary {\n    using LowGasSafeMath for uint256;\n\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\n        require(tokenA != tokenB);\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\n        require(token0 != address(0));\n    }\n\n    // calculates the CREATE2 address for a pair without making any external calls\n    function pairFor(\n        address factory,\n        address tokenA,\n        address tokenB\n    ) internal pure returns (address pair) {\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\n        pair = address(\n            uint256(\n                keccak256(\n                    abi.encodePacked(\n                        hex'ff',\n                        factory,\n                        keccak256(abi.encodePacked(token0, token1)),\n                        hex'400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f' // init code hash\n                    )\n                )\n            )\n        );\n    }\n\n    // fetches and sorts the reserves for a pair\n    function getReserves(\n        address factory,\n        address tokenA,\n        address tokenB\n    ) internal view returns (uint256 reserveA, uint256 reserveB) {\n        (address token0, ) = sortTokens(tokenA, tokenB);\n        (uint256 reserve0, uint256 reserve1, ) = IAstraPair(pairFor(factory, tokenA, tokenB)).getReserves();\n        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);\n    }\n\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\n    function getAmountOut(\n        uint256 amountIn,\n        uint256 reserveIn,\n        uint256 reserveOut\n    ) internal pure returns (uint256 amountOut) {\n        require(amountIn > 0, 'INSUFFICIENT_INPUT_AMOUNT');\n        require(reserveIn > 0 && reserveOut > 0);\n        uint256 amountInWithFee = amountIn.mul(997);\n        uint256 numerator = amountInWithFee.mul(reserveOut);\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\n        amountOut = numerator / denominator;\n    }\n\n    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset\n    function getAmountIn(\n        uint256 amountOut,\n        uint256 reserveIn,\n        uint256 reserveOut\n    ) internal pure returns (uint256 amountIn) {\n        require(amountOut > 0, 'INSUFFICIENT_OUTPUT_AMOUNT');\n        require(reserveIn > 0 && reserveOut > 0);\n        uint256 numerator = reserveIn.mul(amountOut).mul(1000);\n        uint256 denominator = reserveOut.sub(amountOut).mul(997);\n        amountIn = (numerator / denominator).add(1);\n    }\n\n    // performs chained getAmountIn calculations on any number of pairs\n    function getAmountsIn(\n        address factory,\n        uint256 amountOut,\n        address[] memory path\n    ) internal view returns (uint256[] memory amounts) {\n        require(path.length >= 2);\n        amounts = new uint256[](path.length);\n        amounts[amounts.length - 1] = amountOut;\n        for (uint256 i = path.length - 1; i > 0; i--) {\n            (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i - 1], path[i]);\n            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);\n        }\n    }\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\n\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\n// TODO: change to import from @airdao/astra-cl-core\nimport '@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol';\n\nimport './PeripheryPayments.sol';\nimport '../interfaces/IPeripheryPaymentsWithFee.sol';\n\nimport '../interfaces/external/ISAMB.sol';\nimport '../libraries/TransferHelper.sol';\n\nabstract contract PeripheryPaymentsWithFee is PeripheryPayments, IPeripheryPaymentsWithFee {\n    using LowGasSafeMath for uint256;\n\n    /// @inheritdoc IPeripheryPaymentsWithFee\n    function unwrapSAMBWithFee(\n        uint256 amountMinimum,\n        address recipient,\n        uint256 feeBips,\n        address feeRecipient\n    ) public payable override {\n        require(feeBips > 0 && feeBips <= 100);\n\n        uint256 balanceSAMB = ISAMB(SAMB).balanceOf(address(this));\n        require(balanceSAMB >= amountMinimum, 'Insufficient SAMB');\n\n        if (balanceSAMB > 0) {\n            ISAMB(SAMB).withdraw(balanceSAMB);\n            uint256 feeAmount = balanceSAMB.mul(feeBips) / 10_000;\n            if (feeAmount > 0) TransferHelper.safeTransferAMB(feeRecipient, feeAmount);\n            TransferHelper.safeTransferAMB(recipient, balanceSAMB - feeAmount);\n        }\n    }\n\n    /// @inheritdoc IPeripheryPaymentsWithFee\n    function sweepTokenWithFee(\n        address token,\n        uint256 amountMinimum,\n        address recipient,\n        uint256 feeBips,\n        address feeRecipient\n    ) public payable override {\n        require(feeBips > 0 && feeBips <= 100);\n\n        uint256 balanceToken = IERC20(token).balanceOf(address(this));\n        require(balanceToken >= amountMinimum, 'Insufficient token');\n\n        if (balanceToken > 0) {\n            uint256 feeAmount = balanceToken.mul(feeBips) / 10_000;\n            if (feeAmount > 0) TransferHelper.safeTransfer(token, feeRecipient, feeAmount);\n            TransferHelper.safeTransfer(token, recipient, balanceToken - feeAmount);\n        }\n    }\n}\n"
      },
      "contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\n\nimport '@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol';\n\nimport './IPeripheryPaymentsExtended.sol';\n\n/// @title Periphery Payments With Fee Extended\n/// @notice Functions to ease deposits and withdrawals of AMB\ninterface IPeripheryPaymentsWithFeeExtended is IPeripheryPaymentsExtended, IPeripheryPaymentsWithFee {\n    /// @notice Unwraps the contract's SAMB balance and sends it to msg.sender as AMB, with a percentage between\n    /// 0 (exclusive), and 1 (inclusive) going to feeRecipient\n    /// @dev The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\n    function unwrapSAMBWithFee(\n        uint256 amountMinimum,\n        uint256 feeBips,\n        address feeRecipient\n    ) external payable;\n\n    /// @notice Transfers the full amount of a token held by this contract to msg.sender, with a percentage between\n    /// 0 (exclusive) and 1 (inclusive) going to feeRecipient\n    /// @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users\n    function sweepTokenWithFee(\n        address token,\n        uint256 amountMinimum,\n        uint256 feeBips,\n        address feeRecipient\n    ) external payable;\n}\n"
      },
      "contracts/base/PeripheryPaymentsExtended.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\n\nimport '@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol';\n\nimport '../interfaces/IPeripheryPaymentsExtended.sol';\n\nabstract contract PeripheryPaymentsExtended is IPeripheryPaymentsExtended, PeripheryPayments {\n    /// @inheritdoc IPeripheryPaymentsExtended\n    function unwrapSAMB(uint256 amountMinimum) external payable override {\n        unwrapSAMB(amountMinimum, msg.sender);\n    }\n\n    /// @inheritdoc IPeripheryPaymentsExtended\n    function wrapAMB(uint256 value) external payable override {\n        ISAMB(SAMB).deposit{value: value}();\n    }\n\n    /// @inheritdoc IPeripheryPaymentsExtended\n    function sweepToken(address token, uint256 amountMinimum) external payable override {\n        sweepToken(token, amountMinimum, msg.sender);\n    }\n\n    /// @inheritdoc IPeripheryPaymentsExtended\n    function pull(address token, uint256 value) external payable override {\n        TransferHelper.safeTransferFrom(token, msg.sender, address(this), value);\n    }\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\n\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\n\nimport '../interfaces/IPeripheryPayments.sol';\nimport '../interfaces/external/ISAMB.sol';\n\nimport '../libraries/TransferHelper.sol';\n\nimport './PeripheryImmutableState.sol';\n\nabstract contract PeripheryPayments is IPeripheryPayments, PeripheryImmutableState {\n    receive() external payable {\n        require(msg.sender == SAMB, 'Not SAMB');\n    }\n\n    /// @inheritdoc IPeripheryPayments\n    function unwrapSAMB(uint256 amountMinimum, address recipient) public payable override {\n        uint256 balanceSAMB = ISAMB(SAMB).balanceOf(address(this));\n        require(balanceSAMB >= amountMinimum, 'Insufficient SAMB');\n\n        if (balanceSAMB > 0) {\n            ISAMB(SAMB).withdraw(balanceSAMB);\n            TransferHelper.safeTransferAMB(recipient, balanceSAMB);\n        }\n    }\n\n    /// @inheritdoc IPeripheryPayments\n    function sweepToken(address token, uint256 amountMinimum, address recipient) public payable override {\n        uint256 balanceToken = IERC20(token).balanceOf(address(this));\n        require(balanceToken >= amountMinimum, 'Insufficient token');\n\n        if (balanceToken > 0) {\n            TransferHelper.safeTransfer(token, recipient, balanceToken);\n        }\n    }\n\n    /// @inheritdoc IPeripheryPayments\n    function refundAMB() external payable override {\n        if (address(this).balance > 0) TransferHelper.safeTransferAMB(msg.sender, address(this).balance);\n    }\n\n    /// @param token The token to pay\n    /// @param payer The entity that must pay\n    /// @param recipient The entity that will receive payment\n    /// @param value The amount to pay\n    function pay(address token, address payer, address recipient, uint256 value) internal {\n        if (token == SAMB && address(this).balance >= value) {\n            // pay with SAMB\n            ISAMB(SAMB).deposit{value: value}(); // wrap only what is needed to pay\n            ISAMB(SAMB).transfer(recipient, value);\n        } else if (payer == address(this)) {\n            // pay with tokens already in the contract (for the exact input multihop case)\n            TransferHelper.safeTransfer(token, recipient, value);\n        } else {\n            // pull payment\n            TransferHelper.safeTransferFrom(token, payer, recipient, value);\n        }\n    }\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\n\nimport './IPeripheryPayments.sol';\n\n/// @title Periphery Payments\n/// @notice Functions to ease deposits and withdrawals of AMB\ninterface IPeripheryPaymentsWithFee is IPeripheryPayments {\n    /// @notice Unwraps the contract's SAMB balance and sends it to recipient as AMB, with a percentage between\n    /// 0 (exclusive), and 1 (inclusive) going to feeRecipient\n    /// @dev The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\n    function unwrapSAMBWithFee(\n        uint256 amountMinimum,\n        address recipient,\n        uint256 feeBips,\n        address feeRecipient\n    ) external payable;\n\n    /// @notice Transfers the full amount of a token held by this contract to recipient, with a percentage between\n    /// 0 (exclusive) and 1 (inclusive) going to feeRecipient\n    /// @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users\n    function sweepTokenWithFee(\n        address token,\n        uint256 amountMinimum,\n        address recipient,\n        uint256 feeBips,\n        address feeRecipient\n    ) external payable;\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\n\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\n\n/// @title Interface for SAMB\ninterface ISAMB is IERC20 {\n    /// @notice Deposit ether to get wrapped ether\n    function deposit() external payable;\n\n    /// @notice Withdraw wrapped ether to get ether\n    function withdraw(uint256) external;\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.6.0;\n\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\n\nlibrary TransferHelper {\n    /// @notice Transfers tokens from the targeted address to the given destination\n    /// @notice Errors with 'STF' if transfer fails\n    /// @param token The contract address of the token to be transferred\n    /// @param from The originating address from which the tokens will be transferred\n    /// @param to The destination address of the transfer\n    /// @param value The amount to be transferred\n    function safeTransferFrom(address token, address from, address to, uint256 value) internal {\n        (bool success, bytes memory data) = token.call(\n            abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value)\n        );\n        require(success && (data.length == 0 || abi.decode(data, (bool))), 'STF');\n    }\n\n    /// @notice Transfers tokens from msg.sender to a recipient\n    /// @dev Errors with ST if transfer fails\n    /// @param token The contract address of the token which will be transferred\n    /// @param to The recipient of the transfer\n    /// @param value The value of the transfer\n    function safeTransfer(address token, address to, uint256 value) internal {\n        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value));\n        require(success && (data.length == 0 || abi.decode(data, (bool))), 'ST');\n    }\n\n    /// @notice Approves the stipulated contract to spend the given allowance in the given token\n    /// @dev Errors with 'SA' if transfer fails\n    /// @param token The contract address of the token to be approved\n    /// @param to The target of the approval\n    /// @param value The amount of the given token the target will be allowed to spend\n    function safeApprove(address token, address to, uint256 value) internal {\n        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value));\n        require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA');\n    }\n\n    /// @notice Transfers AMB to the recipient address\n    /// @dev Fails with `STE`\n    /// @param to The destination of the transfer\n    /// @param value The value to be transferred\n    function safeTransferAMB(address to, uint256 value) internal {\n        (bool success, ) = to.call{value: value}(new bytes(0));\n        require(success, 'STE');\n    }\n}\n"
      },
      "contracts/interfaces/IPeripheryPaymentsExtended.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\n\nimport '@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol';\n\n/// @title Periphery Payments Extended\n/// @notice Functions to ease deposits and withdrawals of AMB and tokens\ninterface IPeripheryPaymentsExtended is IPeripheryPayments {\n    /// @notice Unwraps the contract's SAMB balance and sends it to msg.sender as AMB.\n    /// @dev The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\n    /// @param amountMinimum The minimum amount of SAMB to unwrap\n    function unwrapSAMB(uint256 amountMinimum) external payable;\n\n    /// @notice Wraps the contract's AMB balance into SAMB\n    /// @dev The resulting SAMB is custodied by the router, thus will require further distribution\n    /// @param value The amount of AMB to wrap\n    function wrapAMB(uint256 value) external payable;\n\n    /// @notice Transfers the full amount of a token held by this contract to msg.sender\n    /// @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users\n    /// @param token The contract address of the token which will be transferred to msg.sender\n    /// @param amountMinimum The minimum amount of token required for a transfer\n    function sweepToken(address token, uint256 amountMinimum) external payable;\n\n    /// @notice Transfers the specified amount of a token from the msg.sender to address(this)\n    /// @param token The token to pull\n    /// @param value The amount to pay\n    function pull(address token, uint256 value) external payable;\n}\n"
      },
      "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol": {
        "content": "pragma solidity >=0.5.0;\n\ninterface IAstraPair {\n    event Approval(address indexed owner, address indexed spender, uint value);\n    event Transfer(address indexed from, address indexed to, uint value);\n\n    function name() external pure returns (string memory);\n    function symbol() external pure returns (string memory);\n    function decimals() external pure returns (uint8);\n    function totalSupply() external view returns (uint);\n    function balanceOf(address owner) external view returns (uint);\n    function allowance(address owner, address spender) external view returns (uint);\n\n    function approve(address spender, uint value) external returns (bool);\n    function transfer(address to, uint value) external returns (bool);\n    function transferFrom(address from, address to, uint value) external returns (bool);\n\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\n    function PERMIT_TYPEHASH() external pure returns (bytes32);\n    function nonces(address owner) external view returns (uint);\n\n    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;\n\n    event Mint(address indexed sender, uint amount0, uint amount1);\n    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);\n    event Swap(\n        address indexed sender,\n        uint amount0In,\n        uint amount1In,\n        uint amount0Out,\n        uint amount1Out,\n        address indexed to\n    );\n    event Sync(uint112 reserve0, uint112 reserve1);\n\n    function MINIMUM_LIQUIDITY() external pure returns (uint);\n    function factory() external view returns (address);\n    function token0() external view returns (address);\n    function token1() external view returns (address);\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\n    function price0CumulativeLast() external view returns (uint);\n    function price1CumulativeLast() external view returns (uint);\n    function kLast() external view returns (uint);\n\n    function mint(address to) external returns (uint liquidity);\n    function burn(address to) external returns (uint amount0, uint amount1);\n    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;\n    function skim(address to) external;\n    function sync() external;\n\n    function initialize(address, address) external;\n}\n"
      },
      "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Safe casting methods\n/// @notice Contains methods for safely casting between types\nlibrary SafeCast {\n    /// @notice Cast a uint256 to a uint160, revert on overflow\n    /// @param y The uint256 to be downcasted\n    /// @return z The downcasted integer, now type uint160\n    function toUint160(uint256 y) internal pure returns (uint160 z) {\n        require((z = uint160(y)) == y);\n    }\n\n    /// @notice Cast a int256 to a int128, revert on overflow or underflow\n    /// @param y The int256 to be downcasted\n    /// @return z The downcasted integer, now type int128\n    function toInt128(int256 y) internal pure returns (int128 z) {\n        require((z = int128(y)) == y);\n    }\n\n    /// @notice Cast a uint256 to a int256, revert on overflow\n    /// @param y The uint256 to be casted\n    /// @return z The casted integer, now type int256\n    function toInt256(uint256 y) internal pure returns (int256 z) {\n        require(y < 2 ** 255);\n        z = int256(y);\n    }\n}\n"
      },
      "@airdao/astra-cl-core/contracts/libraries/TickMath.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0 <0.8.0;\n\n/// @title Math library for computing sqrt prices from ticks and vice versa\n/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\n/// prices between 2**-128 and 2**128\nlibrary TickMath {\n    /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\n    int24 internal constant MIN_TICK = -887272;\n    /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\n    int24 internal constant MAX_TICK = -MIN_TICK;\n\n    /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\n    uint160 internal constant MIN_SQRT_RATIO = 4295128739;\n    /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\n    uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;\n\n    /// @notice Calculates sqrt(1.0001^tick) * 2^96\n    /// @dev Throws if |tick| > max tick\n    /// @param tick The input tick for the above formula\n    /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\n    /// at the given tick\n    function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {\n        uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));\n        require(absTick <= uint256(MAX_TICK), 'T');\n\n        uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;\n        if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;\n        if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;\n        if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;\n        if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;\n        if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;\n        if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;\n        if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;\n        if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;\n        if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;\n        if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;\n        if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;\n        if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;\n        if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;\n        if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;\n        if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;\n        if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;\n        if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;\n        if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;\n        if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;\n\n        if (tick > 0) ratio = type(uint256).max / ratio;\n\n        // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.\n        // we then downcast because we know the result always fits within 160 bits due to our tick input constraint\n        // we round up in the division so getTickAtSqrtRatio of the output price is always consistent\n        sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));\n    }\n\n    /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\n    /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may\n    /// ever return.\n    /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\n    /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio\n    function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {\n        // second inequality must be < because the price can never reach the price at the max tick\n        require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');\n        uint256 ratio = uint256(sqrtPriceX96) << 32;\n\n        uint256 r = ratio;\n        uint256 msb = 0;\n\n        assembly {\n            let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\n            msb := or(msb, f)\n            r := shr(f, r)\n        }\n        assembly {\n            let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))\n            msb := or(msb, f)\n            r := shr(f, r)\n        }\n        assembly {\n            let f := shl(5, gt(r, 0xFFFFFFFF))\n            msb := or(msb, f)\n            r := shr(f, r)\n        }\n        assembly {\n            let f := shl(4, gt(r, 0xFFFF))\n            msb := or(msb, f)\n            r := shr(f, r)\n        }\n        assembly {\n            let f := shl(3, gt(r, 0xFF))\n            msb := or(msb, f)\n            r := shr(f, r)\n        }\n        assembly {\n            let f := shl(2, gt(r, 0xF))\n            msb := or(msb, f)\n            r := shr(f, r)\n        }\n        assembly {\n            let f := shl(1, gt(r, 0x3))\n            msb := or(msb, f)\n            r := shr(f, r)\n        }\n        assembly {\n            let f := gt(r, 0x1)\n            msb := or(msb, f)\n        }\n\n        if (msb >= 128) r = ratio >> (msb - 127);\n        else r = ratio << (127 - msb);\n\n        int256 log_2 = (int256(msb) - 128) << 64;\n\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(63, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(62, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(61, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(60, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(59, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(58, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(57, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(56, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(55, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(54, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(53, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(52, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(51, f))\n            r := shr(f, r)\n        }\n        assembly {\n            r := shr(127, mul(r, r))\n            let f := shr(128, r)\n            log_2 := or(log_2, shl(50, f))\n        }\n\n        int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number\n\n        int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);\n        int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);\n\n        tick = tickLow == tickHi\n            ? tickLow\n            : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96\n                ? tickHi\n                : tickLow;\n    }\n}\n"
      },
      "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\nimport {IAstraCLPoolActions} from './pool/IAstraCLPoolActions.sol';\nimport {IAstraCLPoolDerivedState} from './pool/IAstraCLPoolDerivedState.sol';\nimport {IAstraCLPoolEvents} from './pool/IAstraCLPoolEvents.sol';\nimport {IAstraCLPoolImmutables} from './pool/IAstraCLPoolImmutables.sol';\nimport {IAstraCLPoolOwnerActions} from './pool/IAstraCLPoolOwnerActions.sol';\nimport {IAstraCLPoolState} from './pool/IAstraCLPoolState.sol';\n\n/// @title The interface for a Astra CL Pool\n/// @notice An Astra pool facilitates swapping and automated market making between any two assets that strictly conform\n/// to the ERC20 specification\n/// @dev The pool interface is broken up into many smaller pieces\ninterface IAstraCLPool is\n    IAstraCLPoolImmutables,\n    IAstraCLPoolState,\n    IAstraCLPoolDerivedState,\n    IAstraCLPoolActions,\n    IAstraCLPoolOwnerActions,\n    IAstraCLPoolEvents\n{}\n"
      },
      "@airdao/astra-cl-periphery/contracts/libraries/Path.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.6.0;\n\nimport './BytesLib.sol';\n\n/// @title Functions for manipulating path data for multihop swaps\nlibrary Path {\n    using BytesLib for bytes;\n\n    /// @dev The length of the bytes encoded address\n    uint256 private constant ADDR_SIZE = 20;\n    /// @dev The length of the bytes encoded fee\n    uint256 private constant FEE_SIZE = 3;\n\n    /// @dev The offset of a single token address and pool fee\n    uint256 private constant NEXT_OFFSET = ADDR_SIZE + FEE_SIZE;\n    /// @dev The offset of an encoded pool key\n    uint256 private constant POP_OFFSET = NEXT_OFFSET + ADDR_SIZE;\n    /// @dev The minimum length of an encoding that contains 2 or more pools\n    uint256 private constant MULTIPLE_POOLS_MIN_LENGTH = POP_OFFSET + NEXT_OFFSET;\n\n    /// @notice Returns true iff the path contains two or more pools\n    /// @param path The encoded swap path\n    /// @return True if path contains two or more pools, otherwise false\n    function hasMultiplePools(bytes memory path) internal pure returns (bool) {\n        return path.length >= MULTIPLE_POOLS_MIN_LENGTH;\n    }\n\n    /// @notice Returns the number of pools in the path\n    /// @param path The encoded swap path\n    /// @return The number of pools in the path\n    function numPools(bytes memory path) internal pure returns (uint256) {\n        // Ignore the first token address. From then on every fee and token offset indicates a pool.\n        return ((path.length - ADDR_SIZE) / NEXT_OFFSET);\n    }\n\n    /// @notice Decodes the first pool in path\n    /// @param path The bytes encoded swap path\n    /// @return tokenA The first token of the given pool\n    /// @return tokenB The second token of the given pool\n    /// @return fee The fee level of the pool\n    function decodeFirstPool(bytes memory path) internal pure returns (address tokenA, address tokenB, uint24 fee) {\n        tokenA = path.toAddress(0);\n        fee = path.toUint24(ADDR_SIZE);\n        tokenB = path.toAddress(NEXT_OFFSET);\n    }\n\n    /// @notice Gets the segment corresponding to the first pool in the path\n    /// @param path The bytes encoded swap path\n    /// @return The segment containing all data necessary to target the first pool in the path\n    function getFirstPool(bytes memory path) internal pure returns (bytes memory) {\n        return path.slice(0, POP_OFFSET);\n    }\n\n    /// @notice Skips a token + fee element from the buffer and returns the remainder\n    /// @param path The swap path\n    /// @return The remaining token + fee elements in the path\n    function skipToken(bytes memory path) internal pure returns (bytes memory) {\n        return path.slice(NEXT_OFFSET, path.length - NEXT_OFFSET);\n    }\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Provides functions for deriving a pool address from the factory, tokens, and the fee\nlibrary PoolAddress {\n    bytes32 internal constant POOL_INIT_CODE_HASH = 0x203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c04;\n\n    /// @notice The identifying key of the pool\n    struct PoolKey {\n        address token0;\n        address token1;\n        uint24 fee;\n    }\n\n    /// @notice Returns PoolKey: the ordered tokens with the matched fee levels\n    /// @param tokenA The first token of a pool, unsorted\n    /// @param tokenB The second token of a pool, unsorted\n    /// @param fee The fee level of the pool\n    /// @return Poolkey The pool details with ordered token0 and token1 assignments\n    function getPoolKey(address tokenA, address tokenB, uint24 fee) internal pure returns (PoolKey memory) {\n        if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA);\n        return PoolKey({token0: tokenA, token1: tokenB, fee: fee});\n    }\n\n    /// @notice Deterministically computes the pool address given the factory and PoolKey\n    /// @param factory The AstraDEX CL factory contract address\n    /// @param key The PoolKey\n    /// @return pool The contract address of the CL pool\n    function computeAddress(address factory, PoolKey memory key) internal pure returns (address pool) {\n        require(key.token0 < key.token1);\n        pool = address(\n            uint256(\n                keccak256(\n                    abi.encodePacked(\n                        hex'ff',\n                        factory,\n                        keccak256(abi.encode(key.token0, key.token1, key.fee)),\n                        POOL_INIT_CODE_HASH\n                    )\n                )\n            )\n        );\n    }\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\n\n// TODO: change to import from @airdao/astra-cl-core\nimport '@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol';\nimport './PoolAddress.sol';\n\n/// @notice Provides validation for callbacks from AstraDEX CL Pools\nlibrary CallbackValidation {\n    /// @notice Returns the address of a valid AstraDEX CL Pool\n    /// @param factory The contract address of the AstraDEX CL factory\n    /// @param tokenA The contract address of either token0 or token1\n    /// @param tokenB The contract address of the other token\n    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip\n    /// @return pool The CL pool contract address\n    function verifyCallback(\n        address factory,\n        address tokenA,\n        address tokenB,\n        uint24 fee\n    ) internal view returns (IAstraCLPool pool) {\n        return verifyCallback(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee));\n    }\n\n    /// @notice Returns the address of a valid AstraDEX CL Pool\n    /// @param factory The contract address of the AstraDEX CL factory\n    /// @param poolKey The identifying key of the CL pool\n    /// @return pool The CL pool contract address\n    function verifyCallback(\n        address factory,\n        PoolAddress.PoolKey memory poolKey\n    ) internal view returns (IAstraCLPool pool) {\n        pool = IAstraCLPool(PoolAddress.computeAddress(factory, poolKey));\n        require(msg.sender == address(pool));\n    }\n}\n"
      },
      "contracts/base/OracleSlippage.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '../interfaces/IOracleSlippage.sol';\n\nimport '@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol';\nimport '@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/Path.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol';\nimport '@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol';\n\nabstract contract OracleSlippage is IOracleSlippage, PeripheryImmutableState, BlockTimestamp {\n    using Path for bytes;\n\n    /// @dev Returns the tick as of the beginning of the current block, and as of right now, for the given pool.\n    function getBlockStartingAndCurrentTick(IAstraCLPool pool)\n        internal\n        view\n        returns (int24 blockStartingTick, int24 currentTick)\n    {\n        uint16 observationIndex;\n        uint16 observationCardinality;\n        (, currentTick, observationIndex, observationCardinality, , , ) = pool.slot0();\n\n        // 2 observations are needed to reliably calculate the block starting tick\n        require(observationCardinality > 1, 'NEO');\n\n        // If the latest observation occurred in the past, then no tick-changing trades have happened in this block\n        // therefore the tick in `slot0` is the same as at the beginning of the current block.\n        // We don't need to check if this observation is initialized - it is guaranteed to be.\n        (uint32 observationTimestamp, int56 tickCumulative, , ) = pool.observations(observationIndex);\n        if (observationTimestamp != uint32(_blockTimestamp())) {\n            blockStartingTick = currentTick;\n        } else {\n            uint256 prevIndex = (uint256(observationIndex) + observationCardinality - 1) % observationCardinality;\n            (uint32 prevObservationTimestamp, int56 prevTickCumulative, , bool prevInitialized) =\n                pool.observations(prevIndex);\n\n            require(prevInitialized, 'ONI');\n\n            uint32 delta = observationTimestamp - prevObservationTimestamp;\n            blockStartingTick = int24((tickCumulative - prevTickCumulative) / delta);\n        }\n    }\n\n    /// @dev Virtual function to get pool addresses that can be overridden in tests.\n    function getPoolAddress(\n        address tokenA,\n        address tokenB,\n        uint24 fee\n    ) internal view virtual returns (IAstraCLPool pool) {\n        pool = IAstraCLPool(PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)));\n    }\n\n    /// @dev Returns the synthetic time-weighted average tick as of secondsAgo, as well as the current tick,\n    /// for the given path. Returned synthetic ticks always represent tokenOut/tokenIn prices,\n    /// meaning lower ticks are worse.\n    function getSyntheticTicks(bytes memory path, uint32 secondsAgo)\n        internal\n        view\n        returns (int256 syntheticAverageTick, int256 syntheticCurrentTick)\n    {\n        bool lowerTicksAreWorse;\n\n        uint256 numPools = path.numPools();\n        address previousTokenIn;\n        for (uint256 i = 0; i < numPools; i++) {\n            // this assumes the path is sorted in swap order\n            (address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool();\n            IAstraCLPool pool = getPoolAddress(tokenIn, tokenOut, fee);\n\n            // get the average and current ticks for the current pool\n            int256 averageTick;\n            int256 currentTick;\n            if (secondsAgo == 0) {\n                // we optimize for the secondsAgo == 0 case, i.e. since the beginning of the block\n                (averageTick, currentTick) = getBlockStartingAndCurrentTick(pool);\n            } else {\n                (averageTick, ) = OracleLibrary.consult(address(pool), secondsAgo);\n                (, currentTick, , , , , ) = IAstraCLPool(pool).slot0();\n            }\n\n            if (i == numPools - 1) {\n                // if we're here, this is the last pool in the path, meaning tokenOut represents the\n                // destination token. so, if tokenIn < tokenOut, then tokenIn is token0 of the last pool,\n                // meaning the current running ticks are going to represent tokenOut/tokenIn prices.\n                // so, the lower these prices get, the worse of a price the swap will get\n                lowerTicksAreWorse = tokenIn < tokenOut;\n            } else {\n                // if we're here, we need to iterate over the next pool in the path\n                path = path.skipToken();\n                previousTokenIn = tokenIn;\n            }\n\n            // accumulate the ticks derived from the current pool into the running synthetic ticks,\n            // ensuring that intermediate tokens \"cancel out\"\n            bool add = (i == 0) || (previousTokenIn < tokenIn ? tokenIn < tokenOut : tokenOut < tokenIn);\n            if (add) {\n                syntheticAverageTick += averageTick;\n                syntheticCurrentTick += currentTick;\n            } else {\n                syntheticAverageTick -= averageTick;\n                syntheticCurrentTick -= currentTick;\n            }\n        }\n\n        // flip the sign of the ticks if necessary, to ensure that the lower ticks are always worse\n        if (!lowerTicksAreWorse) {\n            syntheticAverageTick *= -1;\n            syntheticCurrentTick *= -1;\n        }\n    }\n\n    /// @dev Cast a int256 to a int24, revert on overflow or underflow\n    function toInt24(int256 y) private pure returns (int24 z) {\n        require((z = int24(y)) == y);\n    }\n\n    /// @dev For each passed path, fetches the synthetic time-weighted average tick as of secondsAgo,\n    /// as well as the current tick. Then, synthetic ticks from all paths are subjected to a weighted\n    /// average, where the weights are the fraction of the total input amount allocated to each path.\n    /// Returned synthetic ticks always represent tokenOut/tokenIn prices, meaning lower ticks are worse.\n    /// Paths must all start and end in the same token.\n    function getSyntheticTicks(\n        bytes[] memory paths,\n        uint128[] memory amounts,\n        uint32 secondsAgo\n    ) internal view returns (int256 averageSyntheticAverageTick, int256 averageSyntheticCurrentTick) {\n        require(paths.length == amounts.length);\n\n        OracleLibrary.WeightedTickData[] memory weightedSyntheticAverageTicks =\n            new OracleLibrary.WeightedTickData[](paths.length);\n        OracleLibrary.WeightedTickData[] memory weightedSyntheticCurrentTicks =\n            new OracleLibrary.WeightedTickData[](paths.length);\n\n        for (uint256 i = 0; i < paths.length; i++) {\n            (int256 syntheticAverageTick, int256 syntheticCurrentTick) = getSyntheticTicks(paths[i], secondsAgo);\n            weightedSyntheticAverageTicks[i].tick = toInt24(syntheticAverageTick);\n            weightedSyntheticCurrentTicks[i].tick = toInt24(syntheticCurrentTick);\n            weightedSyntheticAverageTicks[i].weight = amounts[i];\n            weightedSyntheticCurrentTicks[i].weight = amounts[i];\n        }\n\n        averageSyntheticAverageTick = OracleLibrary.getWeightedArithmeticMeanTick(weightedSyntheticAverageTicks);\n        averageSyntheticCurrentTick = OracleLibrary.getWeightedArithmeticMeanTick(weightedSyntheticCurrentTicks);\n    }\n\n    /// @inheritdoc IOracleSlippage\n    function checkOracleSlippage(\n        bytes memory path,\n        uint24 maximumTickDivergence,\n        uint32 secondsAgo\n    ) external view override {\n        (int256 syntheticAverageTick, int256 syntheticCurrentTick) = getSyntheticTicks(path, secondsAgo);\n        require(syntheticAverageTick - syntheticCurrentTick < maximumTickDivergence, 'TD');\n    }\n\n    /// @inheritdoc IOracleSlippage\n    function checkOracleSlippage(\n        bytes[] memory paths,\n        uint128[] memory amounts,\n        uint24 maximumTickDivergence,\n        uint32 secondsAgo\n    ) external view override {\n        (int256 averageSyntheticAverageTick, int256 averageSyntheticCurrentTick) =\n            getSyntheticTicks(paths, amounts, secondsAgo);\n        require(averageSyntheticAverageTick - averageSyntheticCurrentTick < maximumTickDivergence, 'TD');\n    }\n}\n"
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Permissionless pool actions\n/// @notice Contains pool methods that can be called by anyone\ninterface IAstraCLPoolActions {\n    /// @notice Sets the initial price for the pool\n    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\n    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\n    function initialize(uint160 sqrtPriceX96) external;\n\n    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\n    /// @dev The caller of this method receives a callback in the form of IAstraCLMintCallback.sol#astraCLMintCallback\n    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\n    /// on tickLower, tickUpper, the amount of liquidity, and the current price.\n    /// @param recipient The address for which the liquidity will be created\n    /// @param tickLower The lower tick of the position in which to add liquidity\n    /// @param tickUpper The upper tick of the position in which to add liquidity\n    /// @param amount The amount of liquidity to mint\n    /// @param data Any data that should be passed through to the callback\n    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\n    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\n    function mint(\n        address recipient,\n        int24 tickLower,\n        int24 tickUpper,\n        uint128 amount,\n        bytes calldata data\n    ) external returns (uint256 amount0, uint256 amount1);\n\n    /// @notice Collects tokens owed to a position\n    /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\n    /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\n    /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\n    /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\n    /// @param recipient The address which should receive the fees collected\n    /// @param tickLower The lower tick of the position for which to collect fees\n    /// @param tickUpper The upper tick of the position for which to collect fees\n    /// @param amount0Requested How much token0 should be withdrawn from the fees owed\n    /// @param amount1Requested How much token1 should be withdrawn from the fees owed\n    /// @return amount0 The amount of fees collected in token0\n    /// @return amount1 The amount of fees collected in token1\n    function collect(\n        address recipient,\n        int24 tickLower,\n        int24 tickUpper,\n        uint128 amount0Requested,\n        uint128 amount1Requested\n    ) external returns (uint128 amount0, uint128 amount1);\n\n    /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\n    /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\n    /// @dev Fees must be collected separately via a call to #collect\n    /// @param tickLower The lower tick of the position for which to burn liquidity\n    /// @param tickUpper The upper tick of the position for which to burn liquidity\n    /// @param amount How much liquidity to burn\n    /// @return amount0 The amount of token0 sent to the recipient\n    /// @return amount1 The amount of token1 sent to the recipient\n    function burn(int24 tickLower, int24 tickUpper, uint128 amount) external returns (uint256 amount0, uint256 amount1);\n\n    /// @notice Swap token0 for token1, or token1 for token0\n    /// @dev The caller of this method receives a callback in the form of IAstraCLSwapCallback.sol#astraCLSwapCallback\n    /// @param recipient The address to receive the output of the swap\n    /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\n    /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\n    /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\n    /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\n    /// @param data Any data to be passed through to the callback\n    /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\n    /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\n    function swap(\n        address recipient,\n        bool zeroForOne,\n        int256 amountSpecified,\n        uint160 sqrtPriceLimitX96,\n        bytes calldata data\n    ) external returns (int256 amount0, int256 amount1);\n\n    /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\n    /// @dev The caller of this method receives a callback in the form of IAstraCLFlashCallback.sol#astraCLFlashCallback\n    /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\n    /// with 0 amount{0,1} and sending the donation amount(s) from the callback\n    /// @param recipient The address which will receive the token0 and token1 amounts\n    /// @param amount0 The amount of token0 to send\n    /// @param amount1 The amount of token1 to send\n    /// @param data Any data to be passed through to the callback\n    function flash(address recipient, uint256 amount0, uint256 amount1, bytes calldata data) external;\n\n    /// @notice Increase the maximum number of price and liquidity observations that this pool will store\n    /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\n    /// the input observationCardinalityNext.\n    /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\n    function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\n}\n"
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Pool state that is not stored\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\n/// blockchain. The functions here may have variable gas costs.\ninterface IAstraCLPoolDerivedState {\n    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\n    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\n    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\n    /// you must call it with secondsAgos = [3600, 0].\n    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\n    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\n    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\n    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\n    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\n    /// timestamp\n    function observe(\n        uint32[] calldata secondsAgos\n    ) external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\n\n    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\n    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\n    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\n    /// snapshot is taken and the second snapshot is taken.\n    /// @param tickLower The lower tick of the range\n    /// @param tickUpper The upper tick of the range\n    /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\n    /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\n    /// @return secondsInside The snapshot of seconds per liquidity for the range\n    function snapshotCumulativesInside(\n        int24 tickLower,\n        int24 tickUpper\n    ) external view returns (int56 tickCumulativeInside, uint160 secondsPerLiquidityInsideX128, uint32 secondsInside);\n}\n"
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Events emitted by a pool\n/// @notice Contains all events emitted by the pool\ninterface IAstraCLPoolEvents {\n    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\n    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\n    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\n    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\n    event Initialize(uint160 sqrtPriceX96, int24 tick);\n\n    /// @notice Emitted when liquidity is minted for a given position\n    /// @param sender The address that minted the liquidity\n    /// @param owner The owner of the position and recipient of any minted liquidity\n    /// @param tickLower The lower tick of the position\n    /// @param tickUpper The upper tick of the position\n    /// @param amount The amount of liquidity minted to the position range\n    /// @param amount0 How much token0 was required for the minted liquidity\n    /// @param amount1 How much token1 was required for the minted liquidity\n    event Mint(\n        address sender,\n        address indexed owner,\n        int24 indexed tickLower,\n        int24 indexed tickUpper,\n        uint128 amount,\n        uint256 amount0,\n        uint256 amount1\n    );\n\n    /// @notice Emitted when fees are collected by the owner of a position\n    /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\n    /// @param owner The owner of the position for which fees are collected\n    /// @param tickLower The lower tick of the position\n    /// @param tickUpper The upper tick of the position\n    /// @param amount0 The amount of token0 fees collected\n    /// @param amount1 The amount of token1 fees collected\n    event Collect(\n        address indexed owner,\n        address recipient,\n        int24 indexed tickLower,\n        int24 indexed tickUpper,\n        uint128 amount0,\n        uint128 amount1\n    );\n\n    /// @notice Emitted when a position's liquidity is removed\n    /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\n    /// @param owner The owner of the position for which liquidity is removed\n    /// @param tickLower The lower tick of the position\n    /// @param tickUpper The upper tick of the position\n    /// @param amount The amount of liquidity to remove\n    /// @param amount0 The amount of token0 withdrawn\n    /// @param amount1 The amount of token1 withdrawn\n    event Burn(\n        address indexed owner,\n        int24 indexed tickLower,\n        int24 indexed tickUpper,\n        uint128 amount,\n        uint256 amount0,\n        uint256 amount1\n    );\n\n    /// @notice Emitted by the pool for any swaps between token0 and token1\n    /// @param sender The address that initiated the swap call, and that received the callback\n    /// @param recipient The address that received the output of the swap\n    /// @param amount0 The delta of the token0 balance of the pool\n    /// @param amount1 The delta of the token1 balance of the pool\n    /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\n    /// @param liquidity The liquidity of the pool after the swap\n    /// @param tick The log base 1.0001 of price of the pool after the swap\n    event Swap(\n        address indexed sender,\n        address indexed recipient,\n        int256 amount0,\n        int256 amount1,\n        uint160 sqrtPriceX96,\n        uint128 liquidity,\n        int24 tick\n    );\n\n    /// @notice Emitted by the pool for any flashes of token0/token1\n    /// @param sender The address that initiated the swap call, and that received the callback\n    /// @param recipient The address that received the tokens from flash\n    /// @param amount0 The amount of token0 that was flashed\n    /// @param amount1 The amount of token1 that was flashed\n    /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\n    /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\n    event Flash(\n        address indexed sender,\n        address indexed recipient,\n        uint256 amount0,\n        uint256 amount1,\n        uint256 paid0,\n        uint256 paid1\n    );\n\n    /// @notice Emitted by the pool for increases to the number of observations that can be stored\n    /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\n    /// just before a mint/swap/burn.\n    /// @param observationCardinalityNextOld The previous value of the next observation cardinality\n    /// @param observationCardinalityNextNew The updated value of the next observation cardinality\n    event IncreaseObservationCardinalityNext(\n        uint16 observationCardinalityNextOld,\n        uint16 observationCardinalityNextNew\n    );\n\n    /// @notice Emitted when the protocol fee is changed by the pool\n    /// @param feeProtocol0Old The previous value of the token0 protocol fee\n    /// @param feeProtocol1Old The previous value of the token1 protocol fee\n    /// @param feeProtocol0New The updated value of the token0 protocol fee\n    /// @param feeProtocol1New The updated value of the token1 protocol fee\n    event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\n\n    /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\n    /// @param sender The address that collects the protocol fees\n    /// @param recipient The address that receives the collected protocol fees\n    /// @param amount0 The amount of token0 protocol fees that is withdrawn\n    /// @param amount0 The amount of token1 protocol fees that is withdrawn\n    event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\n}\n"
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Pool state that never changes\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\ninterface IAstraCLPoolImmutables {\n    /// @notice The contract that deployed the pool, which must adhere to the IAstraCLFactory interface\n    /// @return The contract address\n    function factory() external view returns (address);\n\n    /// @notice The first of the two tokens of the pool, sorted by address\n    /// @return The token contract address\n    function token0() external view returns (address);\n\n    /// @notice The second of the two tokens of the pool, sorted by address\n    /// @return The token contract address\n    function token1() external view returns (address);\n\n    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\n    /// @return The fee\n    function fee() external view returns (uint24);\n\n    /// @notice The pool tick spacing\n    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\n    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\n    /// This value is an int24 to avoid casting even though it is always positive.\n    /// @return The tick spacing\n    function tickSpacing() external view returns (int24);\n\n    /// @notice The maximum amount of position liquidity that can use any tick in the range\n    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\n    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\n    /// @return The max amount of liquidity per tick\n    function maxLiquidityPerTick() external view returns (uint128);\n}\n"
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Permissioned pool actions\n/// @notice Contains pool methods that may only be called by the factory owner\ninterface IAstraCLPoolOwnerActions {\n    /// @notice Set the denominator of the protocol's % share of the fees\n    /// @param feeProtocol0 new protocol fee for token0 of the pool\n    /// @param feeProtocol1 new protocol fee for token1 of the pool\n    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\n\n    /// @notice Collect the protocol fee accrued to the pool\n    /// @param recipient The address to which collected protocol fees should be sent\n    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\n    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\n    /// @return amount0 The protocol fee collected in token0\n    /// @return amount1 The protocol fee collected in token1\n    function collectProtocol(\n        address recipient,\n        uint128 amount0Requested,\n        uint128 amount1Requested\n    ) external returns (uint128 amount0, uint128 amount1);\n}\n"
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Pool state that can change\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\n/// per transaction\ninterface IAstraCLPoolState {\n    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\n    /// when accessed externally.\n    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\n    /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\n    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\n    /// boundary.\n    /// observationIndex The index of the last oracle observation that was written,\n    /// observationCardinality The current maximum number of observations stored in the pool,\n    /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\n    /// feeProtocol The protocol fee for both tokens of the pool.\n    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\n    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\n    /// unlocked Whether the pool is currently locked to reentrancy\n    function slot0()\n        external\n        view\n        returns (\n            uint160 sqrtPriceX96,\n            int24 tick,\n            uint16 observationIndex,\n            uint16 observationCardinality,\n            uint16 observationCardinalityNext,\n            uint8 feeProtocol,\n            bool unlocked\n        );\n\n    /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\n    /// @dev This value can overflow the uint256\n    function feeGrowthGlobal0X128() external view returns (uint256);\n\n    /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\n    /// @dev This value can overflow the uint256\n    function feeGrowthGlobal1X128() external view returns (uint256);\n\n    /// @notice The amounts of token0 and token1 that are owed to the protocol\n    /// @dev Protocol fees will never exceed uint128 max in either token\n    function protocolFees() external view returns (uint128 token0, uint128 token1);\n\n    /// @notice The currently in range liquidity available to the pool\n    /// @dev This value has no relationship to the total liquidity across all ticks\n    function liquidity() external view returns (uint128);\n\n    /// @notice Look up information about a specific tick in the pool\n    /// @param tick The tick to look up\n    /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\n    /// tick upper,\n    /// liquidityNet how much liquidity changes when the pool price crosses the tick,\n    /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\n    /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\n    /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\n    /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\n    /// secondsOutside the seconds spent on the other side of the tick from the current tick,\n    /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\n    /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\n    /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\n    /// a specific position.\n    function ticks(\n        int24 tick\n    )\n        external\n        view\n        returns (\n            uint128 liquidityGross,\n            int128 liquidityNet,\n            uint256 feeGrowthOutside0X128,\n            uint256 feeGrowthOutside1X128,\n            int56 tickCumulativeOutside,\n            uint160 secondsPerLiquidityOutsideX128,\n            uint32 secondsOutside,\n            bool initialized\n        );\n\n    /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\n    function tickBitmap(int16 wordPosition) external view returns (uint256);\n\n    /// @notice Returns the information about a position by the position's key\n    /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\n    /// @return _liquidity The amount of liquidity in the position,\n    /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\n    /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\n    /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\n    /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\n    function positions(\n        bytes32 key\n    )\n        external\n        view\n        returns (\n            uint128 _liquidity,\n            uint256 feeGrowthInside0LastX128,\n            uint256 feeGrowthInside1LastX128,\n            uint128 tokensOwed0,\n            uint128 tokensOwed1\n        );\n\n    /// @notice Returns data about a specific observation index\n    /// @param index The element of the observations array to fetch\n    /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\n    /// ago, rather than at a specific index in the array.\n    /// @return blockTimestamp The timestamp of the observation,\n    /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\n    /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\n    /// Returns initialized whether the observation has been initialized and the values are safe to use\n    function observations(\n        uint256 index\n    )\n        external\n        view\n        returns (\n            uint32 blockTimestamp,\n            int56 tickCumulative,\n            uint160 secondsPerLiquidityCumulativeX128,\n            bool initialized\n        );\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n/*\n * @title Solidity Bytes Arrays Utils\n * @author Gonçalo Sá <goncalo.sa@consensys.net>\n *\n * @dev Bytes tightly packed arrays utility library for ethereum contracts written in Solidity.\n *      The library lets you concatenate, slice and type cast bytes arrays both in memory and storage.\n */\npragma solidity >=0.5.0 <0.8.0;\n\nlibrary BytesLib {\n    function slice(bytes memory _bytes, uint256 _start, uint256 _length) internal pure returns (bytes memory) {\n        require(_length + 31 >= _length, 'slice_overflow');\n        require(_start + _length >= _start, 'slice_overflow');\n        require(_bytes.length >= _start + _length, 'slice_outOfBounds');\n\n        bytes memory tempBytes;\n\n        assembly {\n            switch iszero(_length)\n            case 0 {\n                // Get a location of some free memory and store it in tempBytes as\n                // Solidity does for memory variables.\n                tempBytes := mload(0x40)\n\n                // The first word of the slice result is potentially a partial\n                // word read from the original array. To read it, we calculate\n                // the length of that partial word and start copying that many\n                // bytes into the array. The first word we copy will start with\n                // data we don't care about, but the last `lengthmod` bytes will\n                // land at the beginning of the contents of the new array. When\n                // we're done copying, we overwrite the full first word with\n                // the actual length of the slice.\n                let lengthmod := and(_length, 31)\n\n                // The multiplication in the next line is necessary\n                // because when slicing multiples of 32 bytes (lengthmod == 0)\n                // the following copy loop was copying the origin's length\n                // and then ending prematurely not copying everything it should.\n                let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\n                let end := add(mc, _length)\n\n                for {\n                    // The multiplication in the next line has the same exact purpose\n                    // as the one above.\n                    let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\n                } lt(mc, end) {\n                    mc := add(mc, 0x20)\n                    cc := add(cc, 0x20)\n                } {\n                    mstore(mc, mload(cc))\n                }\n\n                mstore(tempBytes, _length)\n\n                //update free-memory pointer\n                //allocating the array padded to 32 bytes like the compiler does now\n                mstore(0x40, and(add(mc, 31), not(31)))\n            }\n            //if we want a zero-length slice let's just return a zero-length array\n            default {\n                tempBytes := mload(0x40)\n                //zero out the 32 bytes slice we are about to return\n                //we need to do it because Solidity does not garbage collect\n                mstore(tempBytes, 0)\n\n                mstore(0x40, add(tempBytes, 0x20))\n            }\n        }\n\n        return tempBytes;\n    }\n\n    function toAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) {\n        require(_start + 20 >= _start, 'toAddress_overflow');\n        require(_bytes.length >= _start + 20, 'toAddress_outOfBounds');\n        address tempAddress;\n\n        assembly {\n            tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000)\n        }\n\n        return tempAddress;\n    }\n\n    function toUint24(bytes memory _bytes, uint256 _start) internal pure returns (uint24) {\n        require(_start + 3 >= _start, 'toUint24_overflow');\n        require(_bytes.length >= _start + 3, 'toUint24_outOfBounds');\n        uint24 tempUint;\n\n        assembly {\n            tempUint := mload(add(add(_bytes, 0x3), _start))\n        }\n\n        return tempUint;\n    }\n}\n"
      },
      "contracts/interfaces/IOracleSlippage.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\n/// @title OracleSlippage interface\n/// @notice Enables slippage checks against oracle prices\ninterface IOracleSlippage {\n    /// @notice Ensures that the current (synthetic) tick over the path is no worse than\n    /// `maximumTickDivergence` ticks away from the average as of `secondsAgo`\n    /// @param path The path to fetch prices over\n    /// @param maximumTickDivergence The maximum number of ticks that the price can degrade by\n    /// @param secondsAgo The number of seconds ago to compute oracle prices against\n    function checkOracleSlippage(\n        bytes memory path,\n        uint24 maximumTickDivergence,\n        uint32 secondsAgo\n    ) external view;\n\n    /// @notice Ensures that the weighted average current (synthetic) tick over the path is no\n    /// worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\n    /// @param paths The paths to fetch prices over\n    /// @param amounts The weights for each entry in `paths`\n    /// @param maximumTickDivergence The maximum number of ticks that the price can degrade by\n    /// @param secondsAgo The number of seconds ago to compute oracle prices against\n    function checkOracleSlippage(\n        bytes[] memory paths,\n        uint128[] memory amounts,\n        uint24 maximumTickDivergence,\n        uint32 secondsAgo\n    ) external view;\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\n\n/// @title Function for getting block timestamp\n/// @dev Base contract that is overridden for tests\nabstract contract BlockTimestamp {\n    /// @dev Method that exists purely to be overridden for tests\n    /// @return The current block timestamp\n    function _blockTimestamp() internal view virtual returns (uint256) {\n        return block.timestamp;\n    }\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0 <0.8.0;\n\n// TODO: change to import from @airdao/astra-cl-core\nimport '@airdao/astra-cl-core/contracts/libraries/FullMath.sol';\n// TODO: change to import from @airdao/astra-cl-core\nimport '@airdao/astra-cl-core/contracts/libraries/TickMath.sol';\n// TODO: change to import from @airdao/astra-cl-core\nimport '@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol';\n\n/// @title Oracle library\n/// @notice Provides functions to integrate with CL pool oracle\nlibrary OracleLibrary {\n    /// @notice Calculates time-weighted means of tick and liquidity for a given AstraDEX CL pool\n    /// @param pool Address of the pool that we want to observe\n    /// @param secondsAgo Number of seconds in the past from which to calculate the time-weighted means\n    /// @return arithmeticMeanTick The arithmetic mean tick from (block.timestamp - secondsAgo) to block.timestamp\n    /// @return harmonicMeanLiquidity The harmonic mean liquidity from (block.timestamp - secondsAgo) to block.timestamp\n    function consult(\n        address pool,\n        uint32 secondsAgo\n    ) internal view returns (int24 arithmeticMeanTick, uint128 harmonicMeanLiquidity) {\n        require(secondsAgo != 0, 'BP');\n\n        uint32[] memory secondsAgos = new uint32[](2);\n        secondsAgos[0] = secondsAgo;\n        secondsAgos[1] = 0;\n\n        (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s) = IAstraCLPool(pool)\n            .observe(secondsAgos);\n\n        int56 tickCumulativesDelta = tickCumulatives[1] - tickCumulatives[0];\n        uint160 secondsPerLiquidityCumulativesDelta = secondsPerLiquidityCumulativeX128s[1] -\n            secondsPerLiquidityCumulativeX128s[0];\n\n        arithmeticMeanTick = int24(tickCumulativesDelta / secondsAgo);\n        // Always round to negative infinity\n        if (tickCumulativesDelta < 0 && (tickCumulativesDelta % secondsAgo != 0)) arithmeticMeanTick--;\n\n        // We are multiplying here instead of shifting to ensure that harmonicMeanLiquidity doesn't overflow uint128\n        uint192 secondsAgoX160 = uint192(secondsAgo) * type(uint160).max;\n        harmonicMeanLiquidity = uint128(secondsAgoX160 / (uint192(secondsPerLiquidityCumulativesDelta) << 32));\n    }\n\n    /// @notice Given a tick and a token amount, calculates the amount of token received in exchange\n    /// @param tick Tick value used to calculate the quote\n    /// @param baseAmount Amount of token to be converted\n    /// @param baseToken Address of an ERC20 token contract used as the baseAmount denomination\n    /// @param quoteToken Address of an ERC20 token contract used as the quoteAmount denomination\n    /// @return quoteAmount Amount of quoteToken received for baseAmount of baseToken\n    function getQuoteAtTick(\n        int24 tick,\n        uint128 baseAmount,\n        address baseToken,\n        address quoteToken\n    ) internal pure returns (uint256 quoteAmount) {\n        uint160 sqrtRatioX96 = TickMath.getSqrtRatioAtTick(tick);\n\n        // Calculate quoteAmount with better precision if it doesn't overflow when multiplied by itself\n        if (sqrtRatioX96 <= type(uint128).max) {\n            uint256 ratioX192 = uint256(sqrtRatioX96) * sqrtRatioX96;\n            quoteAmount = baseToken < quoteToken\n                ? FullMath.mulDiv(ratioX192, baseAmount, 1 << 192)\n                : FullMath.mulDiv(1 << 192, baseAmount, ratioX192);\n        } else {\n            uint256 ratioX128 = FullMath.mulDiv(sqrtRatioX96, sqrtRatioX96, 1 << 64);\n            quoteAmount = baseToken < quoteToken\n                ? FullMath.mulDiv(ratioX128, baseAmount, 1 << 128)\n                : FullMath.mulDiv(1 << 128, baseAmount, ratioX128);\n        }\n    }\n\n    /// @notice Given a pool, it returns the number of seconds ago of the oldest stored observation\n    /// @param pool Address of AstraDEX CL pool that we want to observe\n    /// @return secondsAgo The number of seconds ago of the oldest observation stored for the pool\n    function getOldestObservationSecondsAgo(address pool) internal view returns (uint32 secondsAgo) {\n        (, , uint16 observationIndex, uint16 observationCardinality, , , ) = IAstraCLPool(pool).slot0();\n        require(observationCardinality > 0, 'NI');\n\n        (uint32 observationTimestamp, , , bool initialized) = IAstraCLPool(pool).observations(\n            (observationIndex + 1) % observationCardinality\n        );\n\n        // The next index might not be initialized if the cardinality is in the process of increasing\n        // In this case the oldest observation is always in index 0\n        if (!initialized) {\n            (observationTimestamp, , , ) = IAstraCLPool(pool).observations(0);\n        }\n\n        secondsAgo = uint32(block.timestamp) - observationTimestamp;\n    }\n\n    /// @notice Given a pool, it returns the tick value as of the start of the current block\n    /// @param pool Address of AstraDEX CL pool\n    /// @return The tick that the pool was in at the start of the current block\n    function getBlockStartingTickAndLiquidity(address pool) internal view returns (int24, uint128) {\n        (, int24 tick, uint16 observationIndex, uint16 observationCardinality, , , ) = IAstraCLPool(pool).slot0();\n\n        // 2 observations are needed to reliably calculate the block starting tick\n        require(observationCardinality > 1, 'NEO');\n\n        // If the latest observation occurred in the past, then no tick-changing trades have happened in this block\n        // therefore the tick in `slot0` is the same as at the beginning of the current block.\n        // We don't need to check if this observation is initialized - it is guaranteed to be.\n        (uint32 observationTimestamp, int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128, ) = IAstraCLPool(\n            pool\n        ).observations(observationIndex);\n        if (observationTimestamp != uint32(block.timestamp)) {\n            return (tick, IAstraCLPool(pool).liquidity());\n        }\n\n        uint256 prevIndex = (uint256(observationIndex) + observationCardinality - 1) % observationCardinality;\n        (\n            uint32 prevObservationTimestamp,\n            int56 prevTickCumulative,\n            uint160 prevSecondsPerLiquidityCumulativeX128,\n            bool prevInitialized\n        ) = IAstraCLPool(pool).observations(prevIndex);\n\n        require(prevInitialized, 'ONI');\n\n        uint32 delta = observationTimestamp - prevObservationTimestamp;\n        tick = int24((tickCumulative - prevTickCumulative) / delta);\n        uint128 liquidity = uint128(\n            (uint192(delta) * type(uint160).max) /\n                (uint192(secondsPerLiquidityCumulativeX128 - prevSecondsPerLiquidityCumulativeX128) << 32)\n        );\n        return (tick, liquidity);\n    }\n\n    /// @notice Information for calculating a weighted arithmetic mean tick\n    struct WeightedTickData {\n        int24 tick;\n        uint128 weight;\n    }\n\n    /// @notice Given an array of ticks and weights, calculates the weighted arithmetic mean tick\n    /// @param weightedTickData An array of ticks and weights\n    /// @return weightedArithmeticMeanTick The weighted arithmetic mean tick\n    /// @dev Each entry of `weightedTickData` should represents ticks from pools with the same underlying pool tokens. If they do not,\n    /// extreme care must be taken to ensure that ticks are comparable (including decimal differences).\n    /// @dev Note that the weighted arithmetic mean tick corresponds to the weighted geometric mean price.\n    function getWeightedArithmeticMeanTick(\n        WeightedTickData[] memory weightedTickData\n    ) internal pure returns (int24 weightedArithmeticMeanTick) {\n        // Accumulates the sum of products between each tick and its weight\n        int256 numerator;\n\n        // Accumulates the sum of the weights\n        uint256 denominator;\n\n        // Products fit in 152 bits, so it would take an array of length ~2**104 to overflow this logic\n        for (uint256 i; i < weightedTickData.length; i++) {\n            numerator += weightedTickData[i].tick * int256(weightedTickData[i].weight);\n            denominator += weightedTickData[i].weight;\n        }\n\n        weightedArithmeticMeanTick = int24(numerator / int256(denominator));\n        // Always round to negative infinity\n        if (numerator < 0 && (numerator % int256(denominator) != 0)) weightedArithmeticMeanTick--;\n    }\n\n    /// @notice Returns the \"synthetic\" tick which represents the price of the first entry in `tokens` in terms of the last\n    /// @dev Useful for calculating relative prices along routes.\n    /// @dev There must be one tick for each pairwise set of tokens.\n    /// @param tokens The token contract addresses\n    /// @param ticks The ticks, representing the price of each token pair in `tokens`\n    /// @return syntheticTick The synthetic tick, representing the relative price of the outermost tokens in `tokens`\n    function getChainedPrice(\n        address[] memory tokens,\n        int24[] memory ticks\n    ) internal pure returns (int256 syntheticTick) {\n        require(tokens.length - 1 == ticks.length, 'DL');\n        for (uint256 i = 1; i <= ticks.length; i++) {\n            // check the tokens for address sort order, then accumulate the\n            // ticks into the running synthetic tick, ensuring that intermediate tokens \"cancel out\"\n            tokens[i - 1] < tokens[i] ? syntheticTick += ticks[i - 1] : syntheticTick -= ticks[i - 1];\n        }\n    }\n}\n"
      },
      "@airdao/astra-cl-core/contracts/libraries/FullMath.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.0 <0.8.0;\n\n/// @title Contains 512-bit math functions\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\n/// @dev Handles \"phantom overflow\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\nlibrary FullMath {\n    /// @notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n    /// @param a The multiplicand\n    /// @param b The multiplier\n    /// @param denominator The divisor\n    /// @return result The 256-bit result\n    /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\n    function mulDiv(uint256 a, uint256 b, uint256 denominator) internal pure returns (uint256 result) {\n        // 512-bit multiply [prod1 prod0] = a * b\n        // Compute the product mod 2**256 and mod 2**256 - 1\n        // then use the Chinese Remainder Theorem to reconstruct\n        // the 512 bit result. The result is stored in two 256\n        // variables such that product = prod1 * 2**256 + prod0\n        uint256 prod0; // Least significant 256 bits of the product\n        uint256 prod1; // Most significant 256 bits of the product\n        assembly {\n            let mm := mulmod(a, b, not(0))\n            prod0 := mul(a, b)\n            prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n        }\n\n        // Handle non-overflow cases, 256 by 256 division\n        if (prod1 == 0) {\n            require(denominator > 0);\n            assembly {\n                result := div(prod0, denominator)\n            }\n            return result;\n        }\n\n        // Make sure the result is less than 2**256.\n        // Also prevents denominator == 0\n        require(denominator > prod1);\n\n        ///////////////////////////////////////////////\n        // 512 by 256 division.\n        ///////////////////////////////////////////////\n\n        // Make division exact by subtracting the remainder from [prod1 prod0]\n        // Compute remainder using mulmod\n        uint256 remainder;\n        assembly {\n            remainder := mulmod(a, b, denominator)\n        }\n        // Subtract 256 bit number from 512 bit number\n        assembly {\n            prod1 := sub(prod1, gt(remainder, prod0))\n            prod0 := sub(prod0, remainder)\n        }\n\n        // Factor powers of two out of denominator\n        // Compute largest power of two divisor of denominator.\n        // Always >= 1.\n        uint256 twos = -denominator & denominator;\n        // Divide denominator by power of two\n        assembly {\n            denominator := div(denominator, twos)\n        }\n\n        // Divide [prod1 prod0] by the factors of two\n        assembly {\n            prod0 := div(prod0, twos)\n        }\n        // Shift in bits from prod1 into prod0. For this we need\n        // to flip `twos` such that it is 2**256 / twos.\n        // If twos is zero, then it becomes one\n        assembly {\n            twos := add(div(sub(0, twos), twos), 1)\n        }\n        prod0 |= prod1 * twos;\n\n        // Invert denominator mod 2**256\n        // Now that denominator is an odd number, it has an inverse\n        // modulo 2**256 such that denominator * inv = 1 mod 2**256.\n        // Compute the inverse by starting with a seed that is correct\n        // correct for four bits. That is, denominator * inv = 1 mod 2**4\n        uint256 inv = (3 * denominator) ^ 2;\n        // Now use Newton-Raphson iteration to improve the precision.\n        // Thanks to Hensel's lifting lemma, this also works in modular\n        // arithmetic, doubling the correct bits in each step.\n        inv *= 2 - denominator * inv; // inverse mod 2**8\n        inv *= 2 - denominator * inv; // inverse mod 2**16\n        inv *= 2 - denominator * inv; // inverse mod 2**32\n        inv *= 2 - denominator * inv; // inverse mod 2**64\n        inv *= 2 - denominator * inv; // inverse mod 2**128\n        inv *= 2 - denominator * inv; // inverse mod 2**256\n\n        // Because the division is now exact we can divide by multiplying\n        // with the modular inverse of denominator. This will give us the\n        // correct result modulo 2**256. Since the precoditions guarantee\n        // that the outcome is less than 2**256, this is the final result.\n        // We don't need to compute the high bits of the result and prod1\n        // is no longer required.\n        result = prod0 * inv;\n        return result;\n    }\n\n    /// @notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n    /// @param a The multiplicand\n    /// @param b The multiplier\n    /// @param denominator The divisor\n    /// @return result The 256-bit result\n    function mulDivRoundingUp(uint256 a, uint256 b, uint256 denominator) internal pure returns (uint256 result) {\n        result = mulDiv(a, b, denominator);\n        if (mulmod(a, b, denominator) > 0) {\n            require(result < type(uint256).max);\n            result++;\n        }\n    }\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/base/Multicall.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '../interfaces/IMulticall.sol';\n\n/// @title Multicall\n/// @notice Enables calling multiple methods in a single call to the contract\nabstract contract Multicall is IMulticall {\n    /// @inheritdoc IMulticall\n    function multicall(bytes[] calldata data) public payable override returns (bytes[] memory results) {\n        results = new bytes[](data.length);\n        for (uint256 i = 0; i < data.length; i++) {\n            (bool success, bytes memory result) = address(this).delegatecall(data[i]);\n\n            if (!success) {\n                // Next 5 lines from https://ethereum.stackexchange.com/a/83577\n                if (result.length < 68) revert();\n                assembly {\n                    result := add(result, 0x04)\n                }\n                revert(abi.decode(result, (string)));\n            }\n\n            results[i] = result;\n        }\n    }\n}\n"
      },
      "contracts/base/PeripheryValidationExtended.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\n\nimport '@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol';\n\nabstract contract PeripheryValidationExtended is PeripheryValidation {\n    modifier checkPreviousBlockhash(bytes32 previousBlockhash) {\n        require(blockhash(block.number - 1) == previousBlockhash, 'Blockhash');\n        _;\n    }\n}\n"
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\n\nimport './BlockTimestamp.sol';\n\nabstract contract PeripheryValidation is BlockTimestamp {\n    modifier checkDeadline(uint256 deadline) {\n        require(_blockTimestamp() <= deadline, 'Transaction too old');\n        _;\n    }\n}\n"
      },
      "contracts/test/MockTimeSwapRouter.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '../SwapRouter02.sol';\n\ncontract MockTimeSwapRouter02 is SwapRouter02 {\n    uint256 time;\n\n    constructor(\n        address _factoryClassic,\n        address factoryCL,\n        address _positionManager,\n        address _SAMB\n    ) SwapRouter02(_factoryClassic, factoryCL, _positionManager, _SAMB) {}\n\n    function _blockTimestamp() internal view override returns (uint256) {\n        return time;\n    }\n\n    function setTime(uint256 _time) external {\n        time = _time;\n    }\n}\n"
      },
      "contracts/test/TestMulticallExtended.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '../base/MulticallExtended.sol';\n\ncontract TestMulticallExtended is MulticallExtended {\n    uint256 time;\n\n    function _blockTimestamp() internal view override returns (uint256) {\n        return time;\n    }\n\n    function setTime(uint256 _time) external {\n        time = _time;\n    }\n\n    struct Tuple {\n        uint256 a;\n        uint256 b;\n    }\n\n    function functionThatReturnsTuple(uint256 a, uint256 b) external pure returns (Tuple memory tuple) {\n        tuple = Tuple({b: a, a: b});\n    }\n}\n"
      },
      "contracts/test/OracleSlippageTest.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '../base/OracleSlippage.sol';\n\ncontract OracleSlippageTest is OracleSlippage {\n    mapping(address => mapping(address => mapping(uint24 => IAstraCLPool))) private pools;\n    uint256 internal time;\n\n    constructor(address _factory, address _WETH9) PeripheryImmutableState(_factory, _WETH9) {}\n\n    function setTime(uint256 _time) external {\n        time = _time;\n    }\n\n    function _blockTimestamp() internal view override returns (uint256) {\n        return time;\n    }\n\n    function registerPool(\n        IAstraCLPool pool,\n        address tokenIn,\n        address tokenOut,\n        uint24 fee\n    ) external {\n        pools[tokenIn][tokenOut][fee] = pool;\n        pools[tokenOut][tokenIn][fee] = pool;\n    }\n\n    function getPoolAddress(\n        address tokenA,\n        address tokenB,\n        uint24 fee\n    ) internal view override returns (IAstraCLPool pool) {\n        pool = pools[tokenA][tokenB][fee];\n    }\n\n    function testGetBlockStartingAndCurrentTick(IAstraCLPool pool)\n        external\n        view\n        returns (int24 blockStartingTick, int24 currentTick)\n    {\n        return getBlockStartingAndCurrentTick(pool);\n    }\n\n    function testGetSyntheticTicks(bytes memory path, uint32 secondsAgo)\n        external\n        view\n        returns (int256 syntheticAverageTick, int256 syntheticCurrentTick)\n    {\n        return getSyntheticTicks(path, secondsAgo);\n    }\n\n    function testGetSyntheticTicks(\n        bytes[] memory paths,\n        uint128[] memory amounts,\n        uint32 secondsAgo\n    ) external view returns (int256 averageSyntheticAverageTick, int256 averageSyntheticCurrentTick) {\n        return getSyntheticTicks(paths, amounts, secondsAgo);\n    }\n}\n"
      },
      "contracts/lens/TokenValidator.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\nimport '@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol';\nimport '@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol';\nimport '@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol';\nimport '../libraries/AstraClassicLibrary.sol';\nimport '../interfaces/ISwapRouter02.sol';\nimport '../interfaces/ITokenValidator.sol';\nimport '../base/ImmutableState.sol';\n\n/// @notice Validates tokens by flash borrowing from the token/<base token> pool on V2.\n/// @notice Returns\n///     Status.FOT if we detected a fee is taken on transfer.\n///     Status.STF if transfer failed for the token.\n///     Status.UNKN if we did not detect any issues with the token.\n/// @notice A return value of Status.UNKN does not mean the token is definitely not a fee on transfer token\n///     or definitely has no problems with its transfer. It just means we cant say for sure that it has any\n///     issues.\n/// @dev We can not guarantee the result of this lens is correct for a few reasons:\n/// @dev 1/ Some tokens take fees or allow transfers under specific conditions, for example some have an allowlist\n/// @dev    of addresses that do/dont require fees. Therefore the result is not guaranteed to be correct\n/// @dev    in all circumstances.\n/// @dev 2/ It is possible that the token does not have any pools on V2 therefore we are not able to perform\n/// @dev    a flashloan to test the token.\ncontract TokenValidator is ITokenValidator, IAstraCallee, ImmutableState {\n    string internal constant FOT_REVERT_STRING = 'FOT';\n    string internal constant STF_REVERT_STRING_SUFFIX = 'TRANSFER_FAILED';\n\n    constructor(address _factoryClassic, address _positionManager) ImmutableState(_factoryClassic, _positionManager) {}\n\n    function batchValidate(\n        address[] calldata tokens,\n        address[] calldata baseTokens,\n        uint256 amountToBorrow\n    ) public override returns (Status[] memory isFotResults) {\n        isFotResults = new Status[](tokens.length);\n        for (uint256 i = 0; i < tokens.length; i++) {\n            isFotResults[i] = validate(tokens[i], baseTokens, amountToBorrow);\n        }\n    }\n\n    function validate(\n        address token,\n        address[] calldata baseTokens,\n        uint256 amountToBorrow\n    ) public override returns (Status) {\n        for (uint256 i = 0; i < baseTokens.length; i++) {\n            Status result = _validate(token, baseTokens[i], amountToBorrow);\n            if (result == Status.FOT || result == Status.STF) {\n                return result;\n            }\n        }\n        return Status.UNKN;\n    }\n\n    function _validate(\n        address token,\n        address baseToken,\n        uint256 amountToBorrow\n    ) internal returns (Status) {\n        if (token == baseToken) {\n            return Status.UNKN;\n        }\n\n        address pairAddress = AstraClassicLibrary.pairFor(this.factoryClassic(), token, baseToken);\n\n        // If the token/baseToken pair exists, get token0.\n        // Must do low level call as try/catch does not support case where contract does not exist.\n        (, bytes memory returnData) = address(pairAddress).call(abi.encodeWithSelector(IAstraPair.token0.selector));\n\n        if (returnData.length == 0) {\n            return Status.UNKN;\n        }\n\n        address token0Address = abi.decode(returnData, (address));\n\n        // Flash loan {amountToBorrow}\n        (uint256 amount0Out, uint256 amount1Out) =\n            token == token0Address ? (amountToBorrow, uint256(0)) : (uint256(0), amountToBorrow);\n\n        uint256 balanceBeforeLoan = IERC20(token).balanceOf(address(this));\n\n        IAstraPair pair = IAstraPair(pairAddress);\n\n        try\n            pair.swap(amount0Out, amount1Out, address(this), abi.encode(balanceBeforeLoan, amountToBorrow))\n        {} catch Error(string memory reason) {\n            if (isFotFailed(reason)) {\n                return Status.FOT;\n            }\n\n            if (isTransferFailed(reason)) {\n                return Status.STF;\n            }\n\n            return Status.UNKN;\n        }\n\n        // Swap always reverts so should never reach.\n        revert('Unexpected error');\n    }\n\n    function isFotFailed(string memory reason) internal pure returns (bool) {\n        return keccak256(bytes(reason)) == keccak256(bytes(FOT_REVERT_STRING));\n    }\n\n    function isTransferFailed(string memory reason) internal pure returns (bool) {\n        // We check the suffix of the revert string so we can support forks that\n        // may have modified the prefix.\n        string memory stf = STF_REVERT_STRING_SUFFIX;\n\n        uint256 reasonLength = bytes(reason).length;\n        uint256 suffixLength = bytes(stf).length;\n        if (reasonLength < suffixLength) {\n            return false;\n        }\n\n        uint256 ptr;\n        uint256 offset = 32 + reasonLength - suffixLength;\n        bool transferFailed;\n        assembly {\n            ptr := add(reason, offset)\n            let suffixPtr := add(stf, 32)\n            transferFailed := eq(keccak256(ptr, suffixLength), keccak256(suffixPtr, suffixLength))\n        }\n\n        return transferFailed;\n    }\n\n    function astraCall(\n        address,\n        uint256 amount0,\n        uint256,\n        bytes calldata data\n    ) external view override {\n        IAstraPair pair = IAstraPair(msg.sender);\n        (address token0, address token1) = (pair.token0(), pair.token1());\n\n        IERC20 tokenBorrowed = IERC20(amount0 > 0 ? token0 : token1);\n\n        (uint256 balanceBeforeLoan, uint256 amountRequestedToBorrow) = abi.decode(data, (uint256, uint256));\n        uint256 amountBorrowed = tokenBorrowed.balanceOf(address(this)) - balanceBeforeLoan;\n\n        // If we received less token than we requested when we called swap, then a fee must have been taken\n        // by the token during transfer.\n        if (amountBorrowed != amountRequestedToBorrow) {\n            revert(FOT_REVERT_STRING);\n        }\n\n        // Note: If we do not revert here, we would end up reverting in the pair's swap method anyway\n        // since for a flash borrow we need to transfer back the amount we borrowed + 0.3% fee, and we don't\n        // have funds to cover the fee. Revert early here to save gas/time.\n        revert('Unknown');\n    }\n}\n"
      },
      "@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol": {
        "content": "pragma solidity >=0.5.0;\n\ninterface IAstraCallee {\n    function astraCall(address sender, uint amount0, uint amount1, bytes calldata data) external;\n}\n"
      },
      "contracts/interfaces/ITokenValidator.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\n/// @notice Validates tokens by flash borrowing from the token/<base token> pool on V2.\n/// @notice Returns\n///     Status.FOT if we detected a fee is taken on transfer.\n///     Status.STF if transfer failed for the token.\n///     Status.UNKN if we did not detect any issues with the token.\n/// @notice A return value of Status.UNKN does not mean the token is definitely not a fee on transfer token\n///     or definitely has no problems with its transfer. It just means we cant say for sure that it has any\n///     issues.\n/// @dev We can not guarantee the result of this lens is correct for a few reasons:\n/// @dev 1/ Some tokens take fees or allow transfers under specific conditions, for example some have an allowlist\n/// @dev    of addresses that do/dont require fees. Therefore the result is not guaranteed to be correct\n/// @dev    in all circumstances.\n/// @dev 2/ It is possible that the token does not have any pools on V2 therefore we are not able to perform\n/// @dev    a flashloan to test the token.\n/// @dev These functions are not marked view because they rely on calling non-view functions and reverting\n/// to compute the result.\ninterface ITokenValidator {\n    // Status.FOT: detected a fee is taken on transfer.\n    // Status.STF: transfer failed for the token.\n    // Status.UNKN: no issues found with the token.\n    enum Status {UNKN, FOT, STF}\n\n    /// @notice Validates a token by detecting if its transferable or takes a fee on transfer\n    /// @param token The address of the token to check for fee on transfer\n    /// @param baseTokens The addresses of the tokens to try pairing with\n    /// token when looking for a pool to flash loan from.\n    /// @param amountToBorrow The amount to try flash borrowing from the pools\n    /// @return The status of the token\n    function validate(\n        address token,\n        address[] calldata baseTokens,\n        uint256 amountToBorrow\n    ) external returns (Status);\n\n    /// @notice Validates each token by detecting if its transferable or takes a fee on transfer\n    /// @param tokens The addresses of the tokens to check for fee on transfer\n    /// @param baseTokens The addresses of the tokens to try pairing with\n    /// token when looking for a pool to flash loan from.\n    /// @param amountToBorrow The amount to try flash borrowing from the pools\n    /// @return The status of the token\n    function batchValidate(\n        address[] calldata tokens,\n        address[] calldata baseTokens,\n        uint256 amountToBorrow\n    ) external returns (Status[] memory);\n}\n"
      },
      "contracts/test/ImmutableStateTest.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\n\nimport '../base/ImmutableState.sol';\n\ncontract ImmutableStateTest is ImmutableState {\n    constructor(address _factoryClassic, address _positionManager) ImmutableState(_factoryClassic, _positionManager) {}\n}\n"
      },
      "contracts/lens/MixedRouteQuoterV1.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol';\nimport '@airdao/astra-cl-core/contracts/libraries/SafeCast.sol';\nimport '@airdao/astra-cl-core/contracts/libraries/TickMath.sol';\nimport '@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol';\nimport '@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol';\nimport '@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/Path.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol';\nimport '@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol';\n\nimport '../base/ImmutableState.sol';\nimport '../interfaces/IMixedRouteQuoterV1.sol';\nimport '../libraries/PoolTicksCounter.sol';\nimport '../libraries/AstraClassicLibrary.sol';\n\n/// @title Provides on chain quotes for CL, Classic, and MixedRoute exact input swaps\n/// @notice Allows getting the expected amount out for a given swap without executing the swap\n/// @notice Does not support exact output swaps since using the contract balance between exactOut swaps is not supported\n/// @dev These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute\n/// the swap and check the amounts in the callback.\ncontract MixedRouteQuoterV1 is IMixedRouteQuoterV1, IAstraCLSwapCallback, PeripheryImmutableState {\n    using Path for bytes;\n    using SafeCast for uint256;\n    using PoolTicksCounter for IAstraCLPool;\n    address public immutable factoryClassic;\n    /// @dev Value to bit mask with path fee to determine if Classic or CL route\n    // max CL fee:           000011110100001001000000 (24 bits)\n    // mask:       1 << 23 = 100000000000000000000000 = decimal value 8388608\n    uint24 private constant flagBitmask = 8388608;\n\n    /// @dev Transient storage variable used to check a safety condition in exact output swaps.\n    uint256 private amountOutCached;\n\n    constructor(\n        address _factory,\n        address _factoryClassic,\n        address _SAMB\n    ) PeripheryImmutableState(_factory, _SAMB) {\n        factoryClassic = _factoryClassic;\n    }\n\n    function getPool(\n        address tokenA,\n        address tokenB,\n        uint24 fee\n    ) private view returns (IAstraCLPool) {\n        return IAstraCLPool(PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)));\n    }\n\n    /// @dev Given an amountIn, fetch the reserves of the Classic pair and get the amountOut\n    function getPairAmountOut(\n        uint256 amountIn,\n        address tokenIn,\n        address tokenOut\n    ) private view returns (uint256) {\n        (uint256 reserveIn, uint256 reserveOut) = AstraClassicLibrary.getReserves(factoryClassic, tokenIn, tokenOut);\n        return AstraClassicLibrary.getAmountOut(amountIn, reserveIn, reserveOut);\n    }\n\n    /// @inheritdoc IAstraCLSwapCallback\n    function astraCLSwapCallback(\n        int256 amount0Delta,\n        int256 amount1Delta,\n        bytes memory path\n    ) external view override {\n        require(amount0Delta > 0 || amount1Delta > 0); // swaps entirely within 0-liquidity regions are not supported\n        (address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool();\n        CallbackValidation.verifyCallback(factory, tokenIn, tokenOut, fee);\n\n        (bool isExactInput, uint256 amountReceived) =\n            amount0Delta > 0\n                ? (tokenIn < tokenOut, uint256(-amount1Delta))\n                : (tokenOut < tokenIn, uint256(-amount0Delta));\n\n        IAstraCLPool pool = getPool(tokenIn, tokenOut, fee);\n        (uint160 CLSqrtPriceX96After, int24 tickAfter, , , , , ) = pool.slot0();\n\n        if (isExactInput) {\n            assembly {\n                let ptr := mload(0x40)\n                mstore(ptr, amountReceived)\n                mstore(add(ptr, 0x20), CLSqrtPriceX96After)\n                mstore(add(ptr, 0x40), tickAfter)\n                revert(ptr, 0x60)\n            }\n        } else {\n            /// since we don't support exactOutput, revert here\n            revert('Exact output quote not supported');\n        }\n    }\n\n    /// @dev Parses a revert reason that should contain the numeric quote\n    function parseRevertReason(bytes memory reason)\n        private\n        pure\n        returns (\n            uint256 amount,\n            uint160 sqrtPriceX96After,\n            int24 tickAfter\n        )\n    {\n        if (reason.length != 0x60) {\n            if (reason.length < 0x44) revert('Unexpected error');\n            assembly {\n                reason := add(reason, 0x04)\n            }\n            revert(abi.decode(reason, (string)));\n        }\n        return abi.decode(reason, (uint256, uint160, int24));\n    }\n\n    function handleCLRevert(\n        bytes memory reason,\n        IAstraCLPool pool,\n        uint256 gasEstimate\n    )\n        private\n        view\n        returns (\n            uint256 amount,\n            uint160 sqrtPriceX96After,\n            uint32 initializedTicksCrossed,\n            uint256\n        )\n    {\n        int24 tickBefore;\n        int24 tickAfter;\n        (, tickBefore, , , , , ) = pool.slot0();\n        (amount, sqrtPriceX96After, tickAfter) = parseRevertReason(reason);\n\n        initializedTicksCrossed = pool.countInitializedTicksCrossed(tickBefore, tickAfter);\n\n        return (amount, sqrtPriceX96After, initializedTicksCrossed, gasEstimate);\n    }\n\n    /// @dev Fetch an exactIn quote for a CL Pool on chain\n    function quoteExactInputSingleCL(QuoteExactInputSingleCLParams memory params)\n        public\n        override\n        returns (\n            uint256 amountOut,\n            uint160 sqrtPriceX96After,\n            uint32 initializedTicksCrossed,\n            uint256 gasEstimate\n        )\n    {\n        bool zeroForOne = params.tokenIn < params.tokenOut;\n        IAstraCLPool pool = getPool(params.tokenIn, params.tokenOut, params.fee);\n\n        uint256 gasBefore = gasleft();\n        try\n            pool.swap(\n                address(this), // address(0) might cause issues with some tokens\n                zeroForOne,\n                params.amountIn.toInt256(),\n                params.sqrtPriceLimitX96 == 0\n                    ? (zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1)\n                    : params.sqrtPriceLimitX96,\n                abi.encodePacked(params.tokenIn, params.fee, params.tokenOut)\n            )\n        {} catch (bytes memory reason) {\n            gasEstimate = gasBefore - gasleft();\n            return handleCLRevert(reason, pool, gasEstimate);\n        }\n    }\n\n    /// @dev Fetch an exactIn quote for a Classic pair on chain\n    function quoteExactInputSingleClassic(QuoteExactInputSingleClassicParams memory params)\n        public\n        view\n        override\n        returns (uint256 amountOut)\n    {\n        amountOut = getPairAmountOut(params.amountIn, params.tokenIn, params.tokenOut);\n    }\n\n    /// @dev Get the quote for an exactIn swap between an array of Classic and/or CL pools\n    /// @notice To encode a Classic pair within the path, use 0x800000 (hex value of 8388608) for the fee between the two token addresses\n    function quoteExactInput(bytes memory path, uint256 amountIn)\n        public\n        override\n        returns (\n            uint256 amountOut,\n            uint160[] memory CLSqrtPriceX96AfterList,\n            uint32[] memory CLInitializedTicksCrossedList,\n            uint256 CLSwapGasEstimate\n        )\n    {\n        CLSqrtPriceX96AfterList = new uint160[](path.numPools());\n        CLInitializedTicksCrossedList = new uint32[](path.numPools());\n\n        uint256 i = 0;\n        while (true) {\n            (address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool();\n\n            if (fee & flagBitmask != 0) {\n                amountIn = quoteExactInputSingleClassic(\n                    QuoteExactInputSingleClassicParams({tokenIn: tokenIn, tokenOut: tokenOut, amountIn: amountIn})\n                );\n            } else {\n                /// the outputs of prior swaps become the inputs to subsequent ones\n                (\n                    uint256 _amountOut,\n                    uint160 _sqrtPriceX96After,\n                    uint32 _initializedTicksCrossed,\n                    uint256 _gasEstimate\n                ) =\n                    quoteExactInputSingleCL(\n                        QuoteExactInputSingleCLParams({\n                            tokenIn: tokenIn,\n                            tokenOut: tokenOut,\n                            fee: fee,\n                            amountIn: amountIn,\n                            sqrtPriceLimitX96: 0\n                        })\n                    );\n                CLSqrtPriceX96AfterList[i] = _sqrtPriceX96After;\n                CLInitializedTicksCrossedList[i] = _initializedTicksCrossed;\n                CLSwapGasEstimate += _gasEstimate;\n                amountIn = _amountOut;\n            }\n            i++;\n\n            /// decide whether to continue or terminate\n            if (path.hasMultiplePools()) {\n                path = path.skipToken();\n            } else {\n                return (amountIn, CLSqrtPriceX96AfterList, CLInitializedTicksCrossedList, CLSwapGasEstimate);\n            }\n        }\n    }\n}\n"
      },
      "@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol": {
        "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity >=0.5.0;\n\nimport './BitMath.sol';\n\n/// @title Packed tick initialized state library\n/// @notice Stores a packed mapping of tick index to its initialized state\n/// @dev The mapping uses int16 for keys since ticks are represented as int24 and there are 256 (2^8) values per word.\nlibrary TickBitmap {\n    /// @notice Computes the position in the mapping where the initialized bit for a tick lives\n    /// @param tick The tick for which to compute the position\n    /// @return wordPos The key in the mapping containing the word in which the bit is stored\n    /// @return bitPos The bit position in the word where the flag is stored\n    function position(int24 tick) private pure returns (int16 wordPos, uint8 bitPos) {\n        wordPos = int16(tick >> 8);\n        bitPos = uint8(tick % 256);\n    }\n\n    /// @notice Flips the initialized state for a given tick from false to true, or vice versa\n    /// @param self The mapping in which to flip the tick\n    /// @param tick The tick to flip\n    /// @param tickSpacing The spacing between usable ticks\n    function flipTick(mapping(int16 => uint256) storage self, int24 tick, int24 tickSpacing) internal {\n        require(tick % tickSpacing == 0); // ensure that the tick is spaced\n        (int16 wordPos, uint8 bitPos) = position(tick / tickSpacing);\n        uint256 mask = 1 << bitPos;\n        self[wordPos] ^= mask;\n    }\n\n    /// @notice Returns the next initialized tick contained in the same word (or adjacent word) as the tick that is either\n    /// to the left (less than or equal to) or right (greater than) of the given tick\n    /// @param self The mapping in which to compute the next initialized tick\n    /// @param tick The starting tick\n    /// @param tickSpacing The spacing between usable ticks\n    /// @param lte Whether to search for the next initialized tick to the left (less than or equal to the starting tick)\n    /// @return next The next initialized or uninitialized tick up to 256 ticks away from the current tick\n    /// @return initialized Whether the next tick is initialized, as the function only searches within up to 256 ticks\n    function nextInitializedTickWithinOneWord(\n        mapping(int16 => uint256) storage self,\n        int24 tick,\n        int24 tickSpacing,\n        bool lte\n    ) internal view returns (int24 next, bool initialized) {\n        int24 compressed = tick / tickSpacing;\n        if (tick < 0 && tick % tickSpacing != 0) compressed--; // round towards negative infinity\n\n        if (lte) {\n            (int16 wordPos, uint8 bitPos) = position(compressed);\n            // all the 1s at or to the right of the current bitPos\n            uint256 mask = (1 << bitPos) - 1 + (1 << bitPos);\n            uint256 masked = self[wordPos] & mask;\n\n            // if there are no initialized ticks to the right of or at the current tick, return rightmost in the word\n            initialized = masked != 0;\n            // overflow/underflow is possible, but prevented externally by limiting both tickSpacing and tick\n            next = initialized\n                ? (compressed - int24(bitPos - BitMath.mostSignificantBit(masked))) * tickSpacing\n                : (compressed - int24(bitPos)) * tickSpacing;\n        } else {\n            // start from the word of the next tick, since the current tick state doesn't matter\n            (int16 wordPos, uint8 bitPos) = position(compressed + 1);\n            // all the 1s at or to the left of the bitPos\n            uint256 mask = ~((1 << bitPos) - 1);\n            uint256 masked = self[wordPos] & mask;\n\n            // if there are no initialized ticks to the left of the current tick, return leftmost in the word\n            initialized = masked != 0;\n            // overflow/underflow is possible, but prevented externally by limiting both tickSpacing and tick\n            next = initialized\n                ? (compressed + 1 + int24(BitMath.leastSignificantBit(masked) - bitPos)) * tickSpacing\n                : (compressed + 1 + int24(type(uint8).max - bitPos)) * tickSpacing;\n        }\n    }\n}\n"
      },
      "contracts/interfaces/IMixedRouteQuoterV1.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\n/// @title MixedRouteQuoterV1 Interface\n/// @notice Supports quoting the calculated amounts for exact input swaps. Is specialized for routes containing a mix of Classic and CL liquidity.\n/// @notice For each pool also tells you the number of initialized ticks crossed and the sqrt price of the pool after the swap.\n/// @dev These functions are not marked view because they rely on calling non-view functions and reverting\n/// to compute the result. They are also not gas efficient and should not be called on-chain.\ninterface IMixedRouteQuoterV1 {\n    /// @notice Returns the amount out received for a given exact input swap without executing the swap\n    /// @param path The path of the swap, i.e. each token pair and the pool fee\n    /// @param amountIn The amount of the first token to swap\n    /// @return amountOut The amount of the last token that would be received\n    /// @return CLSqrtPriceX96AfterList List of the sqrt price after the swap for each v3 pool in the path, 0 for v2 pools\n    /// @return CLInitializedTicksCrossedList List of the initialized ticks that the swap crossed for each v3 pool in the path, 0 for v2 pools\n    /// @return CLSwapGasEstimate The estimate of the gas that the v3 swaps in the path consume\n    function quoteExactInput(bytes memory path, uint256 amountIn)\n        external\n        returns (\n            uint256 amountOut,\n            uint160[] memory CLSqrtPriceX96AfterList,\n            uint32[] memory CLInitializedTicksCrossedList,\n            uint256 CLSwapGasEstimate\n        );\n\n    struct QuoteExactInputSingleCLParams {\n        address tokenIn;\n        address tokenOut;\n        uint256 amountIn;\n        uint24 fee;\n        uint160 sqrtPriceLimitX96;\n    }\n\n    struct QuoteExactInputSingleClassicParams {\n        address tokenIn;\n        address tokenOut;\n        uint256 amountIn;\n    }\n\n    /// @notice Returns the amount out received for a given exact input but for a swap of a single pool\n    /// @param params The params for the quote, encoded as `QuoteExactInputSingleCLParams`\n    /// tokenIn The token being swapped in\n    /// tokenOut The token being swapped out\n    /// fee The fee of the token pool to consider for the pair\n    /// amountIn The desired input amount\n    /// sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n    /// @return amountOut The amount of `tokenOut` that would be received\n    /// @return sqrtPriceX96After The sqrt price of the pool after the swap\n    /// @return initializedTicksCrossed The number of initialized ticks that the swap crossed\n    /// @return gasEstimate The estimate of the gas that the swap consumes\n    function quoteExactInputSingleCL(QuoteExactInputSingleCLParams memory params)\n        external\n        returns (\n            uint256 amountOut,\n            uint160 sqrtPriceX96After,\n            uint32 initializedTicksCrossed,\n            uint256 gasEstimate\n        );\n\n    /// @notice Returns the amount out received for a given exact input but for a swap of a single V2 pool\n    /// @param params The params for the quote, encoded as `QuoteExactInputSingleClassicParams`\n    /// tokenIn The token being swapped in\n    /// tokenOut The token being swapped out\n    /// amountIn The desired input amount\n    /// @return amountOut The amount of `tokenOut` that would be received\n    function quoteExactInputSingleClassic(QuoteExactInputSingleClassicParams memory params)\n        external\n        returns (uint256 amountOut);\n\n    /// @dev ExactOutput swaps are not supported by this new Quoter which is specialized for supporting routes\n    ///      crossing both V2 liquidity pairs and V3 pools.\n    /// @deprecated quoteExactOutputSingle and exactOutput. Use QuoterV2 instead.\n}\n"
      },
      "contracts/libraries/PoolTicksCounter.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.6.0;\n\nimport '@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol';\n\nlibrary PoolTicksCounter {\n    /// @dev This function counts the number of initialized ticks that would incur a gas cost between tickBefore and tickAfter.\n    /// When tickBefore and/or tickAfter themselves are initialized, the logic over whether we should count them depends on the\n    /// direction of the swap. If we are swapping upwards (tickAfter > tickBefore) we don't want to count tickBefore but we do\n    /// want to count tickAfter. The opposite is true if we are swapping downwards.\n    function countInitializedTicksCrossed(\n        IAstraCLPool self,\n        int24 tickBefore,\n        int24 tickAfter\n    ) internal view returns (uint32 initializedTicksCrossed) {\n        int16 wordPosLower;\n        int16 wordPosHigher;\n        uint8 bitPosLower;\n        uint8 bitPosHigher;\n        bool tickBeforeInitialized;\n        bool tickAfterInitialized;\n\n        {\n            // Get the key and offset in the tick bitmap of the active tick before and after the swap.\n            int16 wordPos = int16((tickBefore / self.tickSpacing()) >> 8);\n            uint8 bitPos = uint8((tickBefore / self.tickSpacing()) % 256);\n\n            int16 wordPosAfter = int16((tickAfter / self.tickSpacing()) >> 8);\n            uint8 bitPosAfter = uint8((tickAfter / self.tickSpacing()) % 256);\n\n            // In the case where tickAfter is initialized, we only want to count it if we are swapping downwards.\n            // If the initializable tick after the swap is initialized, our original tickAfter is a\n            // multiple of tick spacing, and we are swapping downwards we know that tickAfter is initialized\n            // and we shouldn't count it.\n            tickAfterInitialized =\n                ((self.tickBitmap(wordPosAfter) & (1 << bitPosAfter)) > 0) &&\n                ((tickAfter % self.tickSpacing()) == 0) &&\n                (tickBefore > tickAfter);\n\n            // In the case where tickBefore is initialized, we only want to count it if we are swapping upwards.\n            // Use the same logic as above to decide whether we should count tickBefore or not.\n            tickBeforeInitialized =\n                ((self.tickBitmap(wordPos) & (1 << bitPos)) > 0) &&\n                ((tickBefore % self.tickSpacing()) == 0) &&\n                (tickBefore < tickAfter);\n\n            if (wordPos < wordPosAfter || (wordPos == wordPosAfter && bitPos <= bitPosAfter)) {\n                wordPosLower = wordPos;\n                bitPosLower = bitPos;\n                wordPosHigher = wordPosAfter;\n                bitPosHigher = bitPosAfter;\n            } else {\n                wordPosLower = wordPosAfter;\n                bitPosLower = bitPosAfter;\n                wordPosHigher = wordPos;\n                bitPosHigher = bitPos;\n            }\n        }\n\n        // Count the number of initialized ticks crossed by iterating through the tick bitmap.\n        // Our first mask should include the lower tick and everything to its left.\n        uint256 mask = type(uint256).max << bitPosLower;\n        while (wordPosLower <= wordPosHigher) {\n            // If we're on the final tick bitmap page, ensure we only count up to our\n            // ending tick.\n            if (wordPosLower == wordPosHigher) {\n                mask = mask & (type(uint256).max >> (255 - bitPosHigher));\n            }\n\n            uint256 masked = self.tickBitmap(wordPosLower) & mask;\n            initializedTicksCrossed += countOneBits(masked);\n            wordPosLower++;\n            // Reset our mask so we consider all bits on the next iteration.\n            mask = type(uint256).max;\n        }\n\n        if (tickAfterInitialized) {\n            initializedTicksCrossed -= 1;\n        }\n\n        if (tickBeforeInitialized) {\n            initializedTicksCrossed -= 1;\n        }\n\n        return initializedTicksCrossed;\n    }\n\n    function countOneBits(uint256 x) private pure returns (uint16) {\n        uint16 bits = 0;\n        while (x != 0) {\n            bits++;\n            x &= (x - 1);\n        }\n        return bits;\n    }\n}\n"
      },
      "@airdao/astra-cl-core/contracts/libraries/BitMath.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title BitMath\n/// @dev This library provides functionality for computing bit properties of an unsigned integer\nlibrary BitMath {\n    /// @notice Returns the index of the most significant bit of the number,\n    ///     where the least significant bit is at index 0 and the most significant bit is at index 255\n    /// @dev The function satisfies the property:\n    ///     x >= 2**mostSignificantBit(x) and x < 2**(mostSignificantBit(x)+1)\n    /// @param x the value for which to compute the most significant bit, must be greater than 0\n    /// @return r the index of the most significant bit\n    function mostSignificantBit(uint256 x) internal pure returns (uint8 r) {\n        require(x > 0);\n\n        if (x >= 0x100000000000000000000000000000000) {\n            x >>= 128;\n            r += 128;\n        }\n        if (x >= 0x10000000000000000) {\n            x >>= 64;\n            r += 64;\n        }\n        if (x >= 0x100000000) {\n            x >>= 32;\n            r += 32;\n        }\n        if (x >= 0x10000) {\n            x >>= 16;\n            r += 16;\n        }\n        if (x >= 0x100) {\n            x >>= 8;\n            r += 8;\n        }\n        if (x >= 0x10) {\n            x >>= 4;\n            r += 4;\n        }\n        if (x >= 0x4) {\n            x >>= 2;\n            r += 2;\n        }\n        if (x >= 0x2) r += 1;\n    }\n\n    /// @notice Returns the index of the least significant bit of the number,\n    ///     where the least significant bit is at index 0 and the most significant bit is at index 255\n    /// @dev The function satisfies the property:\n    ///     (x & 2**leastSignificantBit(x)) != 0 and (x & (2**(leastSignificantBit(x)) - 1)) == 0)\n    /// @param x the value for which to compute the least significant bit, must be greater than 0\n    /// @return r the index of the least significant bit\n    function leastSignificantBit(uint256 x) internal pure returns (uint8 r) {\n        require(x > 0);\n\n        r = 255;\n        if (x & type(uint128).max > 0) {\n            r -= 128;\n        } else {\n            x >>= 128;\n        }\n        if (x & type(uint64).max > 0) {\n            r -= 64;\n        } else {\n            x >>= 64;\n        }\n        if (x & type(uint32).max > 0) {\n            r -= 32;\n        } else {\n            x >>= 32;\n        }\n        if (x & type(uint16).max > 0) {\n            r -= 16;\n        } else {\n            x >>= 16;\n        }\n        if (x & type(uint8).max > 0) {\n            r -= 8;\n        } else {\n            x >>= 8;\n        }\n        if (x & 0xf > 0) {\n            r -= 4;\n        } else {\n            x >>= 4;\n        }\n        if (x & 0x3 > 0) {\n            r -= 2;\n        } else {\n            x >>= 2;\n        }\n        if (x & 0x1 > 0) r -= 1;\n    }\n}\n"
      },
      "contracts/test/PoolTicksCounterTest.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\nimport '@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol';\n\npragma solidity >=0.6.0;\n\nimport '../libraries/PoolTicksCounter.sol';\n\ncontract PoolTicksCounterTest {\n    using PoolTicksCounter for IAstraCLPool;\n\n    function countInitializedTicksCrossed(\n        IAstraCLPool pool,\n        int24 tickBefore,\n        int24 tickAfter\n    ) external view returns (uint32 initializedTicksCrossed) {\n        return pool.countInitializedTicksCrossed(tickBefore, tickAfter);\n    }\n}\n"
      },
      "contracts/test/TestAstraCLCallee.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity =0.7.6;\n\nimport '@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol';\nimport '@airdao/astra-cl-core/contracts/libraries/SafeCast.sol';\nimport '@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol';\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\n\ncontract TestAstraCLCallee is IAstraCLSwapCallback {\n    using SafeCast for uint256;\n\n    function swapExact0For1(\n        address pool,\n        uint256 amount0In,\n        address recipient,\n        uint160 sqrtPriceLimitX96\n    ) external {\n        IAstraCLPool(pool).swap(recipient, true, amount0In.toInt256(), sqrtPriceLimitX96, abi.encode(msg.sender));\n    }\n\n    function swap0ForExact1(\n        address pool,\n        uint256 amount1Out,\n        address recipient,\n        uint160 sqrtPriceLimitX96\n    ) external {\n        IAstraCLPool(pool).swap(recipient, true, -amount1Out.toInt256(), sqrtPriceLimitX96, abi.encode(msg.sender));\n    }\n\n    function swapExact1For0(\n        address pool,\n        uint256 amount1In,\n        address recipient,\n        uint160 sqrtPriceLimitX96\n    ) external {\n        IAstraCLPool(pool).swap(recipient, false, amount1In.toInt256(), sqrtPriceLimitX96, abi.encode(msg.sender));\n    }\n\n    function swap1ForExact0(\n        address pool,\n        uint256 amount0Out,\n        address recipient,\n        uint160 sqrtPriceLimitX96\n    ) external {\n        IAstraCLPool(pool).swap(recipient, false, -amount0Out.toInt256(), sqrtPriceLimitX96, abi.encode(msg.sender));\n    }\n\n    function astraCLSwapCallback(\n        int256 amount0Delta,\n        int256 amount1Delta,\n        bytes calldata data\n    ) external override {\n        address sender = abi.decode(data, (address));\n\n        if (amount0Delta > 0) {\n            IERC20(IAstraCLPool(msg.sender).token0()).transferFrom(sender, msg.sender, uint256(amount0Delta));\n        } else {\n            assert(amount1Delta > 0);\n            IERC20(IAstraCLPool(msg.sender).token1()).transferFrom(sender, msg.sender, uint256(amount1Delta));\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC20/ERC20.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"../../utils/Context.sol\";\nimport \"./IERC20.sol\";\nimport \"../../math/SafeMath.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20 {\n    using SafeMath for uint256;\n\n    mapping (address => uint256) private _balances;\n\n    mapping (address => mapping (address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n    uint8 private _decimals;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n     * a default value of 18.\n     *\n     * To select a different value for {decimals}, use {_setupDecimals}.\n     *\n     * All three of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor (string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n        _decimals = 18;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n     * called.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual returns (uint8) {\n        return _decimals;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `recipient` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n        _transfer(_msgSender(), recipient, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        _approve(_msgSender(), spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * Requirements:\n     *\n     * - `sender` and `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``sender``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n        _transfer(sender, recipient, amount);\n        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n        return true;\n    }\n\n    /**\n     * @dev Moves tokens `amount` from `sender` to `recipient`.\n     *\n     * This is internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `sender` cannot be the zero address.\n     * - `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     */\n    function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n        require(sender != address(0), \"ERC20: transfer from the zero address\");\n        require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(sender, recipient, amount);\n\n        _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n        _balances[recipient] = _balances[recipient].add(amount);\n        emit Transfer(sender, recipient, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply = _totalSupply.add(amount);\n        _balances[account] = _balances[account].add(amount);\n        emit Transfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n        _totalSupply = _totalSupply.sub(amount);\n        emit Transfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Sets {decimals} to a value other than the default one of 18.\n     *\n     * WARNING: This function should only be called from the constructor. Most\n     * applications that interact with token contracts will not expect\n     * {decimals} to ever change, and may work incorrectly if it does.\n     */\n    function _setupDecimals(uint8 decimals_) internal virtual {\n        _decimals = decimals_;\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be to transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n}\n"
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address payable) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes memory) {\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n        return msg.data;\n    }\n}\n"
      },
      "@openzeppelin/contracts/math/SafeMath.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n    /**\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\n     *\n     * _Available since v3.4._\n     */\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n        uint256 c = a + b;\n        if (c < a) return (false, 0);\n        return (true, c);\n    }\n\n    /**\n     * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n     *\n     * _Available since v3.4._\n     */\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n        if (b > a) return (false, 0);\n        return (true, a - b);\n    }\n\n    /**\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n     *\n     * _Available since v3.4._\n     */\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n        // benefit is lost if 'b' is also tested.\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n        if (a == 0) return (true, 0);\n        uint256 c = a * b;\n        if (c / a != b) return (false, 0);\n        return (true, c);\n    }\n\n    /**\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\n     *\n     * _Available since v3.4._\n     */\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n        if (b == 0) return (false, 0);\n        return (true, a / b);\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n     *\n     * _Available since v3.4._\n     */\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n        if (b == 0) return (false, 0);\n        return (true, a % b);\n    }\n\n    /**\n     * @dev Returns the addition of two unsigned integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `+` operator.\n     *\n     * Requirements:\n     *\n     * - Addition cannot overflow.\n     */\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\n        uint256 c = a + b;\n        require(c >= a, \"SafeMath: addition overflow\");\n        return c;\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, reverting on\n     * overflow (when the result is negative).\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     *\n     * - Subtraction cannot overflow.\n     */\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b <= a, \"SafeMath: subtraction overflow\");\n        return a - b;\n    }\n\n    /**\n     * @dev Returns the multiplication of two unsigned integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `*` operator.\n     *\n     * Requirements:\n     *\n     * - Multiplication cannot overflow.\n     */\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n        if (a == 0) return 0;\n        uint256 c = a * b;\n        require(c / a == b, \"SafeMath: multiplication overflow\");\n        return c;\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers, reverting on\n     * division by zero. The result is rounded towards zero.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b > 0, \"SafeMath: division by zero\");\n        return a / b;\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * reverting when dividing by zero.\n     *\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\n     * invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b > 0, \"SafeMath: modulo by zero\");\n        return a % b;\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n     * overflow (when the result is negative).\n     *\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\n     * message unnecessarily. For custom revert reasons use {trySub}.\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     *\n     * - Subtraction cannot overflow.\n     */\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b <= a, errorMessage);\n        return a - b;\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n     * division by zero. The result is rounded towards zero.\n     *\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\n     * message unnecessarily. For custom revert reasons use {tryDiv}.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b > 0, errorMessage);\n        return a / b;\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * reverting with custom message when dividing by zero.\n     *\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\n     * message unnecessarily. For custom revert reasons use {tryMod}.\n     *\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\n     * invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b > 0, errorMessage);\n        return a % b;\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Counters.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"../math/SafeMath.sol\";\n\n/**\n * @title Counters\n * @author Matt Condon (@shrugs)\n * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\n *\n * Include with `using Counters for Counters.Counter;`\n * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath}\n * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never\n * directly accessed.\n */\nlibrary Counters {\n    using SafeMath for uint256;\n\n    struct Counter {\n        // This variable should never be directly accessed by users of the library: interactions must be restricted to\n        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\n        // this feature: see https://github.com/ethereum/solidity/issues/4637\n        uint256 _value; // default: 0\n    }\n\n    function current(Counter storage counter) internal view returns (uint256) {\n        return counter._value;\n    }\n\n    function increment(Counter storage counter) internal {\n        // The {SafeMath} overflow check can be skipped here, see the comment at the top\n        counter._value += 1;\n    }\n\n    function decrement(Counter storage counter) internal {\n        counter._value = counter._value.sub(1);\n    }\n}\n"
      },
      "@openzeppelin/contracts/drafts/ERC20Permit.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.5 <0.8.0;\n\nimport \"../token/ERC20/ERC20.sol\";\nimport \"./IERC20Permit.sol\";\nimport \"../cryptography/ECDSA.sol\";\nimport \"../utils/Counters.sol\";\nimport \"./EIP712.sol\";\n\n/**\n * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * _Available since v3.4._\n */\nabstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 {\n    using Counters for Counters.Counter;\n\n    mapping (address => Counters.Counter) private _nonces;\n\n    // solhint-disable-next-line var-name-mixedcase\n    bytes32 private immutable _PERMIT_TYPEHASH = keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\n\n    /**\n     * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\"1\"`.\n     *\n     * It's a good idea to use the same `name` that is defined as the ERC20 token name.\n     */\n    constructor(string memory name) EIP712(name, \"1\") {\n    }\n\n    /**\n     * @dev See {IERC20Permit-permit}.\n     */\n    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public virtual override {\n        // solhint-disable-next-line not-rely-on-time\n        require(block.timestamp <= deadline, \"ERC20Permit: expired deadline\");\n\n        bytes32 structHash = keccak256(\n            abi.encode(\n                _PERMIT_TYPEHASH,\n                owner,\n                spender,\n                value,\n                _nonces[owner].current(),\n                deadline\n            )\n        );\n\n        bytes32 hash = _hashTypedDataV4(structHash);\n\n        address signer = ECDSA.recover(hash, v, r, s);\n        require(signer == owner, \"ERC20Permit: invalid signature\");\n\n        _nonces[owner].increment();\n        _approve(owner, spender, value);\n    }\n\n    /**\n     * @dev See {IERC20Permit-nonces}.\n     */\n    function nonces(address owner) public view override returns (uint256) {\n        return _nonces[owner].current();\n    }\n\n    /**\n     * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function DOMAIN_SEPARATOR() external view override returns (bytes32) {\n        return _domainSeparatorV4();\n    }\n}\n"
      },
      "@openzeppelin/contracts/cryptography/ECDSA.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n    /**\n     * @dev Returns the address that signed a hashed message (`hash`) with\n     * `signature`. This address can then be used for verification purposes.\n     *\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n     * this function rejects them by requiring the `s` value to be in the lower\n     * half order, and the `v` value to be either 27 or 28.\n     *\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n     * verification to be secure: it is possible to craft signatures that\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n     * this is by receiving a hash of the original message (which may otherwise\n     * be too long), and then calling {toEthSignedMessageHash} on it.\n     */\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n        // Check the signature length\n        if (signature.length != 65) {\n            revert(\"ECDSA: invalid signature length\");\n        }\n\n        // Divide the signature in r, s and v variables\n        bytes32 r;\n        bytes32 s;\n        uint8 v;\n\n        // ecrecover takes the signature parameters, and the only way to get them\n        // currently is to use assembly.\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            r := mload(add(signature, 0x20))\n            s := mload(add(signature, 0x40))\n            v := byte(0, mload(add(signature, 0x60)))\n        }\n\n        return recover(hash, v, r, s);\n    }\n\n    /**\n     * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n     * `r` and `s` signature fields separately.\n     */\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n        //\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n        // these malleable signatures as well.\n        require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, \"ECDSA: invalid signature 's' value\");\n        require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n\n        // If the signature is valid (and not malleable), return the signer address\n        address signer = ecrecover(hash, v, r, s);\n        require(signer != address(0), \"ECDSA: invalid signature\");\n\n        return signer;\n    }\n\n    /**\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n     * replicates the behavior of the\n     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n     * JSON-RPC method.\n     *\n     * See {recover}.\n     */\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n        // 32 is the length in bytes of hash,\n        // enforced by the type signature above\n        return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n    }\n}\n"
      },
      "@openzeppelin/contracts/drafts/EIP712.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n    /* solhint-disable var-name-mixedcase */\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n    // invalidate the cached domain separator if the chain id changes.\n    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n    uint256 private immutable _CACHED_CHAIN_ID;\n\n    bytes32 private immutable _HASHED_NAME;\n    bytes32 private immutable _HASHED_VERSION;\n    bytes32 private immutable _TYPE_HASH;\n    /* solhint-enable var-name-mixedcase */\n\n    /**\n     * @dev Initializes the domain separator and parameter caches.\n     *\n     * The meaning of `name` and `version` is specified in\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n     *\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n     * - `version`: the current major version of the signing domain.\n     *\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n     * contract upgrade].\n     */\n    constructor(string memory name, string memory version) {\n        bytes32 hashedName = keccak256(bytes(name));\n        bytes32 hashedVersion = keccak256(bytes(version));\n        bytes32 typeHash = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n        _HASHED_NAME = hashedName;\n        _HASHED_VERSION = hashedVersion;\n        _CACHED_CHAIN_ID = _getChainId();\n        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n        _TYPE_HASH = typeHash;\n    }\n\n    /**\n     * @dev Returns the domain separator for the current chain.\n     */\n    function _domainSeparatorV4() internal view virtual returns (bytes32) {\n        if (_getChainId() == _CACHED_CHAIN_ID) {\n            return _CACHED_DOMAIN_SEPARATOR;\n        } else {\n            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n        }\n    }\n\n    function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\n        return keccak256(\n            abi.encode(\n                typeHash,\n                name,\n                version,\n                _getChainId(),\n                address(this)\n            )\n        );\n    }\n\n    /**\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n     * function returns the hash of the fully encoded EIP712 message for this domain.\n     *\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n     *\n     * ```solidity\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n     *     keccak256(\"Mail(address to,string contents)\"),\n     *     mailTo,\n     *     keccak256(bytes(mailContents))\n     * )));\n     * address signer = ECDSA.recover(digest, signature);\n     * ```\n     */\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n        return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n    }\n\n    function _getChainId() private view returns (uint256 chainId) {\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            chainId := chainid()\n        }\n    }\n}\n"
      },
      "contracts/lens/QuoterV2.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol';\nimport '@airdao/astra-cl-core/contracts/libraries/SafeCast.sol';\nimport '@airdao/astra-cl-core/contracts/libraries/TickMath.sol';\nimport '@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol';\nimport '@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol';\nimport '@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/Path.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol';\n\nimport '../interfaces/IQuoterV2.sol';\nimport '../libraries/PoolTicksCounter.sol';\n\n/// @title Provides quotes for swaps\n/// @notice Allows getting the expected amount out or amount in for a given swap without executing the swap\n/// @dev These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute\n/// the swap and check the amounts in the callback.\ncontract QuoterV2 is IQuoterV2, IAstraCLSwapCallback, PeripheryImmutableState {\n    using Path for bytes;\n    using SafeCast for uint256;\n    using PoolTicksCounter for IAstraCLPool;\n\n    /// @dev Transient storage variable used to check a safety condition in exact output swaps.\n    uint256 private amountOutCached;\n\n    constructor(address _factory, address _WETH9) PeripheryImmutableState(_factory, _WETH9) {}\n\n    function getPool(\n        address tokenA,\n        address tokenB,\n        uint24 fee\n    ) private view returns (IAstraCLPool) {\n        return IAstraCLPool(PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)));\n    }\n\n    /// @inheritdoc IAstraCLSwapCallback\n    function astraCLSwapCallback(\n        int256 amount0Delta,\n        int256 amount1Delta,\n        bytes memory path\n    ) external view override {\n        require(amount0Delta > 0 || amount1Delta > 0); // swaps entirely within 0-liquidity regions are not supported\n        (address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool();\n        CallbackValidation.verifyCallback(factory, tokenIn, tokenOut, fee);\n\n        (bool isExactInput, uint256 amountToPay, uint256 amountReceived) =\n            amount0Delta > 0\n                ? (tokenIn < tokenOut, uint256(amount0Delta), uint256(-amount1Delta))\n                : (tokenOut < tokenIn, uint256(amount1Delta), uint256(-amount0Delta));\n\n        IAstraCLPool pool = getPool(tokenIn, tokenOut, fee);\n        (uint160 sqrtPriceX96After, int24 tickAfter, , , , , ) = pool.slot0();\n\n        if (isExactInput) {\n            assembly {\n                let ptr := mload(0x40)\n                mstore(ptr, amountReceived)\n                mstore(add(ptr, 0x20), sqrtPriceX96After)\n                mstore(add(ptr, 0x40), tickAfter)\n                revert(ptr, 96)\n            }\n        } else {\n            // if the cache has been populated, ensure that the full output amount has been received\n            if (amountOutCached != 0) require(amountReceived == amountOutCached);\n            assembly {\n                let ptr := mload(0x40)\n                mstore(ptr, amountToPay)\n                mstore(add(ptr, 0x20), sqrtPriceX96After)\n                mstore(add(ptr, 0x40), tickAfter)\n                revert(ptr, 96)\n            }\n        }\n    }\n\n    /// @dev Parses a revert reason that should contain the numeric quote\n    function parseRevertReason(bytes memory reason)\n        private\n        pure\n        returns (\n            uint256 amount,\n            uint160 sqrtPriceX96After,\n            int24 tickAfter\n        )\n    {\n        if (reason.length != 96) {\n            if (reason.length < 68) revert('Unexpected error');\n            assembly {\n                reason := add(reason, 0x04)\n            }\n            revert(abi.decode(reason, (string)));\n        }\n        return abi.decode(reason, (uint256, uint160, int24));\n    }\n\n    function handleRevert(\n        bytes memory reason,\n        IAstraCLPool pool,\n        uint256 gasEstimate\n    )\n        private\n        view\n        returns (\n            uint256 amount,\n            uint160 sqrtPriceX96After,\n            uint32 initializedTicksCrossed,\n            uint256\n        )\n    {\n        int24 tickBefore;\n        int24 tickAfter;\n        (, tickBefore, , , , , ) = pool.slot0();\n        (amount, sqrtPriceX96After, tickAfter) = parseRevertReason(reason);\n\n        initializedTicksCrossed = pool.countInitializedTicksCrossed(tickBefore, tickAfter);\n\n        return (amount, sqrtPriceX96After, initializedTicksCrossed, gasEstimate);\n    }\n\n    function quoteExactInputSingle(QuoteExactInputSingleParams memory params)\n        public\n        override\n        returns (\n            uint256 amountOut,\n            uint160 sqrtPriceX96After,\n            uint32 initializedTicksCrossed,\n            uint256 gasEstimate\n        )\n    {\n        bool zeroForOne = params.tokenIn < params.tokenOut;\n        IAstraCLPool pool = getPool(params.tokenIn, params.tokenOut, params.fee);\n\n        uint256 gasBefore = gasleft();\n        try\n            pool.swap(\n                address(this), // address(0) might cause issues with some tokens\n                zeroForOne,\n                params.amountIn.toInt256(),\n                params.sqrtPriceLimitX96 == 0\n                    ? (zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1)\n                    : params.sqrtPriceLimitX96,\n                abi.encodePacked(params.tokenIn, params.fee, params.tokenOut)\n            )\n        {} catch (bytes memory reason) {\n            gasEstimate = gasBefore - gasleft();\n            return handleRevert(reason, pool, gasEstimate);\n        }\n    }\n\n    function quoteExactInput(bytes memory path, uint256 amountIn)\n        public\n        override\n        returns (\n            uint256 amountOut,\n            uint160[] memory sqrtPriceX96AfterList,\n            uint32[] memory initializedTicksCrossedList,\n            uint256 gasEstimate\n        )\n    {\n        sqrtPriceX96AfterList = new uint160[](path.numPools());\n        initializedTicksCrossedList = new uint32[](path.numPools());\n\n        uint256 i = 0;\n        while (true) {\n            (address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool();\n\n            // the outputs of prior swaps become the inputs to subsequent ones\n            (uint256 _amountOut, uint160 _sqrtPriceX96After, uint32 _initializedTicksCrossed, uint256 _gasEstimate) =\n                quoteExactInputSingle(\n                    QuoteExactInputSingleParams({\n                        tokenIn: tokenIn,\n                        tokenOut: tokenOut,\n                        fee: fee,\n                        amountIn: amountIn,\n                        sqrtPriceLimitX96: 0\n                    })\n                );\n\n            sqrtPriceX96AfterList[i] = _sqrtPriceX96After;\n            initializedTicksCrossedList[i] = _initializedTicksCrossed;\n            amountIn = _amountOut;\n            gasEstimate += _gasEstimate;\n            i++;\n\n            // decide whether to continue or terminate\n            if (path.hasMultiplePools()) {\n                path = path.skipToken();\n            } else {\n                return (amountIn, sqrtPriceX96AfterList, initializedTicksCrossedList, gasEstimate);\n            }\n        }\n    }\n\n    function quoteExactOutputSingle(QuoteExactOutputSingleParams memory params)\n        public\n        override\n        returns (\n            uint256 amountIn,\n            uint160 sqrtPriceX96After,\n            uint32 initializedTicksCrossed,\n            uint256 gasEstimate\n        )\n    {\n        bool zeroForOne = params.tokenIn < params.tokenOut;\n        IAstraCLPool pool = getPool(params.tokenIn, params.tokenOut, params.fee);\n\n        // if no price limit has been specified, cache the output amount for comparison in the swap callback\n        if (params.sqrtPriceLimitX96 == 0) amountOutCached = params.amount;\n        uint256 gasBefore = gasleft();\n        try\n            pool.swap(\n                address(this), // address(0) might cause issues with some tokens\n                zeroForOne,\n                -params.amount.toInt256(),\n                params.sqrtPriceLimitX96 == 0\n                    ? (zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1)\n                    : params.sqrtPriceLimitX96,\n                abi.encodePacked(params.tokenOut, params.fee, params.tokenIn)\n            )\n        {} catch (bytes memory reason) {\n            gasEstimate = gasBefore - gasleft();\n            if (params.sqrtPriceLimitX96 == 0) delete amountOutCached; // clear cache\n            return handleRevert(reason, pool, gasEstimate);\n        }\n    }\n\n    function quoteExactOutput(bytes memory path, uint256 amountOut)\n        public\n        override\n        returns (\n            uint256 amountIn,\n            uint160[] memory sqrtPriceX96AfterList,\n            uint32[] memory initializedTicksCrossedList,\n            uint256 gasEstimate\n        )\n    {\n        sqrtPriceX96AfterList = new uint160[](path.numPools());\n        initializedTicksCrossedList = new uint32[](path.numPools());\n\n        uint256 i = 0;\n        while (true) {\n            (address tokenOut, address tokenIn, uint24 fee) = path.decodeFirstPool();\n\n            // the inputs of prior swaps become the outputs of subsequent ones\n            (uint256 _amountIn, uint160 _sqrtPriceX96After, uint32 _initializedTicksCrossed, uint256 _gasEstimate) =\n                quoteExactOutputSingle(\n                    QuoteExactOutputSingleParams({\n                        tokenIn: tokenIn,\n                        tokenOut: tokenOut,\n                        amount: amountOut,\n                        fee: fee,\n                        sqrtPriceLimitX96: 0\n                    })\n                );\n\n            sqrtPriceX96AfterList[i] = _sqrtPriceX96After;\n            initializedTicksCrossedList[i] = _initializedTicksCrossed;\n            amountOut = _amountIn;\n            gasEstimate += _gasEstimate;\n            i++;\n\n            // decide whether to continue or terminate\n            if (path.hasMultiplePools()) {\n                path = path.skipToken();\n            } else {\n                return (amountOut, sqrtPriceX96AfterList, initializedTicksCrossedList, gasEstimate);\n            }\n        }\n    }\n}\n"
      },
      "contracts/interfaces/IQuoterV2.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\n/// @title QuoterV2 Interface\n/// @notice Supports quoting the calculated amounts from exact input or exact output swaps.\n/// @notice For each pool also tells you the number of initialized ticks crossed and the sqrt price of the pool after the swap.\n/// @dev These functions are not marked view because they rely on calling non-view functions and reverting\n/// to compute the result. They are also not gas efficient and should not be called on-chain.\ninterface IQuoterV2 {\n    /// @notice Returns the amount out received for a given exact input swap without executing the swap\n    /// @param path The path of the swap, i.e. each token pair and the pool fee\n    /// @param amountIn The amount of the first token to swap\n    /// @return amountOut The amount of the last token that would be received\n    /// @return sqrtPriceX96AfterList List of the sqrt price after the swap for each pool in the path\n    /// @return initializedTicksCrossedList List of the initialized ticks that the swap crossed for each pool in the path\n    /// @return gasEstimate The estimate of the gas that the swap consumes\n    function quoteExactInput(bytes memory path, uint256 amountIn)\n        external\n        returns (\n            uint256 amountOut,\n            uint160[] memory sqrtPriceX96AfterList,\n            uint32[] memory initializedTicksCrossedList,\n            uint256 gasEstimate\n        );\n\n    struct QuoteExactInputSingleParams {\n        address tokenIn;\n        address tokenOut;\n        uint256 amountIn;\n        uint24 fee;\n        uint160 sqrtPriceLimitX96;\n    }\n\n    /// @notice Returns the amount out received for a given exact input but for a swap of a single pool\n    /// @param params The params for the quote, encoded as `QuoteExactInputSingleParams`\n    /// tokenIn The token being swapped in\n    /// tokenOut The token being swapped out\n    /// fee The fee of the token pool to consider for the pair\n    /// amountIn The desired input amount\n    /// sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n    /// @return amountOut The amount of `tokenOut` that would be received\n    /// @return sqrtPriceX96After The sqrt price of the pool after the swap\n    /// @return initializedTicksCrossed The number of initialized ticks that the swap crossed\n    /// @return gasEstimate The estimate of the gas that the swap consumes\n    function quoteExactInputSingle(QuoteExactInputSingleParams memory params)\n        external\n        returns (\n            uint256 amountOut,\n            uint160 sqrtPriceX96After,\n            uint32 initializedTicksCrossed,\n            uint256 gasEstimate\n        );\n\n    /// @notice Returns the amount in required for a given exact output swap without executing the swap\n    /// @param path The path of the swap, i.e. each token pair and the pool fee. Path must be provided in reverse order\n    /// @param amountOut The amount of the last token to receive\n    /// @return amountIn The amount of first token required to be paid\n    /// @return sqrtPriceX96AfterList List of the sqrt price after the swap for each pool in the path\n    /// @return initializedTicksCrossedList List of the initialized ticks that the swap crossed for each pool in the path\n    /// @return gasEstimate The estimate of the gas that the swap consumes\n    function quoteExactOutput(bytes memory path, uint256 amountOut)\n        external\n        returns (\n            uint256 amountIn,\n            uint160[] memory sqrtPriceX96AfterList,\n            uint32[] memory initializedTicksCrossedList,\n            uint256 gasEstimate\n        );\n\n    struct QuoteExactOutputSingleParams {\n        address tokenIn;\n        address tokenOut;\n        uint256 amount;\n        uint24 fee;\n        uint160 sqrtPriceLimitX96;\n    }\n\n    /// @notice Returns the amount in required to receive the given exact output amount but for a swap of a single pool\n    /// @param params The params for the quote, encoded as `QuoteExactOutputSingleParams`\n    /// tokenIn The token being swapped in\n    /// tokenOut The token being swapped out\n    /// fee The fee of the token pool to consider for the pair\n    /// amountOut The desired output amount\n    /// sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n    /// @return amountIn The amount required as the input for the swap in order to receive `amountOut`\n    /// @return sqrtPriceX96After The sqrt price of the pool after the swap\n    /// @return initializedTicksCrossed The number of initialized ticks that the swap crossed\n    /// @return gasEstimate The estimate of the gas that the swap consumes\n    function quoteExactOutputSingle(QuoteExactOutputSingleParams memory params)\n        external\n        returns (\n            uint256 amountIn,\n            uint160 sqrtPriceX96After,\n            uint32 initializedTicksCrossed,\n            uint256 gasEstimate\n        );\n}\n"
      },
      "contracts/lens/Quoter.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity =0.7.6;\npragma abicoder v2;\n\nimport '@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol';\nimport '@airdao/astra-cl-core/contracts/libraries/SafeCast.sol';\nimport '@airdao/astra-cl-core/contracts/libraries/TickMath.sol';\nimport '@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol';\nimport '@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/Path.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol';\nimport '@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol';\n\nimport '../interfaces/IQuoter.sol';\n\n/// @title Provides quotes for swaps\n/// @notice Allows getting the expected amount out or amount in for a given swap without executing the swap\n/// @dev These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute\n/// the swap and check the amounts in the callback.\ncontract Quoter is IQuoter, IAstraCLSwapCallback, PeripheryImmutableState {\n    using Path for bytes;\n    using SafeCast for uint256;\n\n    /// @dev Transient storage variable used to check a safety condition in exact output swaps.\n    uint256 private amountOutCached;\n\n    constructor(address _factory, address _SAMB) PeripheryImmutableState(_factory, _SAMB) {}\n\n    function getPool(\n        address tokenA,\n        address tokenB,\n        uint24 fee\n    ) private view returns (IAstraCLPool) {\n        return IAstraCLPool(PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)));\n    }\n\n    /// @inheritdoc IAstraCLSwapCallback\n    function astraCLSwapCallback(\n        int256 amount0Delta,\n        int256 amount1Delta,\n        bytes memory path\n    ) external view override {\n        require(amount0Delta > 0 || amount1Delta > 0); // swaps entirely within 0-liquidity regions are not supported\n        (address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool();\n        CallbackValidation.verifyCallback(factory, tokenIn, tokenOut, fee);\n\n        (bool isExactInput, uint256 amountToPay, uint256 amountReceived) =\n            amount0Delta > 0\n                ? (tokenIn < tokenOut, uint256(amount0Delta), uint256(-amount1Delta))\n                : (tokenOut < tokenIn, uint256(amount1Delta), uint256(-amount0Delta));\n        if (isExactInput) {\n            assembly {\n                let ptr := mload(0x40)\n                mstore(ptr, amountReceived)\n                revert(ptr, 32)\n            }\n        } else {\n            // if the cache has been populated, ensure that the full output amount has been received\n            if (amountOutCached != 0) require(amountReceived == amountOutCached);\n            assembly {\n                let ptr := mload(0x40)\n                mstore(ptr, amountToPay)\n                revert(ptr, 32)\n            }\n        }\n    }\n\n    /// @dev Parses a revert reason that should contain the numeric quote\n    function parseRevertReason(bytes memory reason) private pure returns (uint256) {\n        if (reason.length != 32) {\n            if (reason.length < 68) revert('Unexpected error');\n            assembly {\n                reason := add(reason, 0x04)\n            }\n            revert(abi.decode(reason, (string)));\n        }\n        return abi.decode(reason, (uint256));\n    }\n\n    /// @inheritdoc IQuoter\n    function quoteExactInputSingle(\n        address tokenIn,\n        address tokenOut,\n        uint24 fee,\n        uint256 amountIn,\n        uint160 sqrtPriceLimitX96\n    ) public override returns (uint256 amountOut) {\n        bool zeroForOne = tokenIn < tokenOut;\n\n        try\n            getPool(tokenIn, tokenOut, fee).swap(\n                address(this), // address(0) might cause issues with some tokens\n                zeroForOne,\n                amountIn.toInt256(),\n                sqrtPriceLimitX96 == 0\n                    ? (zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1)\n                    : sqrtPriceLimitX96,\n                abi.encodePacked(tokenIn, fee, tokenOut)\n            )\n        {} catch (bytes memory reason) {\n            return parseRevertReason(reason);\n        }\n    }\n\n    /// @inheritdoc IQuoter\n    function quoteExactInput(bytes memory path, uint256 amountIn) external override returns (uint256 amountOut) {\n        while (true) {\n            bool hasMultiplePools = path.hasMultiplePools();\n\n            (address tokenIn, address tokenOut, uint24 fee) = path.decodeFirstPool();\n\n            // the outputs of prior swaps become the inputs to subsequent ones\n            amountIn = quoteExactInputSingle(tokenIn, tokenOut, fee, amountIn, 0);\n\n            // decide whether to continue or terminate\n            if (hasMultiplePools) {\n                path = path.skipToken();\n            } else {\n                return amountIn;\n            }\n        }\n    }\n\n    /// @inheritdoc IQuoter\n    function quoteExactOutputSingle(\n        address tokenIn,\n        address tokenOut,\n        uint24 fee,\n        uint256 amountOut,\n        uint160 sqrtPriceLimitX96\n    ) public override returns (uint256 amountIn) {\n        bool zeroForOne = tokenIn < tokenOut;\n\n        // if no price limit has been specified, cache the output amount for comparison in the swap callback\n        if (sqrtPriceLimitX96 == 0) amountOutCached = amountOut;\n        try\n            getPool(tokenIn, tokenOut, fee).swap(\n                address(this), // address(0) might cause issues with some tokens\n                zeroForOne,\n                -amountOut.toInt256(),\n                sqrtPriceLimitX96 == 0\n                    ? (zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1)\n                    : sqrtPriceLimitX96,\n                abi.encodePacked(tokenOut, fee, tokenIn)\n            )\n        {} catch (bytes memory reason) {\n            if (sqrtPriceLimitX96 == 0) delete amountOutCached; // clear cache\n            return parseRevertReason(reason);\n        }\n    }\n\n    /// @inheritdoc IQuoter\n    function quoteExactOutput(bytes memory path, uint256 amountOut) external override returns (uint256 amountIn) {\n        while (true) {\n            bool hasMultiplePools = path.hasMultiplePools();\n\n            (address tokenOut, address tokenIn, uint24 fee) = path.decodeFirstPool();\n\n            // the inputs of prior swaps become the outputs of subsequent ones\n            amountOut = quoteExactOutputSingle(tokenIn, tokenOut, fee, amountOut, 0);\n\n            // decide whether to continue or terminate\n            if (hasMultiplePools) {\n                path = path.skipToken();\n            } else {\n                return amountOut;\n            }\n        }\n    }\n}\n"
      },
      "contracts/interfaces/IQuoter.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.7.5;\npragma abicoder v2;\n\n/// @title Quoter Interface\n/// @notice Supports quoting the calculated amounts from exact input or exact output swaps\n/// @dev These functions are not marked view because they rely on calling non-view functions and reverting\n/// to compute the result. They are also not gas efficient and should not be called on-chain.\ninterface IQuoter {\n    /// @notice Returns the amount out received for a given exact input swap without executing the swap\n    /// @param path The path of the swap, i.e. each token pair and the pool fee\n    /// @param amountIn The amount of the first token to swap\n    /// @return amountOut The amount of the last token that would be received\n    function quoteExactInput(bytes memory path, uint256 amountIn) external returns (uint256 amountOut);\n\n    /// @notice Returns the amount out received for a given exact input but for a swap of a single pool\n    /// @param tokenIn The token being swapped in\n    /// @param tokenOut The token being swapped out\n    /// @param fee The fee of the token pool to consider for the pair\n    /// @param amountIn The desired input amount\n    /// @param sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n    /// @return amountOut The amount of `tokenOut` that would be received\n    function quoteExactInputSingle(\n        address tokenIn,\n        address tokenOut,\n        uint24 fee,\n        uint256 amountIn,\n        uint160 sqrtPriceLimitX96\n    ) external returns (uint256 amountOut);\n\n    /// @notice Returns the amount in required for a given exact output swap without executing the swap\n    /// @param path The path of the swap, i.e. each token pair and the pool fee. Path must be provided in reverse order\n    /// @param amountOut The amount of the last token to receive\n    /// @return amountIn The amount of first token required to be paid\n    function quoteExactOutput(bytes memory path, uint256 amountOut) external returns (uint256 amountIn);\n\n    /// @notice Returns the amount in required to receive the given exact output amount but for a swap of a single pool\n    /// @param tokenIn The token being swapped in\n    /// @param tokenOut The token being swapped out\n    /// @param fee The fee of the token pool to consider for the pair\n    /// @param amountOut The desired output amount\n    /// @param sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n    /// @return amountIn The amount required as the input for the swap in order to receive `amountOut`\n    function quoteExactOutputSingle(\n        address tokenIn,\n        address tokenOut,\n        uint24 fee,\n        uint256 amountOut,\n        uint160 sqrtPriceLimitX96\n    ) external returns (uint256 amountIn);\n}\n"
      },
      "contracts/test/TestERC20.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity =0.7.6;\n\nimport '@openzeppelin/contracts/drafts/ERC20Permit.sol';\n\ncontract TestERC20 is ERC20Permit {\n    constructor(uint256 amountToMint) ERC20('Test ERC20', 'TEST') ERC20Permit('Test ERC20') {\n        _mint(msg.sender, amountToMint);\n    }\n}\n"
      }
    },
    "settings": {
      "evmVersion": "istanbul",
      "optimizer": {
        "enabled": true,
        "runs": 1000000
      },
      "metadata": {
        "bytecodeHash": "none"
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol": {
        "IAstraCLPool": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Burn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "name": "Collect",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "name": "CollectProtocol",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paid0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paid1",
                  "type": "uint256"
                }
              ],
              "name": "Flash",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint16",
                  "name": "observationCardinalityNextOld",
                  "type": "uint16"
                },
                {
                  "indexed": false,
                  "internalType": "uint16",
                  "name": "observationCardinalityNextNew",
                  "type": "uint16"
                }
              ],
              "name": "IncreaseObservationCardinalityNext",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "indexed": false,
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "Initialize",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Mint",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol0Old",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol1Old",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol0New",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol1New",
                  "type": "uint8"
                }
              ],
              "name": "SetFeeProtocol",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "amount0",
                  "type": "int256"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "amount1",
                  "type": "int256"
                },
                {
                  "indexed": false,
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "Swap",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                }
              ],
              "name": "burn",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount0Requested",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1Requested",
                  "type": "uint128"
                }
              ],
              "name": "collect",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint128",
                  "name": "amount0Requested",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1Requested",
                  "type": "uint128"
                }
              ],
              "name": "collectProtocol",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint24",
                  "name": "",
                  "type": "uint24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "feeGrowthGlobal0X128",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "feeGrowthGlobal1X128",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "flash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint16",
                  "name": "observationCardinalityNext",
                  "type": "uint16"
                }
              ],
              "name": "increaseObservationCardinalityNext",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                }
              ],
              "name": "initialize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidity",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxLiquidityPerTick",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "observations",
              "outputs": [
                {
                  "internalType": "uint32",
                  "name": "blockTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "int56",
                  "name": "tickCumulative",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityCumulativeX128",
                  "type": "uint160"
                },
                {
                  "internalType": "bool",
                  "name": "initialized",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint32[]",
                  "name": "secondsAgos",
                  "type": "uint32[]"
                }
              ],
              "name": "observe",
              "outputs": [
                {
                  "internalType": "int56[]",
                  "name": "tickCumulatives",
                  "type": "int56[]"
                },
                {
                  "internalType": "uint160[]",
                  "name": "secondsPerLiquidityCumulativeX128s",
                  "type": "uint160[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "key",
                  "type": "bytes32"
                }
              ],
              "name": "positions",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "_liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside0LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside1LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "protocolFees",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "token0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "token1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8",
                  "name": "feeProtocol0",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "feeProtocol1",
                  "type": "uint8"
                }
              ],
              "name": "setFeeProtocol",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "slot0",
              "outputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                },
                {
                  "internalType": "uint16",
                  "name": "observationIndex",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "observationCardinality",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "observationCardinalityNext",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "feeProtocol",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "unlocked",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                }
              ],
              "name": "snapshotCumulativesInside",
              "outputs": [
                {
                  "internalType": "int56",
                  "name": "tickCumulativeInside",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityInsideX128",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsInside",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "zeroForOne",
                  "type": "bool"
                },
                {
                  "internalType": "int256",
                  "name": "amountSpecified",
                  "type": "int256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "swap",
              "outputs": [
                {
                  "internalType": "int256",
                  "name": "amount0",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1",
                  "type": "int256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int16",
                  "name": "wordPosition",
                  "type": "int16"
                }
              ],
              "name": "tickBitmap",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickSpacing",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "ticks",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidityGross",
                  "type": "uint128"
                },
                {
                  "internalType": "int128",
                  "name": "liquidityNet",
                  "type": "int128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthOutside0X128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthOutside1X128",
                  "type": "uint256"
                },
                {
                  "internalType": "int56",
                  "name": "tickCumulativeOutside",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityOutsideX128",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsOutside",
                  "type": "uint32"
                },
                {
                  "internalType": "bool",
                  "name": "initialized",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token0",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "burn(int24,int24,uint128)": "a34123a7",
              "collect(address,int24,int24,uint128,uint128)": "4f1eb3d8",
              "collectProtocol(address,uint128,uint128)": "85b66729",
              "factory()": "c45a0155",
              "fee()": "ddca3f43",
              "feeGrowthGlobal0X128()": "f3058399",
              "feeGrowthGlobal1X128()": "46141319",
              "flash(address,uint256,uint256,bytes)": "490e6cbc",
              "increaseObservationCardinalityNext(uint16)": "32148f67",
              "initialize(uint160)": "f637731d",
              "liquidity()": "1a686502",
              "maxLiquidityPerTick()": "70cf754a",
              "mint(address,int24,int24,uint128,bytes)": "3c8a7d8d",
              "observations(uint256)": "252c09d7",
              "observe(uint32[])": "883bdbfd",
              "positions(bytes32)": "514ea4bf",
              "protocolFees()": "1ad8b03b",
              "setFeeProtocol(uint8,uint8)": "8206a4d1",
              "slot0()": "3850c7bd",
              "snapshotCumulativesInside(int24,int24)": "a38807f2",
              "swap(address,bool,int256,uint160,bytes)": "128acb08",
              "tickBitmap(int16)": "5339c296",
              "tickSpacing()": "d0c93a7c",
              "ticks(int24)": "f30dba93",
              "token0()": "0dfe1681",
              "token1()": "d21220a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"Collect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"CollectProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid1\",\"type\":\"uint256\"}],\"name\":\"Flash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextOld\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextNew\",\"type\":\"uint16\"}],\"name\":\"IncreaseObservationCardinalityNext\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Initialize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0New\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1New\",\"type\":\"uint8\"}],\"name\":\"SetFeeProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collectProtocol\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal0X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal1X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"flash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"}],\"name\":\"increaseObservationCardinalityNext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLiquidityPerTick\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"observations\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"blockTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"int56\",\"name\":\"tickCumulative\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityCumulativeX128\",\"type\":\"uint160\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"secondsAgos\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56[]\",\"name\":\"tickCumulatives\",\"type\":\"int56[]\"},{\"internalType\":\"uint160[]\",\"name\":\"secondsPerLiquidityCumulativeX128s\",\"type\":\"uint160[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"_liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFees\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"token0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"token1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"feeProtocol0\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol1\",\"type\":\"uint8\"}],\"name\":\"setFeeProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slot0\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint16\",\"name\":\"observationIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinality\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"snapshotCumulativesInside\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"tickCumulativeInside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityInsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsInside\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16\",\"name\":\"wordPosition\",\"type\":\"int16\"}],\"name\":\"tickBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"ticks\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside0X128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside1X128\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"tickCumulativeOutside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityOutsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsOutside\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The pool interface is broken up into many smaller pieces\",\"kind\":\"dev\",\"methods\":{\"burn(int24,int24,uint128)\":{\"details\":\"Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect\",\"params\":{\"amount\":\"How much liquidity to burn\",\"tickLower\":\"The lower tick of the position for which to burn liquidity\",\"tickUpper\":\"The upper tick of the position for which to burn liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 sent to the recipient\",\"amount1\":\"The amount of token1 sent to the recipient\"}},\"collect(address,int24,int24,uint128,uint128)\":{\"details\":\"Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\",\"params\":{\"amount0Requested\":\"How much token0 should be withdrawn from the fees owed\",\"amount1Requested\":\"How much token1 should be withdrawn from the fees owed\",\"recipient\":\"The address which should receive the fees collected\",\"tickLower\":\"The lower tick of the position for which to collect fees\",\"tickUpper\":\"The upper tick of the position for which to collect fees\"},\"returns\":{\"amount0\":\"The amount of fees collected in token0\",\"amount1\":\"The amount of fees collected in token1\"}},\"collectProtocol(address,uint128,uint128)\":{\"params\":{\"amount0Requested\":\"The maximum amount of token0 to send, can be 0 to collect fees in only token1\",\"amount1Requested\":\"The maximum amount of token1 to send, can be 0 to collect fees in only token0\",\"recipient\":\"The address to which collected protocol fees should be sent\"},\"returns\":{\"amount0\":\"The protocol fee collected in token0\",\"amount1\":\"The protocol fee collected in token1\"}},\"factory()\":{\"returns\":{\"_0\":\"The contract address\"}},\"fee()\":{\"returns\":{\"_0\":\"The fee\"}},\"feeGrowthGlobal0X128()\":{\"details\":\"This value can overflow the uint256\"},\"feeGrowthGlobal1X128()\":{\"details\":\"This value can overflow the uint256\"},\"flash(address,uint256,uint256,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IAstraCLFlashCallback.sol#astraCLFlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback\",\"params\":{\"amount0\":\"The amount of token0 to send\",\"amount1\":\"The amount of token1 to send\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address which will receive the token0 and token1 amounts\"}},\"increaseObservationCardinalityNext(uint16)\":{\"details\":\"This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.\",\"params\":{\"observationCardinalityNext\":\"The desired minimum number of observations for the pool to store\"}},\"initialize(uint160)\":{\"details\":\"Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\",\"params\":{\"sqrtPriceX96\":\"the initial sqrt price of the pool as a Q64.96\"}},\"liquidity()\":{\"details\":\"This value has no relationship to the total liquidity across all ticks\"},\"maxLiquidityPerTick()\":{\"details\":\"This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\",\"returns\":{\"_0\":\"The max amount of liquidity per tick\"}},\"mint(address,int24,int24,uint128,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IAstraCLMintCallback.sol#astraCLMintCallback in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends on tickLower, tickUpper, the amount of liquidity, and the current price.\",\"params\":{\"amount\":\"The amount of liquidity to mint\",\"data\":\"Any data that should be passed through to the callback\",\"recipient\":\"The address for which the liquidity will be created\",\"tickLower\":\"The lower tick of the position in which to add liquidity\",\"tickUpper\":\"The upper tick of the position in which to add liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\",\"amount1\":\"The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\"}},\"observations(uint256)\":{\"details\":\"You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.\",\"params\":{\"index\":\"The element of the observations array to fetch\"},\"returns\":{\"blockTimestamp\":\"The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use\"}},\"observe(uint32[])\":{\"details\":\"To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, you must call it with secondsAgos = [3600, 0].The time weighted average tick represents the geometric time weighted average price of the pool, in log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\",\"params\":{\"secondsAgos\":\"From how long ago each cumulative tick and liquidity value should be returned\"},\"returns\":{\"secondsPerLiquidityCumulativeX128s\":\"Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp\",\"tickCumulatives\":\"Cumulative tick values as of each `secondsAgos` from the current block timestamp\"}},\"positions(bytes32)\":{\"params\":{\"key\":\"The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\"},\"returns\":{\"_liquidity\":\"The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\"}},\"protocolFees()\":{\"details\":\"Protocol fees will never exceed uint128 max in either token\"},\"setFeeProtocol(uint8,uint8)\":{\"params\":{\"feeProtocol0\":\"new protocol fee for token0 of the pool\",\"feeProtocol1\":\"new protocol fee for token1 of the pool\"}},\"slot0()\":{\"returns\":{\"sqrtPriceX96\":\"The current price of the pool as a sqrt(token1/token0) Q64.96 value tick The current tick of the pool, i.e. according to the last tick transition that was run. This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick boundary. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. feeProtocol The protocol fee for both tokens of the pool. Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. unlocked Whether the pool is currently locked to reentrancy\"}},\"snapshotCumulativesInside(int24,int24)\":{\"details\":\"Snapshots must only be compared to other snapshots, taken over a period for which a position existed. I.e., snapshots cannot be compared if a position is not held for the entire period between when the first snapshot is taken and the second snapshot is taken.\",\"params\":{\"tickLower\":\"The lower tick of the range\",\"tickUpper\":\"The upper tick of the range\"},\"returns\":{\"secondsInside\":\"The snapshot of seconds per liquidity for the range\",\"secondsPerLiquidityInsideX128\":\"The snapshot of seconds per liquidity for the range\",\"tickCumulativeInside\":\"The snapshot of the tick accumulator for the range\"}},\"swap(address,bool,int256,uint160,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IAstraCLSwapCallback.sol#astraCLSwapCallback\",\"params\":{\"amountSpecified\":\"The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address to receive the output of the swap\",\"sqrtPriceLimitX96\":\"The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap\",\"zeroForOne\":\"The direction of the swap, true for token0 to token1, false for token1 to token0\"},\"returns\":{\"amount0\":\"The delta of the balance of token0 of the pool, exact when negative, minimum when positive\",\"amount1\":\"The delta of the balance of token1 of the pool, exact when negative, minimum when positive\"}},\"tickSpacing()\":{\"details\":\"Ticks can only be used at multiples of this value, minimum of 1 and always positive e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... This value is an int24 to avoid casting even though it is always positive.\",\"returns\":{\"_0\":\"The tick spacing\"}},\"ticks(int24)\":{\"params\":{\"tick\":\"The tick to look up\"},\"returns\":{\"liquidityGross\":\"the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position.\"}},\"token0()\":{\"returns\":{\"_0\":\"The token contract address\"}},\"token1()\":{\"returns\":{\"_0\":\"The token contract address\"}}},\"title\":\"The interface for a Astra CL Pool\",\"version\":1},\"userdoc\":{\"events\":{\"Burn(address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when a position's liquidity is removed\"},\"Collect(address,address,int24,int24,uint128,uint128)\":{\"notice\":\"Emitted when fees are collected by the owner of a position\"},\"CollectProtocol(address,address,uint128,uint128)\":{\"notice\":\"Emitted when the collected protocol fees are withdrawn by the factory owner\"},\"Flash(address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted by the pool for any flashes of token0/token1\"},\"IncreaseObservationCardinalityNext(uint16,uint16)\":{\"notice\":\"Emitted by the pool for increases to the number of observations that can be stored\"},\"Initialize(uint160,int24)\":{\"notice\":\"Emitted exactly once by a pool when #initialize is first called on the pool\"},\"Mint(address,address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when liquidity is minted for a given position\"},\"SetFeeProtocol(uint8,uint8,uint8,uint8)\":{\"notice\":\"Emitted when the protocol fee is changed by the pool\"},\"Swap(address,address,int256,int256,uint160,uint128,int24)\":{\"notice\":\"Emitted by the pool for any swaps between token0 and token1\"}},\"kind\":\"user\",\"methods\":{\"burn(int24,int24,uint128)\":{\"notice\":\"Burn liquidity from the sender and account tokens owed for the liquidity to the position\"},\"collect(address,int24,int24,uint128,uint128)\":{\"notice\":\"Collects tokens owed to a position\"},\"collectProtocol(address,uint128,uint128)\":{\"notice\":\"Collect the protocol fee accrued to the pool\"},\"factory()\":{\"notice\":\"The contract that deployed the pool, which must adhere to the IAstraCLFactory interface\"},\"fee()\":{\"notice\":\"The pool's fee in hundredths of a bip, i.e. 1e-6\"},\"feeGrowthGlobal0X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\"},\"feeGrowthGlobal1X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\"},\"flash(address,uint256,uint256,bytes)\":{\"notice\":\"Receive token0 and/or token1 and pay it back, plus a fee, in the callback\"},\"increaseObservationCardinalityNext(uint16)\":{\"notice\":\"Increase the maximum number of price and liquidity observations that this pool will store\"},\"initialize(uint160)\":{\"notice\":\"Sets the initial price for the pool\"},\"liquidity()\":{\"notice\":\"The currently in range liquidity available to the pool\"},\"maxLiquidityPerTick()\":{\"notice\":\"The maximum amount of position liquidity that can use any tick in the range\"},\"mint(address,int24,int24,uint128,bytes)\":{\"notice\":\"Adds liquidity for the given recipient/tickLower/tickUpper position\"},\"observations(uint256)\":{\"notice\":\"Returns data about a specific observation index\"},\"observe(uint32[])\":{\"notice\":\"Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\"},\"positions(bytes32)\":{\"notice\":\"Returns the information about a position by the position's key\"},\"protocolFees()\":{\"notice\":\"The amounts of token0 and token1 that are owed to the protocol\"},\"setFeeProtocol(uint8,uint8)\":{\"notice\":\"Set the denominator of the protocol's % share of the fees\"},\"slot0()\":{\"notice\":\"The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally.\"},\"snapshotCumulativesInside(int24,int24)\":{\"notice\":\"Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\"},\"swap(address,bool,int256,uint160,bytes)\":{\"notice\":\"Swap token0 for token1, or token1 for token0\"},\"tickBitmap(int16)\":{\"notice\":\"Returns 256 packed tick initialized boolean values. See TickBitmap for more information\"},\"tickSpacing()\":{\"notice\":\"The pool tick spacing\"},\"ticks(int24)\":{\"notice\":\"Look up information about a specific tick in the pool\"},\"token0()\":{\"notice\":\"The first of the two tokens of the pool, sorted by address\"},\"token1()\":{\"notice\":\"The second of the two tokens of the pool, sorted by address\"}},\"notice\":\"An Astra pool facilitates swapping and automated market making between any two assets that strictly conform to the ERC20 specification\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":\"IAstraCLPool\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol": {
        "IAstraCLSwapCallback": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "amount0Delta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1Delta",
                  "type": "int256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "astraCLSwapCallback",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "astraCLSwapCallback(int256,int256,bytes)": "11c17848"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"astraCLSwapCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IAstraCLPoolActions#swap call\"}}},\"title\":\"Callback for IAstraCLPoolActions#swap\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\"}},\"notice\":\"Any contract that calls IAstraCLPoolActions#swap must implement this interface\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":\"IAstraCLSwapCallback\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":{\"keccak256\":\"0xaa82f63f0c930e51d6aaae0d59e7bf3ef5b32371ac0549f6e07bfcab5b4dcb16\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73419af0b4f35f02c3b89d387d6ac46041637a7133e249de617103b7567bf4c4\",\"dweb:/ipfs/QmTfwEX1dCoUUUMaMFzDnqDcFXihHQnEG1fbkBFpidRs8o\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol": {
        "IAstraCLPoolActions": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                }
              ],
              "name": "burn",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount0Requested",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1Requested",
                  "type": "uint128"
                }
              ],
              "name": "collect",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "flash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint16",
                  "name": "observationCardinalityNext",
                  "type": "uint16"
                }
              ],
              "name": "increaseObservationCardinalityNext",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                }
              ],
              "name": "initialize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "zeroForOne",
                  "type": "bool"
                },
                {
                  "internalType": "int256",
                  "name": "amountSpecified",
                  "type": "int256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "swap",
              "outputs": [
                {
                  "internalType": "int256",
                  "name": "amount0",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1",
                  "type": "int256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "burn(int24,int24,uint128)": "a34123a7",
              "collect(address,int24,int24,uint128,uint128)": "4f1eb3d8",
              "flash(address,uint256,uint256,bytes)": "490e6cbc",
              "increaseObservationCardinalityNext(uint16)": "32148f67",
              "initialize(uint160)": "f637731d",
              "mint(address,int24,int24,uint128,bytes)": "3c8a7d8d",
              "swap(address,bool,int256,uint160,bytes)": "128acb08"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"flash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"}],\"name\":\"increaseObservationCardinalityNext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burn(int24,int24,uint128)\":{\"details\":\"Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect\",\"params\":{\"amount\":\"How much liquidity to burn\",\"tickLower\":\"The lower tick of the position for which to burn liquidity\",\"tickUpper\":\"The upper tick of the position for which to burn liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 sent to the recipient\",\"amount1\":\"The amount of token1 sent to the recipient\"}},\"collect(address,int24,int24,uint128,uint128)\":{\"details\":\"Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\",\"params\":{\"amount0Requested\":\"How much token0 should be withdrawn from the fees owed\",\"amount1Requested\":\"How much token1 should be withdrawn from the fees owed\",\"recipient\":\"The address which should receive the fees collected\",\"tickLower\":\"The lower tick of the position for which to collect fees\",\"tickUpper\":\"The upper tick of the position for which to collect fees\"},\"returns\":{\"amount0\":\"The amount of fees collected in token0\",\"amount1\":\"The amount of fees collected in token1\"}},\"flash(address,uint256,uint256,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IAstraCLFlashCallback.sol#astraCLFlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback\",\"params\":{\"amount0\":\"The amount of token0 to send\",\"amount1\":\"The amount of token1 to send\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address which will receive the token0 and token1 amounts\"}},\"increaseObservationCardinalityNext(uint16)\":{\"details\":\"This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.\",\"params\":{\"observationCardinalityNext\":\"The desired minimum number of observations for the pool to store\"}},\"initialize(uint160)\":{\"details\":\"Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\",\"params\":{\"sqrtPriceX96\":\"the initial sqrt price of the pool as a Q64.96\"}},\"mint(address,int24,int24,uint128,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IAstraCLMintCallback.sol#astraCLMintCallback in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends on tickLower, tickUpper, the amount of liquidity, and the current price.\",\"params\":{\"amount\":\"The amount of liquidity to mint\",\"data\":\"Any data that should be passed through to the callback\",\"recipient\":\"The address for which the liquidity will be created\",\"tickLower\":\"The lower tick of the position in which to add liquidity\",\"tickUpper\":\"The upper tick of the position in which to add liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\",\"amount1\":\"The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\"}},\"swap(address,bool,int256,uint160,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IAstraCLSwapCallback.sol#astraCLSwapCallback\",\"params\":{\"amountSpecified\":\"The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address to receive the output of the swap\",\"sqrtPriceLimitX96\":\"The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap\",\"zeroForOne\":\"The direction of the swap, true for token0 to token1, false for token1 to token0\"},\"returns\":{\"amount0\":\"The delta of the balance of token0 of the pool, exact when negative, minimum when positive\",\"amount1\":\"The delta of the balance of token1 of the pool, exact when negative, minimum when positive\"}}},\"title\":\"Permissionless pool actions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"burn(int24,int24,uint128)\":{\"notice\":\"Burn liquidity from the sender and account tokens owed for the liquidity to the position\"},\"collect(address,int24,int24,uint128,uint128)\":{\"notice\":\"Collects tokens owed to a position\"},\"flash(address,uint256,uint256,bytes)\":{\"notice\":\"Receive token0 and/or token1 and pay it back, plus a fee, in the callback\"},\"increaseObservationCardinalityNext(uint16)\":{\"notice\":\"Increase the maximum number of price and liquidity observations that this pool will store\"},\"initialize(uint160)\":{\"notice\":\"Sets the initial price for the pool\"},\"mint(address,int24,int24,uint128,bytes)\":{\"notice\":\"Adds liquidity for the given recipient/tickLower/tickUpper position\"},\"swap(address,bool,int256,uint160,bytes)\":{\"notice\":\"Swap token0 for token1, or token1 for token0\"}},\"notice\":\"Contains pool methods that can be called by anyone\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":\"IAstraCLPoolActions\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol": {
        "IAstraCLPoolDerivedState": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint32[]",
                  "name": "secondsAgos",
                  "type": "uint32[]"
                }
              ],
              "name": "observe",
              "outputs": [
                {
                  "internalType": "int56[]",
                  "name": "tickCumulatives",
                  "type": "int56[]"
                },
                {
                  "internalType": "uint160[]",
                  "name": "secondsPerLiquidityCumulativeX128s",
                  "type": "uint160[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                }
              ],
              "name": "snapshotCumulativesInside",
              "outputs": [
                {
                  "internalType": "int56",
                  "name": "tickCumulativeInside",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityInsideX128",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsInside",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "observe(uint32[])": "883bdbfd",
              "snapshotCumulativesInside(int24,int24)": "a38807f2"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"secondsAgos\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56[]\",\"name\":\"tickCumulatives\",\"type\":\"int56[]\"},{\"internalType\":\"uint160[]\",\"name\":\"secondsPerLiquidityCumulativeX128s\",\"type\":\"uint160[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"snapshotCumulativesInside\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"tickCumulativeInside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityInsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsInside\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"observe(uint32[])\":{\"details\":\"To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, you must call it with secondsAgos = [3600, 0].The time weighted average tick represents the geometric time weighted average price of the pool, in log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\",\"params\":{\"secondsAgos\":\"From how long ago each cumulative tick and liquidity value should be returned\"},\"returns\":{\"secondsPerLiquidityCumulativeX128s\":\"Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp\",\"tickCumulatives\":\"Cumulative tick values as of each `secondsAgos` from the current block timestamp\"}},\"snapshotCumulativesInside(int24,int24)\":{\"details\":\"Snapshots must only be compared to other snapshots, taken over a period for which a position existed. I.e., snapshots cannot be compared if a position is not held for the entire period between when the first snapshot is taken and the second snapshot is taken.\",\"params\":{\"tickLower\":\"The lower tick of the range\",\"tickUpper\":\"The upper tick of the range\"},\"returns\":{\"secondsInside\":\"The snapshot of seconds per liquidity for the range\",\"secondsPerLiquidityInsideX128\":\"The snapshot of seconds per liquidity for the range\",\"tickCumulativeInside\":\"The snapshot of the tick accumulator for the range\"}}},\"title\":\"Pool state that is not stored\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"observe(uint32[])\":{\"notice\":\"Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\"},\"snapshotCumulativesInside(int24,int24)\":{\"notice\":\"Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\"}},\"notice\":\"Contains view functions to provide information about the pool that is computed rather than stored on the blockchain. The functions here may have variable gas costs.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":\"IAstraCLPoolDerivedState\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol": {
        "IAstraCLPoolEvents": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Burn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "name": "Collect",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "name": "CollectProtocol",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paid0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paid1",
                  "type": "uint256"
                }
              ],
              "name": "Flash",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint16",
                  "name": "observationCardinalityNextOld",
                  "type": "uint16"
                },
                {
                  "indexed": false,
                  "internalType": "uint16",
                  "name": "observationCardinalityNextNew",
                  "type": "uint16"
                }
              ],
              "name": "IncreaseObservationCardinalityNext",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "indexed": false,
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "Initialize",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Mint",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol0Old",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol1Old",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol0New",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol1New",
                  "type": "uint8"
                }
              ],
              "name": "SetFeeProtocol",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "amount0",
                  "type": "int256"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "amount1",
                  "type": "int256"
                },
                {
                  "indexed": false,
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "Swap",
              "type": "event"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"Collect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"CollectProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid1\",\"type\":\"uint256\"}],\"name\":\"Flash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextOld\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextNew\",\"type\":\"uint16\"}],\"name\":\"IncreaseObservationCardinalityNext\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Initialize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0New\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1New\",\"type\":\"uint8\"}],\"name\":\"SetFeeProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Swap\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"Burn(address,int24,int24,uint128,uint256,uint256)\":{\"details\":\"Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\",\"params\":{\"amount\":\"The amount of liquidity to remove\",\"amount0\":\"The amount of token0 withdrawn\",\"amount1\":\"The amount of token1 withdrawn\",\"owner\":\"The owner of the position for which liquidity is removed\",\"tickLower\":\"The lower tick of the position\",\"tickUpper\":\"The upper tick of the position\"}},\"Collect(address,address,int24,int24,uint128,uint128)\":{\"details\":\"Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\",\"params\":{\"amount0\":\"The amount of token0 fees collected\",\"amount1\":\"The amount of token1 fees collected\",\"owner\":\"The owner of the position for which fees are collected\",\"tickLower\":\"The lower tick of the position\",\"tickUpper\":\"The upper tick of the position\"}},\"CollectProtocol(address,address,uint128,uint128)\":{\"params\":{\"amount0\":\"The amount of token1 protocol fees that is withdrawn\",\"recipient\":\"The address that receives the collected protocol fees\",\"sender\":\"The address that collects the protocol fees\"}},\"Flash(address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amount0\":\"The amount of token0 that was flashed\",\"amount1\":\"The amount of token1 that was flashed\",\"paid0\":\"The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\",\"paid1\":\"The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\",\"recipient\":\"The address that received the tokens from flash\",\"sender\":\"The address that initiated the swap call, and that received the callback\"}},\"IncreaseObservationCardinalityNext(uint16,uint16)\":{\"details\":\"observationCardinalityNext is not the observation cardinality until an observation is written at the index just before a mint/swap/burn.\",\"params\":{\"observationCardinalityNextNew\":\"The updated value of the next observation cardinality\",\"observationCardinalityNextOld\":\"The previous value of the next observation cardinality\"}},\"Initialize(uint160,int24)\":{\"details\":\"Mint/Burn/Swap cannot be emitted by the pool before Initialize\",\"params\":{\"sqrtPriceX96\":\"The initial sqrt price of the pool, as a Q64.96\",\"tick\":\"The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\"}},\"Mint(address,address,int24,int24,uint128,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of liquidity minted to the position range\",\"amount0\":\"How much token0 was required for the minted liquidity\",\"amount1\":\"How much token1 was required for the minted liquidity\",\"owner\":\"The owner of the position and recipient of any minted liquidity\",\"sender\":\"The address that minted the liquidity\",\"tickLower\":\"The lower tick of the position\",\"tickUpper\":\"The upper tick of the position\"}},\"SetFeeProtocol(uint8,uint8,uint8,uint8)\":{\"params\":{\"feeProtocol0New\":\"The updated value of the token0 protocol fee\",\"feeProtocol0Old\":\"The previous value of the token0 protocol fee\",\"feeProtocol1New\":\"The updated value of the token1 protocol fee\",\"feeProtocol1Old\":\"The previous value of the token1 protocol fee\"}},\"Swap(address,address,int256,int256,uint160,uint128,int24)\":{\"params\":{\"amount0\":\"The delta of the token0 balance of the pool\",\"amount1\":\"The delta of the token1 balance of the pool\",\"liquidity\":\"The liquidity of the pool after the swap\",\"recipient\":\"The address that received the output of the swap\",\"sender\":\"The address that initiated the swap call, and that received the callback\",\"sqrtPriceX96\":\"The sqrt(price) of the pool after the swap, as a Q64.96\",\"tick\":\"The log base 1.0001 of price of the pool after the swap\"}}},\"kind\":\"dev\",\"methods\":{},\"title\":\"Events emitted by a pool\",\"version\":1},\"userdoc\":{\"events\":{\"Burn(address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when a position's liquidity is removed\"},\"Collect(address,address,int24,int24,uint128,uint128)\":{\"notice\":\"Emitted when fees are collected by the owner of a position\"},\"CollectProtocol(address,address,uint128,uint128)\":{\"notice\":\"Emitted when the collected protocol fees are withdrawn by the factory owner\"},\"Flash(address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted by the pool for any flashes of token0/token1\"},\"IncreaseObservationCardinalityNext(uint16,uint16)\":{\"notice\":\"Emitted by the pool for increases to the number of observations that can be stored\"},\"Initialize(uint160,int24)\":{\"notice\":\"Emitted exactly once by a pool when #initialize is first called on the pool\"},\"Mint(address,address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when liquidity is minted for a given position\"},\"SetFeeProtocol(uint8,uint8,uint8,uint8)\":{\"notice\":\"Emitted when the protocol fee is changed by the pool\"},\"Swap(address,address,int256,int256,uint160,uint128,int24)\":{\"notice\":\"Emitted by the pool for any swaps between token0 and token1\"}},\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains all events emitted by the pool\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":\"IAstraCLPoolEvents\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol": {
        "IAstraCLPoolImmutables": {
          "abi": [
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint24",
                  "name": "",
                  "type": "uint24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxLiquidityPerTick",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickSpacing",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token0",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factory()": "c45a0155",
              "fee()": "ddca3f43",
              "maxLiquidityPerTick()": "70cf754a",
              "tickSpacing()": "d0c93a7c",
              "token0()": "0dfe1681",
              "token1()": "d21220a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLiquidityPerTick\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"factory()\":{\"returns\":{\"_0\":\"The contract address\"}},\"fee()\":{\"returns\":{\"_0\":\"The fee\"}},\"maxLiquidityPerTick()\":{\"details\":\"This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\",\"returns\":{\"_0\":\"The max amount of liquidity per tick\"}},\"tickSpacing()\":{\"details\":\"Ticks can only be used at multiples of this value, minimum of 1 and always positive e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... This value is an int24 to avoid casting even though it is always positive.\",\"returns\":{\"_0\":\"The tick spacing\"}},\"token0()\":{\"returns\":{\"_0\":\"The token contract address\"}},\"token1()\":{\"returns\":{\"_0\":\"The token contract address\"}}},\"title\":\"Pool state that never changes\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"factory()\":{\"notice\":\"The contract that deployed the pool, which must adhere to the IAstraCLFactory interface\"},\"fee()\":{\"notice\":\"The pool's fee in hundredths of a bip, i.e. 1e-6\"},\"maxLiquidityPerTick()\":{\"notice\":\"The maximum amount of position liquidity that can use any tick in the range\"},\"tickSpacing()\":{\"notice\":\"The pool tick spacing\"},\"token0()\":{\"notice\":\"The first of the two tokens of the pool, sorted by address\"},\"token1()\":{\"notice\":\"The second of the two tokens of the pool, sorted by address\"}},\"notice\":\"These parameters are fixed for a pool forever, i.e., the methods will always return the same values\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":\"IAstraCLPoolImmutables\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol": {
        "IAstraCLPoolOwnerActions": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint128",
                  "name": "amount0Requested",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1Requested",
                  "type": "uint128"
                }
              ],
              "name": "collectProtocol",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8",
                  "name": "feeProtocol0",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "feeProtocol1",
                  "type": "uint8"
                }
              ],
              "name": "setFeeProtocol",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "collectProtocol(address,uint128,uint128)": "85b66729",
              "setFeeProtocol(uint8,uint8)": "8206a4d1"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collectProtocol\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"feeProtocol0\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol1\",\"type\":\"uint8\"}],\"name\":\"setFeeProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"collectProtocol(address,uint128,uint128)\":{\"params\":{\"amount0Requested\":\"The maximum amount of token0 to send, can be 0 to collect fees in only token1\",\"amount1Requested\":\"The maximum amount of token1 to send, can be 0 to collect fees in only token0\",\"recipient\":\"The address to which collected protocol fees should be sent\"},\"returns\":{\"amount0\":\"The protocol fee collected in token0\",\"amount1\":\"The protocol fee collected in token1\"}},\"setFeeProtocol(uint8,uint8)\":{\"params\":{\"feeProtocol0\":\"new protocol fee for token0 of the pool\",\"feeProtocol1\":\"new protocol fee for token1 of the pool\"}}},\"title\":\"Permissioned pool actions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"collectProtocol(address,uint128,uint128)\":{\"notice\":\"Collect the protocol fee accrued to the pool\"},\"setFeeProtocol(uint8,uint8)\":{\"notice\":\"Set the denominator of the protocol's % share of the fees\"}},\"notice\":\"Contains pool methods that may only be called by the factory owner\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":\"IAstraCLPoolOwnerActions\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol": {
        "IAstraCLPoolState": {
          "abi": [
            {
              "inputs": [],
              "name": "feeGrowthGlobal0X128",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "feeGrowthGlobal1X128",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidity",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "observations",
              "outputs": [
                {
                  "internalType": "uint32",
                  "name": "blockTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "int56",
                  "name": "tickCumulative",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityCumulativeX128",
                  "type": "uint160"
                },
                {
                  "internalType": "bool",
                  "name": "initialized",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "key",
                  "type": "bytes32"
                }
              ],
              "name": "positions",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "_liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside0LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside1LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "protocolFees",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "token0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "token1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "slot0",
              "outputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                },
                {
                  "internalType": "uint16",
                  "name": "observationIndex",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "observationCardinality",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "observationCardinalityNext",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "feeProtocol",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "unlocked",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int16",
                  "name": "wordPosition",
                  "type": "int16"
                }
              ],
              "name": "tickBitmap",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "ticks",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidityGross",
                  "type": "uint128"
                },
                {
                  "internalType": "int128",
                  "name": "liquidityNet",
                  "type": "int128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthOutside0X128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthOutside1X128",
                  "type": "uint256"
                },
                {
                  "internalType": "int56",
                  "name": "tickCumulativeOutside",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityOutsideX128",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsOutside",
                  "type": "uint32"
                },
                {
                  "internalType": "bool",
                  "name": "initialized",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "feeGrowthGlobal0X128()": "f3058399",
              "feeGrowthGlobal1X128()": "46141319",
              "liquidity()": "1a686502",
              "observations(uint256)": "252c09d7",
              "positions(bytes32)": "514ea4bf",
              "protocolFees()": "1ad8b03b",
              "slot0()": "3850c7bd",
              "tickBitmap(int16)": "5339c296",
              "ticks(int24)": "f30dba93"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"feeGrowthGlobal0X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal1X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"observations\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"blockTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"int56\",\"name\":\"tickCumulative\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityCumulativeX128\",\"type\":\"uint160\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"_liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFees\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"token0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"token1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slot0\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint16\",\"name\":\"observationIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinality\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16\",\"name\":\"wordPosition\",\"type\":\"int16\"}],\"name\":\"tickBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"ticks\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside0X128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside1X128\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"tickCumulativeOutside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityOutsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsOutside\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"feeGrowthGlobal0X128()\":{\"details\":\"This value can overflow the uint256\"},\"feeGrowthGlobal1X128()\":{\"details\":\"This value can overflow the uint256\"},\"liquidity()\":{\"details\":\"This value has no relationship to the total liquidity across all ticks\"},\"observations(uint256)\":{\"details\":\"You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.\",\"params\":{\"index\":\"The element of the observations array to fetch\"},\"returns\":{\"blockTimestamp\":\"The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use\"}},\"positions(bytes32)\":{\"params\":{\"key\":\"The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\"},\"returns\":{\"_liquidity\":\"The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\"}},\"protocolFees()\":{\"details\":\"Protocol fees will never exceed uint128 max in either token\"},\"slot0()\":{\"returns\":{\"sqrtPriceX96\":\"The current price of the pool as a sqrt(token1/token0) Q64.96 value tick The current tick of the pool, i.e. according to the last tick transition that was run. This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick boundary. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. feeProtocol The protocol fee for both tokens of the pool. Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. unlocked Whether the pool is currently locked to reentrancy\"}},\"ticks(int24)\":{\"params\":{\"tick\":\"The tick to look up\"},\"returns\":{\"liquidityGross\":\"the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position.\"}}},\"title\":\"Pool state that can change\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"feeGrowthGlobal0X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\"},\"feeGrowthGlobal1X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\"},\"liquidity()\":{\"notice\":\"The currently in range liquidity available to the pool\"},\"observations(uint256)\":{\"notice\":\"Returns data about a specific observation index\"},\"positions(bytes32)\":{\"notice\":\"Returns the information about a position by the position's key\"},\"protocolFees()\":{\"notice\":\"The amounts of token0 and token1 that are owed to the protocol\"},\"slot0()\":{\"notice\":\"The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally.\"},\"tickBitmap(int16)\":{\"notice\":\"Returns 256 packed tick initialized boolean values. See TickBitmap for more information\"},\"ticks(int24)\":{\"notice\":\"Look up information about a specific tick in the pool\"}},\"notice\":\"These methods compose the pool's state, and can change with any frequency including multiple times per transaction\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":\"IAstraCLPoolState\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/libraries/BitMath.sol": {
        "BitMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "187:2602:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "187:2602:8:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"This library provides functionality for computing bit properties of an unsigned integer\",\"kind\":\"dev\",\"methods\":{},\"title\":\"BitMath\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/libraries/BitMath.sol\":\"BitMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/libraries/BitMath.sol\":{\"keccak256\":\"0x82e425066110aac05ed8a9fc90f9ee85142b6f434769447e49d4438a8d9fcd82\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://77a97078bc992c18c59cb61e07fa4632c8a26b6babf00f3b16eabb5dcaa953b4\",\"dweb:/ipfs/QmTj15ufLWk6AxedSVXBcLp5cYf2DCJAeDi94cVemCkm54\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/libraries/FullMath.sol": {
        "FullMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "362:4702:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "362:4702:9:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Contains 512-bit math functions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/libraries/FullMath.sol\":\"FullMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x5340256039418f5d03512a44173d3dcf1da277a73a461e06fb5668f49cfc46f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75dee99795d1125875233a7f1d356935099cc97b4085c0e451060d77db85d144\",\"dweb:/ipfs/QmTGqyrxVLQd8TBaarqSQDiYvq1QFutCdmTyXk6JpxzKTN\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol": {
        "LowGasSafeMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "249:1446:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "249:1446:10:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Optimized overflow and underflow safe math operations\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol\":\"LowGasSafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0x86715eb960f18e01ac94e3bba4614ed51a887fa3c5bd1c43bf80aa98e019cf2d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bfc1d5d58e59015086b0e65a6c3a2ddad312e2350480510f6c0c8167f3d71a37\",\"dweb:/ipfs/QmQndULYjFsHKHjMAKLMfc12vWbVB5FawtioHtvwcWRJZp\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol": {
        "SafeCast": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "165:884:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "165:884:11:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Safe casting methods\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains methods for safely casting between types\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/libraries/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/libraries/SafeCast.sol\":{\"keccak256\":\"0xd4c1c1b67f946b077d7c52a158113763a89a210fc2927b8491055a962ecd18c0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5344400c74320ca8dbe19241db7ff49babbd6c875c1b561c79d6e4315a9fb5f9\",\"dweb:/ipfs/QmRKCNTbkovxK1WvejXZr3iAHhGN97ZT1yWGsWCJFkrT5X\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol": {
        "TickBitmap": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "331:3750:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "331:3750:12:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"The mapping uses int16 for keys since ticks are represented as int24 and there are 256 (2^8) values per word.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Packed tick initialized state library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Stores a packed mapping of tick index to its initialized state\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol\":\"TickBitmap\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/libraries/BitMath.sol\":{\"keccak256\":\"0x82e425066110aac05ed8a9fc90f9ee85142b6f434769447e49d4438a8d9fcd82\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://77a97078bc992c18c59cb61e07fa4632c8a26b6babf00f3b16eabb5dcaa953b4\",\"dweb:/ipfs/QmTj15ufLWk6AxedSVXBcLp5cYf2DCJAeDi94cVemCkm54\"]},\"@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol\":{\"keccak256\":\"0x47b7551bec8cd09091ae50a34c1ed576e317e404fbc1901593283b1cbd3be7c7\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://486b70ed46a9389da18f93654d069024941ce8373b1b8fb30e5051cf2f014a1d\",\"dweb:/ipfs/QmecffKV1nSbd2LfobgR7eqJQSuL5ER5ApAgNbe4sWVFBG\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-core/contracts/libraries/TickMath.sol": {
        "TickMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "313:8387:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "313:8387:13:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"MAX_SQRT_RATIO\":{\"details\":\"The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\"},\"MAX_TICK\":{\"details\":\"The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\"},\"MIN_SQRT_RATIO\":{\"details\":\"The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\"},\"MIN_TICK\":{\"details\":\"The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\"}},\"title\":\"Math library for computing sqrt prices from ticks and vice versa\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports prices between 2**-128 and 2**128\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-core/contracts/libraries/TickMath.sol\":\"TickMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xe22d07f1ebf9c8468c81cb6905bfc8f8a54fa2f9b4a50742202a47cdbcb5af80\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d4773ca5008d2a2f496370695942c8ba3d6e1d487adbf5cda1149da12e3a6268\",\"dweb:/ipfs/QmcPYTLpEWfU8e3KAYBfHH7uYR4tGAkvnWrWS1CG8EkyLC\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol": {
        "BlockTimestamp": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Base contract that is overridden for tests\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Function for getting block timestamp\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol\":\"BlockTimestamp\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol\":{\"keccak256\":\"0x1aa66f71234064a0c0976f62233f2edbd69554e5ad817dc97f318bc8e11f4da6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b3a40450e9d6b0f9cb91b40ffd6215612505bd74e7d954529958f4edc6ee7b93\",\"dweb:/ipfs/QmewsUCHK5N5KhNtqEwK8JgsXFADyFBrQRS5HoDWM5gi3b\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/base/Multicall.sol": {
        "Multicall": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "multicall(bytes[])": "ac9650d8"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"multicall(bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}}},\"title\":\"Multicall\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"}},\"notice\":\"Enables calling multiple methods in a single call to the contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/base/Multicall.sol\":\"Multicall\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/base/Multicall.sol\":{\"keccak256\":\"0xfcfd78c62d2145634a791d5680a1af7055fbd301c415d29c09333c99c37d9037\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0d1c8f4a18cec8ad49e5269c5b07c7f6fd497dfc1b7b777f8ddcfb8055efd803\",\"dweb:/ipfs/QmdeCTnfHM3RGtQuo3DMX9m7gPspGGwQp7ho6m9cJjjnER\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol\":{\"keccak256\":\"0xa8f9d0061ee730a522dc4bae6bd5cabb3e997e2c5983da183e912bdca93dfa7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://496b68d4f72d58cc83cf51bd9cc9c99aaa46dc3c3df7c951a9e50ba29ee33016\",\"dweb:/ipfs/Qmc3bkXwuRP8mDpcKgvLgbCKn8tD8PGCaBjnLHSPMJCRGD\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol": {
        "PeripheryImmutableState": {
          "abi": [
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "factory()": "c45a0155"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"SAMB\":{\"return\":\"Returns the address of SAMB\"},\"factory\":{\"return\":\"Returns the address of the AstraDEX CL factory\"}},\"title\":\"Immutable state\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Immutable state used by periphery contracts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":\"PeripheryImmutableState\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol": {
        "PeripheryPayments": {
          "abi": [
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "factory()": "c45a0155",
              "refundAMB()": "c53af304",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "unwrapSAMB(uint256,address)": "a98ce37f"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol\":\"PeripheryPayments\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol\":{\"keccak256\":\"0x88e12ecce0236f43cac955dee8ae50e8ffba7d133625ba18b590d51b9e030098\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9f10d1317582a91e7842901c6888c4bb28939817cefa3d3f88458c2ec653b6ed\",\"dweb:/ipfs/QmP2qV22Uq6Pou1VkgNzRnXHzNJ71CBpVBYhYDnLccBx8U\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol\":{\"keccak256\":\"0x5b5789677c6b7e447fd774a5c065d9547c85f22e950e18690f686a6b779d78dc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c2e45681c8d5c704fbfef7369ff7878e6af2d987ba564eb97148ee6e8db87e49\",\"dweb:/ipfs/Qmeg4ynPmWipSVb6BRj4o8uZRbE2bQk8nCwp9apMAEq8Xk\"]},\"@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x0fef3409a5a161cd12b777fdfa86845d64b86f72c78b8312c9e3c92f9017e5c5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c9df2c76e4581a1d343ea1dd1d0478df7f1c1eef1b476ccea452367ef5b75e65\",\"dweb:/ipfs/QmWZVBRQcn4ekrmCDFkM4BSRAZ1m72GHzUnfzUn39PwQow\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol": {
        "PeripheryPaymentsWithFee": {
          "abi": [
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "factory()": "c45a0155",
              "refundAMB()": "c53af304",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "sweepTokenWithFee(address,uint256,address,uint256,address)": "e0e189a0",
              "unwrapSAMB(uint256,address)": "a98ce37f",
              "unwrapSAMBWithFee(uint256,address,uint256,address)": "97e87d9d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol\":\"PeripheryPaymentsWithFee\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0x86715eb960f18e01ac94e3bba4614ed51a887fa3c5bd1c43bf80aa98e019cf2d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bfc1d5d58e59015086b0e65a6c3a2ddad312e2350480510f6c0c8167f3d71a37\",\"dweb:/ipfs/QmQndULYjFsHKHjMAKLMfc12vWbVB5FawtioHtvwcWRJZp\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol\":{\"keccak256\":\"0x88e12ecce0236f43cac955dee8ae50e8ffba7d133625ba18b590d51b9e030098\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9f10d1317582a91e7842901c6888c4bb28939817cefa3d3f88458c2ec653b6ed\",\"dweb:/ipfs/QmP2qV22Uq6Pou1VkgNzRnXHzNJ71CBpVBYhYDnLccBx8U\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x93f6d5b75cb4e7204ae63f45722eb82ac62f732d56cbf31f3a65ce2ea262cc6d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a23090fa2e584774818eeb9e548086b8c383acd9d35830845191fd114bfbf03b\",\"dweb:/ipfs/QmXr9EGVoUMCGttgsDFJZ5UBrBjY42qBV2FRakCDi8aeTs\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x95eb2970f74b59074666d156779b7eeb1a34228476ac26f987f6f563b834098d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bd17994291ec4231d4fa66af52e0cfd4f7883365ecb41f534acf08afffa8806d\",\"dweb:/ipfs/QmUjst3v8zu8DE9Ue3YHJJoRLcZGd9CXP3jVoC2tSAUjs9\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol\":{\"keccak256\":\"0x5b5789677c6b7e447fd774a5c065d9547c85f22e950e18690f686a6b779d78dc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c2e45681c8d5c704fbfef7369ff7878e6af2d987ba564eb97148ee6e8db87e49\",\"dweb:/ipfs/Qmeg4ynPmWipSVb6BRj4o8uZRbE2bQk8nCwp9apMAEq8Xk\"]},\"@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x0fef3409a5a161cd12b777fdfa86845d64b86f72c78b8312c9e3c92f9017e5c5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c9df2c76e4581a1d343ea1dd1d0478df7f1c1eef1b476ccea452367ef5b75e65\",\"dweb:/ipfs/QmWZVBRQcn4ekrmCDFkM4BSRAZ1m72GHzUnfzUn39PwQow\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol": {
        "PeripheryValidation": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol\":\"PeripheryValidation\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol\":{\"keccak256\":\"0x1aa66f71234064a0c0976f62233f2edbd69554e5ad817dc97f318bc8e11f4da6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b3a40450e9d6b0f9cb91b40ffd6215612505bd74e7d954529958f4edc6ee7b93\",\"dweb:/ipfs/QmewsUCHK5N5KhNtqEwK8JgsXFADyFBrQRS5HoDWM5gi3b\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol\":{\"keccak256\":\"0xc736bab599912d6212e8414ee4ba7af0c1e08ff6aa11caa85f5f6e07f7d421c3\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://06f6c13a86900c71fa486fc029a59d1b7eb96162bb42885b5f845d995294893e\",\"dweb:/ipfs/QmUcBxMsmncw9n6eXhzzwSasGBvBGKH5FT8HSrAxrsXV4A\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/base/SelfPermit.sol": {
        "SelfPermit": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermit",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitAllowed",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitAllowedIfNecessary",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitIfNecessary",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)": "f3995c67",
              "selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)": "4659a494",
              "selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)": "a4a78f0c",
              "selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)": "c2e3140a"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitAllowed\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitAllowedIfNecessary\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitIfNecessary\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These functions are expected to be embedded in multicalls to allow EOAs to approve a contract and call a function that requires an approval in a single transaction.\",\"kind\":\"dev\",\"methods\":{\"selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this).\",\"params\":{\"deadline\":\"A timestamp, the current blocktime must be less than or equal to this timestamp\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\",\"value\":\"The amount that can be spent of token\"}},\"selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this)\",\"params\":{\"expiry\":\"The timestamp at which the permit is no longer valid\",\"nonce\":\"The current nonce of the owner\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this) Can be used instead of #selfPermitAllowed to prevent calls from failing due to a frontrun of a call to #selfPermitAllowed.\",\"params\":{\"expiry\":\"The timestamp at which the permit is no longer valid\",\"nonce\":\"The current nonce of the owner\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this). Can be used instead of #selfPermit to prevent calls from failing due to a frontrun of a call to #selfPermit\",\"params\":{\"deadline\":\"A timestamp, the current blocktime must be less than or equal to this timestamp\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\",\"value\":\"The amount that can be spent of token\"}}},\"title\":\"Self Permit\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend a given token from `msg.sender`\"},\"selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\"},\"selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\"},\"selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend a given token from `msg.sender`\"}},\"notice\":\"Functionality to call permit on any EIP-2612-compliant token for use in the route\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/base/SelfPermit.sol\":\"SelfPermit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/base/SelfPermit.sol\":{\"keccak256\":\"0xe75aedfc1eff6c84adac82b2bc41d197127a74530f0c344a7a122a6c8ec186be\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://05150ae691e10f2c9c82ad46de86c8b6683d8eba995e6f9ff82eaefc064902e9\",\"dweb:/ipfs/QmdKxxmxCPxV7qe11MbRhpaQXDAnnKWH1BoTMmEXYPAA7g\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol\":{\"keccak256\":\"0x402d04301ffd41853f4949a574b8853c46d076910ed734f5e4478bf64369a3ed\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6a5536d179ff3777920ff8ed60cfc457f7a4dda1373c8f0394b2a8e0fe537525\",\"dweb:/ipfs/QmdaYGikTmmi2vbECnoomZ8vS8PBiD4Bq8BoFCYqFZmKgR\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol\":{\"keccak256\":\"0x8c4c1b8e724e0a78cb691d703dd37cd91b8bd6600537fb227807a194025a792d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://783be851155842a02cdb0483c3a69ecc0e7ae8545f65cec1d4aeb355b2026a7d\",\"dweb:/ipfs/QmZNBQosTjpGNKB3Eo2K6Zzye7FYiLVoEki5iPB2Y69jz2\"]},\"@openzeppelin/contracts/drafts/IERC20Permit.sol\":{\"keccak256\":\"0x1aab7754719ba764a8a05bec47e975001400f62986474945eb3dbee6d871259f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c14e8ff1b384bdb68f262669364b1e79fbbd82b85938b7ce788a1395c40c6a2\",\"dweb:/ipfs/QmUKLXfSeEuRUXkeWLBhjHTKeSFoNBCS1RaMXv1AmHXYzn\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IERC721Permit.sol": {
        "IERC721Permit": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "DOMAIN_SEPARATOR",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "PERMIT_TYPEHASH",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "permit",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "_approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "DOMAIN_SEPARATOR()": "3644e515",
              "PERMIT_TYPEHASH()": "30adf81f",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "ownerOf(uint256)": "6352211e",
              "permit(address,uint256,uint256,uint8,bytes32,bytes32)": "7ac2ff7b",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"returns\":{\"_0\":\"The domain seperator used in encoding of permit signature\"}},\"PERMIT_TYPEHASH()\":{\"returns\":{\"_0\":\"The typehash for the permit\"}},\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"permit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp by which the call must be mined for the approve to work\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"spender\":\"The account that is being approved\",\"tokenId\":\"The ID of the token that is being approved for spending\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"title\":\"ERC721 with permit\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"The domain separator used in the permit signature\"},\"PERMIT_TYPEHASH()\":{\"notice\":\"The permit typehash used in the permit signature\"},\"permit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Approve of a specific token ID for spending by spender via signature\"}},\"notice\":\"Extension to ERC721 that includes a permit function for signature based approvals\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IERC721Permit.sol\":\"IERC721Permit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IERC721Permit.sol\":{\"keccak256\":\"0x383d39a13ce10019d4ebd27a694d085c03a1498a1cc31ec1511fac91b5296342\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3d22d9cc7a33829bd31da42d96bd75401a675ef32c8eb4d9e3074c21ec1241b6\",\"dweb:/ipfs/QmNrvD2T3k3wH5kWz6Kss9mSjxdJhXAA6NTH1Evj8j3k6A\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xd2f30fad5b24c4120f96dbac83aacdb7993ee610a9092bc23c44463da292bf8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3d4e72409e392c7694b6405a0136cf073d8da016df33ef8f9ad195f724ebfea\",\"dweb:/ipfs/QmPGcddKq6CgsiKnxUUif2q76wRqP3dmdQ6bKuHCLmb8Wa\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xb11597841d47f7a773bca63ca323c76f804cb5d944788de0327db5526319dc82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://930d2da1934886a1098753be4173dd89c45ca0b306a1930accd37e00b1af4aaf\",\"dweb:/ipfs/QmVSXnvEV41d43k8cfpANHoTYMKgBDBL8iCbxkLfEtQZBe\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol": {
        "IMulticall": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "multicall(bytes[])": "ac9650d8"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"multicall(bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}}},\"title\":\"Multicall interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"}},\"notice\":\"Enables calling multiple methods in a single call to the contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol\":\"IMulticall\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol\":{\"keccak256\":\"0xa8f9d0061ee730a522dc4bae6bd5cabb3e997e2c5983da183e912bdca93dfa7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://496b68d4f72d58cc83cf51bd9cc9c99aaa46dc3c3df7c951a9e50ba29ee33016\",\"dweb:/ipfs/Qmc3bkXwuRP8mDpcKgvLgbCKn8tD8PGCaBjnLHSPMJCRGD\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol": {
        "INonfungiblePositionManager": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Collect",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "DecreaseLiquidity",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "IncreaseLiquidity",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "DOMAIN_SEPARATOR",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "PERMIT_TYPEHASH",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "burn",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint128",
                      "name": "amount0Max",
                      "type": "uint128"
                    },
                    {
                      "internalType": "uint128",
                      "name": "amount1Max",
                      "type": "uint128"
                    }
                  ],
                  "internalType": "struct INonfungiblePositionManager.CollectParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "collect",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token0",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token1",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "fee",
                  "type": "uint24"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                }
              ],
              "name": "createAndInitializePoolIfNecessary",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint128",
                      "name": "liquidity",
                      "type": "uint128"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "deadline",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct INonfungiblePositionManager.DecreaseLiquidityParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "decreaseLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Desired",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Desired",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "deadline",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct INonfungiblePositionManager.IncreaseLiquidityParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "increaseLiquidity",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token0",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "token1",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickLower",
                      "type": "int24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickUpper",
                      "type": "int24"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Desired",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Desired",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "deadline",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct INonfungiblePositionManager.MintParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "permit",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "positions",
              "outputs": [
                {
                  "internalType": "uint96",
                  "name": "nonce",
                  "type": "uint96"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token0",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token1",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "fee",
                  "type": "uint24"
                },
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside0LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside1LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "_approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "tokenByIndex",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "tokenOfOwnerByIndex",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "DOMAIN_SEPARATOR()": "3644e515",
              "PERMIT_TYPEHASH()": "30adf81f",
              "SAMB()": "90793ea8",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "burn(uint256)": "42966c68",
              "collect((uint256,address,uint128,uint128))": "fc6f7865",
              "createAndInitializePoolIfNecessary(address,address,uint24,uint160)": "13ead562",
              "decreaseLiquidity((uint256,uint128,uint256,uint256,uint256))": "0c49ccbe",
              "factory()": "c45a0155",
              "getApproved(uint256)": "081812fc",
              "increaseLiquidity((uint256,uint256,uint256,uint256,uint256,uint256))": "219f5d17",
              "isApprovedForAll(address,address)": "e985e9c5",
              "mint((address,address,uint24,int24,int24,uint256,uint256,uint256,uint256,address,uint256))": "88316456",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "permit(address,uint256,uint256,uint8,bytes32,bytes32)": "7ac2ff7b",
              "positions(uint256)": "99fbab88",
              "refundAMB()": "c53af304",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "symbol()": "95d89b41",
              "tokenByIndex(uint256)": "4f6ccce7",
              "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
              "tokenURI(uint256)": "c87b56dd",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd",
              "unwrapSAMB(uint256,address)": "a98ce37f"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Collect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"DecreaseLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"IncreaseLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount0Max\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Max\",\"type\":\"uint128\"}],\"internalType\":\"struct INonfungiblePositionManager.CollectParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"createAndInitializePoolIfNecessary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct INonfungiblePositionManager.DecreaseLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"decreaseLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct INonfungiblePositionManager.IncreaseLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"increaseLiquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint256\",\"name\":\"amount0Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct INonfungiblePositionManager.MintParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"nonce\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Collect(uint256,address,uint256,uint256)\":{\"details\":\"The amounts reported may not be exactly equivalent to the amounts transferred, due to rounding behavior\",\"params\":{\"amount0\":\"The amount of token0 owed to the position that was collected\",\"amount1\":\"The amount of token1 owed to the position that was collected\",\"recipient\":\"The address of the account that received the collected tokens\",\"tokenId\":\"The ID of the token for which underlying tokens were collected\"}},\"DecreaseLiquidity(uint256,uint128,uint256,uint256)\":{\"params\":{\"amount0\":\"The amount of token0 that was accounted for the decrease in liquidity\",\"amount1\":\"The amount of token1 that was accounted for the decrease in liquidity\",\"liquidity\":\"The amount by which liquidity for the NFT position was decreased\",\"tokenId\":\"The ID of the token for which liquidity was decreased\"}},\"IncreaseLiquidity(uint256,uint128,uint256,uint256)\":{\"details\":\"Also emitted when a token is minted\",\"params\":{\"amount0\":\"The amount of token0 that was paid for the increase in liquidity\",\"amount1\":\"The amount of token1 that was paid for the increase in liquidity\",\"liquidity\":\"The amount by which liquidity for the NFT position was increased\",\"tokenId\":\"The ID of the token for which liquidity was increased\"}}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"returns\":{\"_0\":\"The domain seperator used in encoding of permit signature\"}},\"PERMIT_TYPEHASH()\":{\"returns\":{\"_0\":\"The typehash for the permit\"}},\"SAMB()\":{\"returns\":{\"_0\":\"Returns the address of SAMB\"}},\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"burn(uint256)\":{\"params\":{\"tokenId\":\"The ID of the token that is being burned\"}},\"collect((uint256,address,uint128,uint128))\":{\"params\":{\"params\":\"tokenId The ID of the NFT for which tokens are being collected, recipient The account that should receive the tokens, amount0Max The maximum amount of token0 to collect, amount1Max The maximum amount of token1 to collect\"},\"returns\":{\"amount0\":\"The amount of fees collected in token0\",\"amount1\":\"The amount of fees collected in token1\"}},\"createAndInitializePoolIfNecessary(address,address,uint24,uint160)\":{\"details\":\"This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool\",\"params\":{\"fee\":\"The fee amount of the CL pool for the specified token pair\",\"sqrtPriceX96\":\"The initial square root price of the pool as a Q64.96 value\",\"token0\":\"The contract address of token0 of the pool\",\"token1\":\"The contract address of token1 of the pool\"},\"returns\":{\"pool\":\"Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary\"}},\"decreaseLiquidity((uint256,uint128,uint256,uint256,uint256))\":{\"params\":{\"params\":\"tokenId The ID of the token for which liquidity is being decreased, amount The amount by which liquidity will be decreased, amount0Min The minimum amount of token0 that should be accounted for the burned liquidity, amount1Min The minimum amount of token1 that should be accounted for the burned liquidity, deadline The time by which the transaction must be included to effect the change\"},\"returns\":{\"amount0\":\"The amount of token0 accounted to the position's tokens owed\",\"amount1\":\"The amount of token1 accounted to the position's tokens owed\"}},\"factory()\":{\"returns\":{\"_0\":\"Returns the address of the AstraDEX CL factory\"}},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"increaseLiquidity((uint256,uint256,uint256,uint256,uint256,uint256))\":{\"params\":{\"params\":\"tokenId The ID of the token for which liquidity is being increased, amount0Desired The desired amount of token0 to be spent, amount1Desired The desired amount of token1 to be spent, amount0Min The minimum amount of token0 to spend, which serves as a slippage check, amount1Min The minimum amount of token1 to spend, which serves as a slippage check, deadline The time by which the transaction must be included to effect the change\"},\"returns\":{\"amount0\":\"The amount of token0 to acheive resulting liquidity\",\"amount1\":\"The amount of token1 to acheive resulting liquidity\",\"liquidity\":\"The new liquidity amount as a result of the increase\"}},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"mint((address,address,uint24,int24,int24,uint256,uint256,uint256,uint256,address,uint256))\":{\"details\":\"Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized a method does not exist, i.e. the pool is assumed to be initialized.\",\"params\":{\"params\":\"The params necessary to mint a position, encoded as `MintParams` in calldata\"},\"returns\":{\"amount0\":\"The amount of token0\",\"amount1\":\"The amount of token1\",\"liquidity\":\"The amount of liquidity for this position\",\"tokenId\":\"The ID of the token that represents the minted position\"}},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"permit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp by which the call must be mined for the approve to work\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"spender\":\"The account that is being approved\",\"tokenId\":\"The ID of the token that is being approved for spending\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"positions(uint256)\":{\"details\":\"Throws if the token ID is not valid.\",\"params\":{\"tokenId\":\"The ID of the token that represents the position\"},\"returns\":{\"fee\":\"The fee associated with the pool\",\"feeGrowthInside0LastX128\":\"The fee growth of token0 as of the last action on the individual position\",\"feeGrowthInside1LastX128\":\"The fee growth of token1 as of the last action on the individual position\",\"liquidity\":\"The liquidity of the position\",\"nonce\":\"The nonce for permits\",\"operator\":\"The address that is approved for spending\",\"tickLower\":\"The lower end of the tick range for the position\",\"tickUpper\":\"The higher end of the tick range for the position\",\"token0\":\"The address of the token0 for a specific pool\",\"token1\":\"The address of the token1 for a specific pool\",\"tokensOwed0\":\"The uncollected amount of token0 owed to the position as of the last computation\",\"tokensOwed1\":\"The uncollected amount of token1 owed to the position as of the last computation\"}},\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenByIndex(uint256)\":{\"details\":\"Returns a token ID at a given `index` of all the tokens stored by the contract. Use along with {totalSupply} to enumerate all tokens.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"Returns a token ID owned by `owner` at a given `index` of its token list. Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"totalSupply()\":{\"details\":\"Returns the total amount of tokens stored by the contract.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}}},\"title\":\"Non-fungible token for positions\",\"version\":1},\"userdoc\":{\"events\":{\"Collect(uint256,address,uint256,uint256)\":{\"notice\":\"Emitted when tokens are collected for a position NFT\"},\"DecreaseLiquidity(uint256,uint128,uint256,uint256)\":{\"notice\":\"Emitted when liquidity is decreased for a position NFT\"},\"IncreaseLiquidity(uint256,uint128,uint256,uint256)\":{\"notice\":\"Emitted when liquidity is increased for a position NFT\"}},\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"The domain separator used in the permit signature\"},\"PERMIT_TYPEHASH()\":{\"notice\":\"The permit typehash used in the permit signature\"},\"burn(uint256)\":{\"notice\":\"Burns a token ID, which deletes it from the NFT contract. The token must have 0 liquidity and all tokens must be collected first.\"},\"collect((uint256,address,uint128,uint128))\":{\"notice\":\"Collects up to a maximum amount of fees owed to a specific position to the recipient\"},\"createAndInitializePoolIfNecessary(address,address,uint24,uint160)\":{\"notice\":\"Creates a new pool if it does not exist, then initializes if not initialized\"},\"decreaseLiquidity((uint256,uint128,uint256,uint256,uint256))\":{\"notice\":\"Decreases the amount of liquidity in a position and accounts it to the position\"},\"increaseLiquidity((uint256,uint256,uint256,uint256,uint256,uint256))\":{\"notice\":\"Increases the amount of liquidity in a position, with tokens paid by the `msg.sender`\"},\"mint((address,address,uint24,int24,int24,uint256,uint256,uint256,uint256,address,uint256))\":{\"notice\":\"Creates a new position wrapped in a NFT\"},\"permit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Approve of a specific token ID for spending by spender via signature\"},\"positions(uint256)\":{\"notice\":\"Returns the position information associated with a given token ID.\"},\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"}},\"notice\":\"Wraps AstraDEX CL positions in a non-fungible token interface which allows for them to be transferred and authorized.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol\":\"INonfungiblePositionManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IERC721Permit.sol\":{\"keccak256\":\"0x383d39a13ce10019d4ebd27a694d085c03a1498a1cc31ec1511fac91b5296342\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3d22d9cc7a33829bd31da42d96bd75401a675ef32c8eb4d9e3074c21ec1241b6\",\"dweb:/ipfs/QmNrvD2T3k3wH5kWz6Kss9mSjxdJhXAA6NTH1Evj8j3k6A\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol\":{\"keccak256\":\"0x920448f826d2d8e40aae06ce855644abac394c085a769605399d80cb36bde27f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6b299cd039cf1fb92c9c58f666dfbb2753431f3904bed659ddd653ad9a503045\",\"dweb:/ipfs/QmZWb11WyJgGCW35e2opF3Ncstu59krJCDPAZpHWU9rqix\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPoolInitializer.sol\":{\"keccak256\":\"0x5d9b76c0eed9d836f8ab1d65a37921c56c46a69802f28c312f239ce159634473\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ab60ec035cd2f600d7e89828bcf1427a674defdcb4c511679144aae42273ba2d\",\"dweb:/ipfs/QmYWy2dAG2Mq4BUwybjVCbGtXYRG8Lz1jRfK6L924YuwRa\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xd2f30fad5b24c4120f96dbac83aacdb7993ee610a9092bc23c44463da292bf8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3d4e72409e392c7694b6405a0136cf073d8da016df33ef8f9ad195f724ebfea\",\"dweb:/ipfs/QmPGcddKq6CgsiKnxUUif2q76wRqP3dmdQ6bKuHCLmb8Wa\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xb11597841d47f7a773bca63ca323c76f804cb5d944788de0327db5526319dc82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://930d2da1934886a1098753be4173dd89c45ca0b306a1930accd37e00b1af4aaf\",\"dweb:/ipfs/QmVSXnvEV41d43k8cfpANHoTYMKgBDBL8iCbxkLfEtQZBe\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol\":{\"keccak256\":\"0x2789dfea2d73182683d637db5729201f6730dae6113030a94c828f8688f38f2f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36374eaa68c0737bf7e1ae13d55327b4868fb0825e971ee729f4b8d355ededb4\",\"dweb:/ipfs/QmYN9yuzz4P5SumiT6rgYgTEY8MhnPQapMwx2LHxRKju7r\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0xc82c7d1d732081d9bd23f1555ebdf8f3bc1738bc42c2bfc4b9aa7564d9fa3573\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb07e4ff3352161510a0d1536fe93f3c62526358e073a8bab2a8abbb27d0da1\",\"dweb:/ipfs/QmX7K1JjnWKT1JzZT92Qx5zNJQYbssE533TLFHP88hj2fb\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol": {
        "IPeripheryImmutableState": {
          "abi": [
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "factory()": "c45a0155"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"SAMB()\":{\"returns\":{\"_0\":\"Returns the address of SAMB\"}},\"factory()\":{\"returns\":{\"_0\":\"Returns the address of the AstraDEX CL factory\"}}},\"title\":\"Immutable state\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Functions that return immutable state of the router\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":\"IPeripheryImmutableState\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol": {
        "IPeripheryPayments": {
          "abi": [
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "refundAMB()": "c53af304",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "unwrapSAMB(uint256,address)": "a98ce37f"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}}},\"title\":\"Periphery Payments\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"}},\"notice\":\"Functions to ease deposits and withdrawals of AMB\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":\"IPeripheryPayments\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol": {
        "IPeripheryPaymentsWithFee": {
          "abi": [
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "refundAMB()": "c53af304",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "sweepTokenWithFee(address,uint256,address,uint256,address)": "e0e189a0",
              "unwrapSAMB(uint256,address)": "a98ce37f",
              "unwrapSAMBWithFee(uint256,address,uint256,address)": "97e87d9d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"}},\"title\":\"Periphery Payments\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"}},\"notice\":\"Functions to ease deposits and withdrawals of AMB\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol\":\"IPeripheryPaymentsWithFee\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x95eb2970f74b59074666d156779b7eeb1a34228476ac26f987f6f563b834098d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bd17994291ec4231d4fa66af52e0cfd4f7883365ecb41f534acf08afffa8806d\",\"dweb:/ipfs/QmUjst3v8zu8DE9Ue3YHJJoRLcZGd9CXP3jVoC2tSAUjs9\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPoolInitializer.sol": {
        "IPoolInitializer": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token0",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token1",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "fee",
                  "type": "uint24"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                }
              ],
              "name": "createAndInitializePoolIfNecessary",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "createAndInitializePoolIfNecessary(address,address,uint24,uint160)": "13ead562"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"createAndInitializePoolIfNecessary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"createAndInitializePoolIfNecessary(address,address,uint24,uint160)\":{\"details\":\"This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool\",\"params\":{\"fee\":\"The fee amount of the CL pool for the specified token pair\",\"sqrtPriceX96\":\"The initial square root price of the pool as a Q64.96 value\",\"token0\":\"The contract address of token0 of the pool\",\"token1\":\"The contract address of token1 of the pool\"},\"returns\":{\"pool\":\"Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary\"}}},\"title\":\"Creates and initializes CL Pools\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"createAndInitializePoolIfNecessary(address,address,uint24,uint160)\":{\"notice\":\"Creates a new pool if it does not exist, then initializes if not initialized\"}},\"notice\":\"Provides a method for creating and initializing a pool, if necessary, for bundling with other methods that require the pool to exist.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IPoolInitializer.sol\":\"IPoolInitializer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IPoolInitializer.sol\":{\"keccak256\":\"0x5d9b76c0eed9d836f8ab1d65a37921c56c46a69802f28c312f239ce159634473\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ab60ec035cd2f600d7e89828bcf1427a674defdcb4c511679144aae42273ba2d\",\"dweb:/ipfs/QmYWy2dAG2Mq4BUwybjVCbGtXYRG8Lz1jRfK6L924YuwRa\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol": {
        "ISelfPermit": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermit",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitAllowed",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitAllowedIfNecessary",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitIfNecessary",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)": "f3995c67",
              "selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)": "4659a494",
              "selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)": "a4a78f0c",
              "selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)": "c2e3140a"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitAllowed\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitAllowedIfNecessary\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitIfNecessary\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this).\",\"params\":{\"deadline\":\"A timestamp, the current blocktime must be less than or equal to this timestamp\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\",\"value\":\"The amount that can be spent of token\"}},\"selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this)\",\"params\":{\"expiry\":\"The timestamp at which the permit is no longer valid\",\"nonce\":\"The current nonce of the owner\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this) Can be used instead of #selfPermitAllowed to prevent calls from failing due to a frontrun of a call to #selfPermitAllowed.\",\"params\":{\"expiry\":\"The timestamp at which the permit is no longer valid\",\"nonce\":\"The current nonce of the owner\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this). Can be used instead of #selfPermit to prevent calls from failing due to a frontrun of a call to #selfPermit\",\"params\":{\"deadline\":\"A timestamp, the current blocktime must be less than or equal to this timestamp\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\",\"value\":\"The amount that can be spent of token\"}}},\"title\":\"Self Permit\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend a given token from `msg.sender`\"},\"selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\"},\"selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\"},\"selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend a given token from `msg.sender`\"}},\"notice\":\"Functionality to call permit on any EIP-2612-compliant token for use in the route\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol\":\"ISelfPermit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol\":{\"keccak256\":\"0x402d04301ffd41853f4949a574b8853c46d076910ed734f5e4478bf64369a3ed\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6a5536d179ff3777920ff8ed60cfc457f7a4dda1373c8f0394b2a8e0fe537525\",\"dweb:/ipfs/QmdaYGikTmmi2vbECnoomZ8vS8PBiD4Bq8BoFCYqFZmKgR\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol": {
        "IERC20PermitAllowed": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "holder",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "permit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32)": "8fcbaf0c"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32)\":{\"details\":\"This is the permit interface used by DAI and CHAI\",\"params\":{\"allowed\":\"Boolean that sets approval amount, true for type(uint256).max and false for 0\",\"expiry\":\"The timestamp at which the permit is no longer valid\",\"holder\":\"The address of the token holder, the token owner\",\"nonce\":\"The holder's nonce, increases at each call to permit\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"spender\":\"The address of the token spender\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}}},\"title\":\"Interface for permit\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32)\":{\"notice\":\"Approve the spender to spend some tokens via the holder signature\"}},\"notice\":\"Interface used by DAI/CHAI for permit\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol\":\"IERC20PermitAllowed\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol\":{\"keccak256\":\"0x8c4c1b8e724e0a78cb691d703dd37cd91b8bd6600537fb227807a194025a792d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://783be851155842a02cdb0483c3a69ecc0e7ae8545f65cec1d4aeb355b2026a7d\",\"dweb:/ipfs/QmZNBQosTjpGNKB3Eo2K6Zzye7FYiLVoEki5iPB2Y69jz2\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol": {
        "ISAMB": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "deposit",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "deposit()": "d0e30db0",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "withdraw(uint256)": "2e1a7d4d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"title\":\"Interface for SAMB\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deposit()\":{\"notice\":\"Deposit ether to get wrapped ether\"},\"withdraw(uint256)\":{\"notice\":\"Withdraw wrapped ether to get ether\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol\":\"ISAMB\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol\":{\"keccak256\":\"0x5b5789677c6b7e447fd774a5c065d9547c85f22e950e18690f686a6b779d78dc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c2e45681c8d5c704fbfef7369ff7878e6af2d987ba564eb97148ee6e8db87e49\",\"dweb:/ipfs/Qmeg4ynPmWipSVb6BRj4o8uZRbE2bQk8nCwp9apMAEq8Xk\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol": {
        "BytesLib": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "376:3627:31:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "376:3627:31:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol\":\"BytesLib\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol\":{\"keccak256\":\"0xed1b8acd0184eb321d5f4b5c2576608d1c12f5db1bb72d950054438f7f1946a6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f55d6aca86dcf1f1ab6413f48964f821306a29914c2117c16f20446faa5d6d0a\",\"dweb:/ipfs/QmWKbbg6kA9kkPVrCh6hJMnPhK1NhuVoHEd9s3vmYWsvTa\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol": {
        "CallbackValidation": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "291:1228:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "291:1228:32:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Provides validation for callbacks from AstraDEX CL Pools\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol\":\"CallbackValidation\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol\":{\"keccak256\":\"0xf21a3d7e2bc14386ce7b072b124b580df53441a32591770845860e8947f942d0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6941e21d9bc52bddc65079c5e7bc9d6ffd6553f6ed7f3d3b340996a55115b46f\",\"dweb:/ipfs/QmaDJ9uafahho77WP5izBCRL4W3mVM7NFL5q5QR5YvAC3A\"]},\"@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0xdd82100913bcb7c490e9e6912ab33994bd97d5a59e67209826ebf917bc8271c1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ecfc24c77d80aa718604d8a2c4d59460b76b5fd567d15206414e3838dd6698b7\",\"dweb:/ipfs/QmVtUC9dnade4RkzXaSqEFdAkiEftJ777jmT619LX2VLGv\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol": {
        "OracleLibrary": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "528:8941:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "528:8941:33:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Oracle library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Provides functions to integrate with CL pool oracle\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol\":\"OracleLibrary\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"@airdao/astra-cl-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x5340256039418f5d03512a44173d3dcf1da277a73a461e06fb5668f49cfc46f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75dee99795d1125875233a7f1d356935099cc97b4085c0e451060d77db85d144\",\"dweb:/ipfs/QmTGqyrxVLQd8TBaarqSQDiYvq1QFutCdmTyXk6JpxzKTN\"]},\"@airdao/astra-cl-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xe22d07f1ebf9c8468c81cb6905bfc8f8a54fa2f9b4a50742202a47cdbcb5af80\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d4773ca5008d2a2f496370695942c8ba3d6e1d487adbf5cda1149da12e3a6268\",\"dweb:/ipfs/QmcPYTLpEWfU8e3KAYBfHH7uYR4tGAkvnWrWS1CG8EkyLC\"]},\"@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol\":{\"keccak256\":\"0xf9dab1f6ac5c82c1a19688e900ab355a266e85af4f76346db925789352081c31\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1ba91097b8fdd8a46d9b837e7a80f8e3ccdaeb3d49870c6558b88d5064abdfce\",\"dweb:/ipfs/QmaocoW3nkgMSZjTLXm15ERTPN2yFLMAWE114s1R99hgrS\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/libraries/Path.sol": {
        "Path": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "164:2548:34:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "164:2548:34:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ADDR_SIZE\":{\"details\":\"The length of the bytes encoded address\"},\"FEE_SIZE\":{\"details\":\"The length of the bytes encoded fee\"},\"MULTIPLE_POOLS_MIN_LENGTH\":{\"details\":\"The minimum length of an encoding that contains 2 or more pools\"},\"NEXT_OFFSET\":{\"details\":\"The offset of a single token address and pool fee\"},\"POP_OFFSET\":{\"details\":\"The offset of an encoded pool key\"}},\"title\":\"Functions for manipulating path data for multihop swaps\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/libraries/Path.sol\":\"Path\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol\":{\"keccak256\":\"0xed1b8acd0184eb321d5f4b5c2576608d1c12f5db1bb72d950054438f7f1946a6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f55d6aca86dcf1f1ab6413f48964f821306a29914c2117c16f20446faa5d6d0a\",\"dweb:/ipfs/QmWKbbg6kA9kkPVrCh6hJMnPhK1NhuVoHEd9s3vmYWsvTa\"]},\"@airdao/astra-cl-periphery/contracts/libraries/Path.sol\":{\"keccak256\":\"0x0a6928608f48763796089e22dfc02a462cce63bb7727663961b3ed8c4f3eb862\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73bb4f107faf873db8700ce8950d2c4c88d41e0e1716da599bb733ad884f95eb\",\"dweb:/ipfs/QmZXSaPVpgDXpkKqYRdByJ3UXaMV2ATkr7V72nRZij8wmB\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol": {
        "PoolAddress": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "167:1623:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "167:1623:35:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Provides functions for deriving a pool address from the factory, tokens, and the fee\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol\":\"PoolAddress\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0xdd82100913bcb7c490e9e6912ab33994bd97d5a59e67209826ebf917bc8271c1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ecfc24c77d80aa718604d8a2c4d59460b76b5fd567d15206414e3838dd6698b7\",\"dweb:/ipfs/QmVtUC9dnade4RkzXaSqEFdAkiEftJ777jmT619LX2VLGv\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol": {
        "TransferHelper": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "129:2320:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "129:2320:36:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol\":\"TransferHelper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x0fef3409a5a161cd12b777fdfa86845d64b86f72c78b8312c9e3c92f9017e5c5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c9df2c76e4581a1d343ea1dd1d0478df7f1c1eef1b476ccea452367ef5b75e65\",\"dweb:/ipfs/QmWZVBRQcn4ekrmCDFkM4BSRAZ1m72GHzUnfzUn39PwQow\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol": {
        "IAstraCallee": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "astraCall",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "astraCall(address,uint256,uint256,bytes)": "ee906f6b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"astraCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol\":\"IAstraCallee\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol\":{\"keccak256\":\"0xf5d820076bb4d5760e8e8370c9527a2b2f41e890abbfd3f33dd84081bc75eaf4\",\"urls\":[\"bzz-raw://802e26558411dccbe8f716957fa42d240edb1b7750fab48c844179c2a5e42ff0\",\"dweb:/ipfs/QmacHZo2nvJWxD9tbfmNTf3keLAMH9QB5TXrSwhEFQiGpG\"]}},\"version\":1}"
        }
      },
      "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol": {
        "IAstraPair": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "Burn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Mint",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0In",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1In",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0Out",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1Out",
                  "type": "uint256"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "Swap",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint112",
                  "name": "reserve0",
                  "type": "uint112"
                },
                {
                  "indexed": false,
                  "internalType": "uint112",
                  "name": "reserve1",
                  "type": "uint112"
                }
              ],
              "name": "Sync",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "DOMAIN_SEPARATOR",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "MINIMUM_LIQUIDITY",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "PERMIT_TYPEHASH",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "burn",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getReserves",
              "outputs": [
                {
                  "internalType": "uint112",
                  "name": "reserve0",
                  "type": "uint112"
                },
                {
                  "internalType": "uint112",
                  "name": "reserve1",
                  "type": "uint112"
                },
                {
                  "internalType": "uint32",
                  "name": "blockTimestampLast",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "initialize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kLast",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "liquidity",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "nonces",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "permit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "price0CumulativeLast",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "price1CumulativeLast",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "skim",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0Out",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Out",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "swap",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "sync",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token0",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "DOMAIN_SEPARATOR()": "3644e515",
              "MINIMUM_LIQUIDITY()": "ba9a7a56",
              "PERMIT_TYPEHASH()": "30adf81f",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "burn(address)": "89afcb44",
              "decimals()": "313ce567",
              "factory()": "c45a0155",
              "getReserves()": "0902f1ac",
              "initialize(address,address)": "485cc955",
              "kLast()": "7464fc3d",
              "mint(address)": "6a627842",
              "name()": "06fdde03",
              "nonces(address)": "7ecebe00",
              "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
              "price0CumulativeLast()": "5909c0d5",
              "price1CumulativeLast()": "5a3d5493",
              "skim(address)": "bc25cf77",
              "swap(uint256,uint256,address,bytes)": "022c0d9f",
              "symbol()": "95d89b41",
              "sync()": "fff6cae9",
              "token0()": "0dfe1681",
              "token1()": "d21220a7",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"reserve0\",\"type\":\"uint112\"},{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"reserve1\",\"type\":\"uint112\"}],\"name\":\"Sync\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_LIQUIDITY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"reserve0\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"reserve1\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"blockTimestampLast\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"price0CumulativeLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"price1CumulativeLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"skim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sync\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol\":\"IAstraPair\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol\":{\"keccak256\":\"0xd2259aac0746706697d6e8097a48b592308fb1e1e78077cc3e0540234dee6648\",\"urls\":[\"bzz-raw://525ef590cf7e5c54030527703a7409b74c70497715aebf8dae0b877ee136dac7\",\"dweb:/ipfs/QmVgR4Pk3i8X8oS8xxNnVsFkDXXGP2wu4YvhG23e3z5K9q\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/cryptography/ECDSA.sol": {
        "ECDSA": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "264:3633:39:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "264:3633:39:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":\"ECDSA\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0xc80ce3fcc5e444a2c5bdb902fe4d4f4ecba04e9b416425697d00ae95c1955f82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a84a791d3dfe88a0dcc5b3b825e8375d0ed60c96067b5beb9e2f7dabb0afb0e6\",\"dweb:/ipfs/QmPWUkNDWJkNgEZp1WuAMKkd2XvkuZBcx8HTTTauaj837Y\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/drafts/EIP712.sol": {
        "EIP712": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in their contracts using a combination of `abi.encode` and `keccak256`. This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA ({_hashTypedDataV4}). The implementation of the domain separator was designed to be as efficient as possible while still properly updating the chain id to protect against replay attacks on an eventual fork of the chain. NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the domain separator and parameter caches. The meaning of `name` and `version` is specified in https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. - `version`: the current major version of the signing domain. NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart contract upgrade].\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/drafts/EIP712.sol\":\"EIP712\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/drafts/EIP712.sol\":{\"keccak256\":\"0xe4bc5cda2bfee483ff10334881c9ea5cc4df7faa7b18a5a4b8f02fc51cf8adca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0f0314cb3b722c5d221eeef6f5c050d4fd339bf7f2bf41c9304a62ff95bf33a\",\"dweb:/ipfs/QmVSBgT22SEY2mAkd8qNjsqTq8tciugToxbRzwPSSADPuJ\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/drafts/ERC20Permit.sol": {
        "ERC20Permit": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "DOMAIN_SEPARATOR",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "nonces",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "permit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "DOMAIN_SEPARATOR()": "3644e515",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "name()": "06fdde03",
              "nonces(address)": "7ecebe00",
              "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\\\"1\\\"`. It's a good idea to use the same `name` that is defined as the ERC20 token name.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/drafts/ERC20Permit.sol\":\"ERC20Permit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0xc80ce3fcc5e444a2c5bdb902fe4d4f4ecba04e9b416425697d00ae95c1955f82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a84a791d3dfe88a0dcc5b3b825e8375d0ed60c96067b5beb9e2f7dabb0afb0e6\",\"dweb:/ipfs/QmPWUkNDWJkNgEZp1WuAMKkd2XvkuZBcx8HTTTauaj837Y\"]},\"@openzeppelin/contracts/drafts/EIP712.sol\":{\"keccak256\":\"0xe4bc5cda2bfee483ff10334881c9ea5cc4df7faa7b18a5a4b8f02fc51cf8adca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0f0314cb3b722c5d221eeef6f5c050d4fd339bf7f2bf41c9304a62ff95bf33a\",\"dweb:/ipfs/QmVSBgT22SEY2mAkd8qNjsqTq8tciugToxbRzwPSSADPuJ\"]},\"@openzeppelin/contracts/drafts/ERC20Permit.sol\":{\"keccak256\":\"0x680c4b732f003b048d6a3cf227398d2f7f620eca779ab379662430adb6b19dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb8490d82756117d1ace222668f78756a1982deef7f4483d070fc37a1aeeb85c\",\"dweb:/ipfs/QmWv8kZ4y2joQ8iSe7Xc6ceULqns8TemtvW2j2KRsdryzD\"]},\"@openzeppelin/contracts/drafts/IERC20Permit.sol\":{\"keccak256\":\"0x1aab7754719ba764a8a05bec47e975001400f62986474945eb3dbee6d871259f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c14e8ff1b384bdb68f262669364b1e79fbbd82b85938b7ce788a1395c40c6a2\",\"dweb:/ipfs/QmUKLXfSeEuRUXkeWLBhjHTKeSFoNBCS1RaMXv1AmHXYzn\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xe22a1fc7400ae196eba2ad1562d0386462b00a6363b742d55a2fd2021a58586f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a635cec58fb4141a16cfd408f1a21ac944c335a3beaba541c35d2e95c04536f\",\"dweb:/ipfs/QmXWcz73UenN1ji8jiWMbzxHjjfLbNQwLVKTEB5zNFE34K\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x36b5ca4eabe888b39b10973621ca0dcc9b1508f8d06db9ddf045d7aa7c867d4a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccbd79e8d556aa7011babb0e5d1e55a966add74853e7ba0274ff184bd96ef002\",\"dweb:/ipfs/QmV28ozNRUFDiDUMvCwcFmLTQPG6nfvgeKr4cmbHWoegtH\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0x2424442932373c51391b31409f9620d1e1396c37f41ab9d82c51d69bebdd1ab5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcdf37ee59c10644338fbdfb3b7692125ff42003b34990eff8b04beedd89846f\",\"dweb:/ipfs/QmTMAvXQ4DoZbUSS3oBkNr2SddRPCTrE7DZNXrFArHnk8x\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/drafts/IERC20Permit.sol": {
        "IERC20Permit": {
          "abi": [
            {
              "inputs": [],
              "name": "DOMAIN_SEPARATOR",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "nonces",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "permit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "DOMAIN_SEPARATOR()": "3644e515",
              "nonces(address)": "7ecebe00",
              "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over `owner`'s tokens, given `owner`'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/drafts/IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/drafts/IERC20Permit.sol\":{\"keccak256\":\"0x1aab7754719ba764a8a05bec47e975001400f62986474945eb3dbee6d871259f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c14e8ff1b384bdb68f262669364b1e79fbbd82b85938b7ce788a1395c40c6a2\",\"dweb:/ipfs/QmUKLXfSeEuRUXkeWLBhjHTKeSFoNBCS1RaMXv1AmHXYzn\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/introspection/IERC165.sol": {
        "IERC165": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xd2f30fad5b24c4120f96dbac83aacdb7993ee610a9092bc23c44463da292bf8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3d4e72409e392c7694b6405a0136cf073d8da016df33ef8f9ad195f724ebfea\",\"dweb:/ipfs/QmPGcddKq6CgsiKnxUUif2q76wRqP3dmdQ6bKuHCLmb8Wa\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/math/SafeMath.sol": {
        "SafeMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "622:6594:44:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "622:6594:44:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xe22a1fc7400ae196eba2ad1562d0386462b00a6363b742d55a2fd2021a58586f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a635cec58fb4141a16cfd408f1a21ac944c335a3beaba541c35d2e95c04536f\",\"dweb:/ipfs/QmXWcz73UenN1ji8jiWMbzxHjjfLbNQwLVKTEB5zNFE34K\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC20/ERC20.sol": {
        "ERC20": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name_",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol_",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "60806040523480156200001157600080fd5b5060405162000e6e38038062000e6e833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060405250508251620001b491506003906020850190620001e0565b508051620001ca906004906020840190620001e0565b50506005805460ff19166012179055506200028c565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000218576000855562000263565b82601f106200023357805160ff191683800117855562000263565b8280016001018555821562000263579182015b828111156200026357825182559160200191906001019062000246565b506200027192915062000275565b5090565b5b8082111562000271576000815560010162000276565b610bd2806200029c6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610287578063a9059cbb146102c0578063dd62ed3e146102f9576100c9565b8063395093511461021357806370a082311461024c57806395d89b411461027f576100c9565b806318160ddd116100b257806318160ddd1461019857806323b872dd146101b2578063313ce567146101f5576100c9565b806306fdde03146100ce578063095ea7b31461014b575b600080fd5b6100d6610334565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101105781810151838201526020016100f8565b50505050905090810190601f16801561013d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101846004803603604081101561016157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356103e8565b604080519115158252519081900360200190f35b6101a0610405565b60408051918252519081900360200190f35b610184600480360360608110156101c857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561040b565b6101fd6104ac565b6040805160ff9092168252519081900360200190f35b6101846004803603604081101561022957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104b5565b6101a06004803603602081101561026257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610510565b6100d6610538565b6101846004803603604081101561029d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105b7565b610184600480360360408110156102d657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561062c565b6101a06004803603604081101561030f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610640565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b820191906000526020600020905b8154815290600101906020018083116103c157829003601f168201915b5050505050905090565b60006103fc6103f5610678565b848461067c565b50600192915050565b60025490565b60006104188484846107c3565b6104a284610424610678565b61049d85604051806060016040528060288152602001610b306028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526001602052604081209061046f610678565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610993565b61067c565b5060019392505050565b60055460ff1690565b60006103fc6104c2610678565b8461049d85600160006104d3610678565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c168152925290205490610a44565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b60006103fc6105c4610678565b8461049d85604051806060016040528060258152602001610ba160259139600160006105ee610678565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610993565b60006103fc610639610678565b84846107c3565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b3390565b73ffffffffffffffffffffffffffffffffffffffff83166106e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610b7d6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610754576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610ae86022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661082f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180610b586025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661089b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610ac56023913960400191505060405180910390fd5b6108a6838383610abf565b6108f081604051806060016040528060268152602001610b0a6026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610993565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220939093559084168152205461092c9082610a44565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610a3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a015781810151838201526020016109e9565b50505050905090810190601f168015610a2e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610ab857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xE6E CODESIZE SUB DUP1 PUSH3 0xE6E DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xB8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xE6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x16A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x150 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x198 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP DUP3 MLOAD PUSH3 0x1B4 SWAP2 POP PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x1E0 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x1CA SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x1E0 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH3 0x28C JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x218 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x263 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x233 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x263 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x263 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x263 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x246 JUMP JUMPDEST POP PUSH3 0x271 SWAP3 SWAP2 POP PUSH3 0x275 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x271 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x276 JUMP JUMPDEST PUSH2 0xBD2 DUP1 PUSH3 0x29C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2F9 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27F JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1F5 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x334 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x110 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A0 PUSH2 0x405 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x40B JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x4AC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4B5 JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x510 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5B7 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x62C JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x640 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3C1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FC PUSH2 0x3F5 PUSH2 0x678 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x67C JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x418 DUP5 DUP5 DUP5 PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x4A2 DUP5 PUSH2 0x424 PUSH2 0x678 JUMP JUMPDEST PUSH2 0x49D DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB30 PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x46F PUSH2 0x678 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x993 JUMP JUMPDEST PUSH2 0x67C JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FC PUSH2 0x4C2 PUSH2 0x678 JUMP JUMPDEST DUP5 PUSH2 0x49D DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x4D3 PUSH2 0x678 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0xA44 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FC PUSH2 0x5C4 PUSH2 0x678 JUMP JUMPDEST DUP5 PUSH2 0x49D DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBA1 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x5EE PUSH2 0x678 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x993 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FC PUSH2 0x639 PUSH2 0x678 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x7C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x6E8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB7D PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x754 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAE8 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x82F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB58 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x89B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAC5 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8A6 DUP4 DUP4 DUP4 PUSH2 0xABF JUMP JUMPDEST PUSH2 0x8F0 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB0A PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x993 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x92C SWAP1 DUP3 PUSH2 0xA44 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xA3C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA01 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9E9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xA2E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xAB8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA164736F PUSH13 0x6343000706000A000000000000 ",
              "sourceMap": "1313:9467:45:-:0;;;1950:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1950:138:45;;;;;;;;;;-1:-1:-1;1950:138:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1950:138:45;;;;;;;;;;-1:-1:-1;1950:138:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1950:138:45;;-1:-1:-1;;2017:13:45;;;;-1:-1:-1;2017:5:45;;:13;;;;;:::i;:::-;-1:-1:-1;2040:17:45;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2067:9:45;:14;;-1:-1:-1;;2067:14:45;2079:2;2067:14;;;-1:-1:-1;1313:9467:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1313:9467:45;;;-1:-1:-1;1313:9467:45;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610287578063a9059cbb146102c0578063dd62ed3e146102f9576100c9565b8063395093511461021357806370a082311461024c57806395d89b411461027f576100c9565b806318160ddd116100b257806318160ddd1461019857806323b872dd146101b2578063313ce567146101f5576100c9565b806306fdde03146100ce578063095ea7b31461014b575b600080fd5b6100d6610334565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101105781810151838201526020016100f8565b50505050905090810190601f16801561013d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101846004803603604081101561016157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356103e8565b604080519115158252519081900360200190f35b6101a0610405565b60408051918252519081900360200190f35b610184600480360360608110156101c857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561040b565b6101fd6104ac565b6040805160ff9092168252519081900360200190f35b6101846004803603604081101561022957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104b5565b6101a06004803603602081101561026257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610510565b6100d6610538565b6101846004803603604081101561029d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105b7565b610184600480360360408110156102d657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561062c565b6101a06004803603604081101561030f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610640565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b820191906000526020600020905b8154815290600101906020018083116103c157829003601f168201915b5050505050905090565b60006103fc6103f5610678565b848461067c565b50600192915050565b60025490565b60006104188484846107c3565b6104a284610424610678565b61049d85604051806060016040528060288152602001610b306028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526001602052604081209061046f610678565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610993565b61067c565b5060019392505050565b60055460ff1690565b60006103fc6104c2610678565b8461049d85600160006104d3610678565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c168152925290205490610a44565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b60006103fc6105c4610678565b8461049d85604051806060016040528060258152602001610ba160259139600160006105ee610678565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610993565b60006103fc610639610678565b84846107c3565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b3390565b73ffffffffffffffffffffffffffffffffffffffff83166106e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610b7d6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610754576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610ae86022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661082f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180610b586025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661089b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610ac56023913960400191505060405180910390fd5b6108a6838383610abf565b6108f081604051806060016040528060268152602001610b0a6026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610993565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220939093559084168152205461092c9082610a44565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610a3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a015781810151838201526020016109e9565b50505050905090810190601f168015610a2e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610ab857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2F9 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27F JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1F5 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x334 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x110 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A0 PUSH2 0x405 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x40B JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x4AC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4B5 JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x510 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5B7 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x62C JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x640 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3C1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FC PUSH2 0x3F5 PUSH2 0x678 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x67C JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x418 DUP5 DUP5 DUP5 PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x4A2 DUP5 PUSH2 0x424 PUSH2 0x678 JUMP JUMPDEST PUSH2 0x49D DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB30 PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x46F PUSH2 0x678 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x993 JUMP JUMPDEST PUSH2 0x67C JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FC PUSH2 0x4C2 PUSH2 0x678 JUMP JUMPDEST DUP5 PUSH2 0x49D DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x4D3 PUSH2 0x678 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0xA44 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FC PUSH2 0x5C4 PUSH2 0x678 JUMP JUMPDEST DUP5 PUSH2 0x49D DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBA1 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x5EE PUSH2 0x678 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x993 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FC PUSH2 0x639 PUSH2 0x678 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x7C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x6E8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB7D PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x754 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAE8 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x82F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB58 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x89B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAC5 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8A6 DUP4 DUP4 DUP4 PUSH2 0xABF JUMP JUMPDEST PUSH2 0x8F0 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB0A PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x993 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x92C SWAP1 DUP3 PUSH2 0xA44 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xA3C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA01 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9E9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xA2E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xAB8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA164736F PUSH13 0x6343000706000A000000000000 ",
              "sourceMap": "1313:9467:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2153:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4229:166;;;;;;;;;;;;;;;;-1:-1:-1;4229:166:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3220:106;;;:::i;:::-;;;;;;;;;;;;;;;;4862:317;;;;;;;;;;;;;;;;-1:-1:-1;4862:317:45;;;;;;;;;;;;;;;;;;:::i;3071:89::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5574:215;;;;;;;;;;;;;;;;-1:-1:-1;5574:215:45;;;;;;;;;:::i;3384:125::-;;;;;;;;;;;;;;;;-1:-1:-1;3384:125:45;;;;:::i;2355:93::-;;;:::i;6276:266::-;;;;;;;;;;;;;;;;-1:-1:-1;6276:266:45;;;;;;;;;:::i;3712:172::-;;;;;;;;;;;;;;;;-1:-1:-1;3712:172:45;;;;;;;;;:::i;3942:149::-;;;;;;;;;;;;;;;;-1:-1:-1;3942:149:45;;;;;;;;;;;:::i;2153:89::-;2230:5;2223:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2198:13;;2223:12;;2230:5;;2223:12;;2230:5;2223:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2153:89;:::o;4229:166::-;4312:4;4328:39;4337:12;:10;:12::i;:::-;4351:7;4360:6;4328:8;:39::i;:::-;-1:-1:-1;4384:4:45;4229:166;;;;:::o;3220:106::-;3307:12;;3220:106;:::o;4862:317::-;4968:4;4984:36;4994:6;5002:9;5013:6;4984:9;:36::i;:::-;5030:121;5039:6;5047:12;:10;:12::i;:::-;5061:89;5099:6;5061:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;5081:12;:10;:12::i;:::-;5061:33;;;;;;;;;;;;;-1:-1:-1;5061:33:45;;;:89;:37;:89::i;:::-;5030:8;:121::i;:::-;-1:-1:-1;5168:4:45;4862:317;;;;;:::o;3071:89::-;3144:9;;;;3071:89;:::o;5574:215::-;5662:4;5678:83;5687:12;:10;:12::i;:::-;5701:7;5710:50;5749:10;5710:11;:25;5722:12;:10;:12::i;:::-;5710:25;;;;;;;;;;;;;;;;;;-1:-1:-1;5710:25:45;;;:34;;;;;;;;;;;:38;:50::i;3384:125::-;3484:18;;3458:7;3484:18;;;;;;;;;;;;3384:125::o;2355:93::-;2434:7;2427:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2402:13;;2427:14;;2434:7;;2427:14;;2434:7;2427:14;;;;;;;;;;;;;;;;;;;;;;;;6276:266;6369:4;6385:129;6394:12;:10;:12::i;:::-;6408:7;6417:96;6456:15;6417:96;;;;;;;;;;;;;;;;;:11;:25;6429:12;:10;:12::i;:::-;6417:25;;;;;;;;;;;;;;;;;;-1:-1:-1;6417:25:45;;;:34;;;;;;;;;;;:96;:38;:96::i;3712:172::-;3798:4;3814:42;3824:12;:10;:12::i;:::-;3838:9;3849:6;3814:9;:42::i;3942:149::-;4057:18;;;;4031:7;4057:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3942:149::o;598:104:50:-;685:10;598:104;:::o;9340:340:45:-;9441:19;;;9433:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9519:21;;;9511:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9590:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9641:32;;;;;;;;;;;;;;;;;9340:340;;;:::o;7016:530::-;7121:20;;;7113:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7201:23;;;7193:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7275:47;7296:6;7304:9;7315:6;7275:20;:47::i;:::-;7353:71;7375:6;7353:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;7333:17;;;;:9;:17;;;;;;;;;;;:91;;;;7457:20;;;;;;;:32;;7482:6;7457:24;:32::i;:::-;7434:20;;;;:9;:20;;;;;;;;;;;;:55;;;;7504:35;;;;;;;7434:20;;7504:35;;;;;;;;;;;;;7016:530;;;:::o;5424:163:44:-;5510:7;5545:12;5537:6;;;;5529:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5575:5:44;;;5424:163::o;2682:175::-;2740:7;2771:5;;;2794:6;;;;2786:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2849:1;2682:175;-1:-1:-1;;;2682:175:44:o;10686:92:45:-;;;;:::o"
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xe22a1fc7400ae196eba2ad1562d0386462b00a6363b742d55a2fd2021a58586f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a635cec58fb4141a16cfd408f1a21ac944c335a3beaba541c35d2e95c04536f\",\"dweb:/ipfs/QmXWcz73UenN1ji8jiWMbzxHjjfLbNQwLVKTEB5zNFE34K\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x36b5ca4eabe888b39b10973621ca0dcc9b1508f8d06db9ddf045d7aa7c867d4a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccbd79e8d556aa7011babb0e5d1e55a966add74853e7ba0274ff184bd96ef002\",\"dweb:/ipfs/QmV28ozNRUFDiDUMvCwcFmLTQPG6nfvgeKr4cmbHWoegtH\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "IERC20": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "IERC721": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "_approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Required interface of an ERC721 compliant contract.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":\"IERC721\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xd2f30fad5b24c4120f96dbac83aacdb7993ee610a9092bc23c44463da292bf8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3d4e72409e392c7694b6405a0136cf073d8da016df33ef8f9ad195f724ebfea\",\"dweb:/ipfs/QmPGcddKq6CgsiKnxUUif2q76wRqP3dmdQ6bKuHCLmb8Wa\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xb11597841d47f7a773bca63ca323c76f804cb5d944788de0327db5526319dc82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://930d2da1934886a1098753be4173dd89c45ca0b306a1930accd37e00b1af4aaf\",\"dweb:/ipfs/QmVSXnvEV41d43k8cfpANHoTYMKgBDBL8iCbxkLfEtQZBe\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol": {
        "IERC721Enumerable": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "_approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "tokenByIndex",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "tokenOfOwnerByIndex",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "tokenByIndex(uint256)": "4f6ccce7",
              "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-721\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"tokenByIndex(uint256)\":{\"details\":\"Returns a token ID at a given `index` of all the tokens stored by the contract. Use along with {totalSupply} to enumerate all tokens.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"Returns a token ID owned by `owner` at a given `index` of its token list. Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\"},\"totalSupply()\":{\"details\":\"Returns the total amount of tokens stored by the contract.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"title\":\"ERC-721 Non-Fungible Token Standard, optional enumeration extension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol\":\"IERC721Enumerable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xd2f30fad5b24c4120f96dbac83aacdb7993ee610a9092bc23c44463da292bf8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3d4e72409e392c7694b6405a0136cf073d8da016df33ef8f9ad195f724ebfea\",\"dweb:/ipfs/QmPGcddKq6CgsiKnxUUif2q76wRqP3dmdQ6bKuHCLmb8Wa\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xb11597841d47f7a773bca63ca323c76f804cb5d944788de0327db5526319dc82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://930d2da1934886a1098753be4173dd89c45ca0b306a1930accd37e00b1af4aaf\",\"dweb:/ipfs/QmVSXnvEV41d43k8cfpANHoTYMKgBDBL8iCbxkLfEtQZBe\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol\":{\"keccak256\":\"0x2789dfea2d73182683d637db5729201f6730dae6113030a94c828f8688f38f2f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36374eaa68c0737bf7e1ae13d55327b4868fb0825e971ee729f4b8d355ededb4\",\"dweb:/ipfs/QmYN9yuzz4P5SumiT6rgYgTEY8MhnPQapMwx2LHxRKju7r\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol": {
        "IERC721Metadata": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "approved",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "_approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-721\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"title\":\"ERC-721 Non-Fungible Token Standard, optional metadata extension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\":\"IERC721Metadata\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xd2f30fad5b24c4120f96dbac83aacdb7993ee610a9092bc23c44463da292bf8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3d4e72409e392c7694b6405a0136cf073d8da016df33ef8f9ad195f724ebfea\",\"dweb:/ipfs/QmPGcddKq6CgsiKnxUUif2q76wRqP3dmdQ6bKuHCLmb8Wa\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xb11597841d47f7a773bca63ca323c76f804cb5d944788de0327db5526319dc82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://930d2da1934886a1098753be4173dd89c45ca0b306a1930accd37e00b1af4aaf\",\"dweb:/ipfs/QmVSXnvEV41d43k8cfpANHoTYMKgBDBL8iCbxkLfEtQZBe\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0xc82c7d1d732081d9bd23f1555ebdf8f3bc1738bc42c2bfc4b9aa7564d9fa3573\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb07e4ff3352161510a0d1536fe93f3c62526358e073a8bab2a8abbb27d0da1\",\"dweb:/ipfs/QmX7K1JjnWKT1JzZT92Qx5zNJQYbssE533TLFHP88hj2fb\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "Context": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Counters.sol": {
        "Counters": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "662:848:51:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "662:848:51:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Matt Condon (@shrugs)\",\"details\":\"Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number of elements in a mapping, issuing ERC721 ids, or counting request ids. Include with `using Counters for Counters.Counter;` Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath} overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never directly accessed.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Counters\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Counters.sol\":\"Counters\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xe22a1fc7400ae196eba2ad1562d0386462b00a6363b742d55a2fd2021a58586f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a635cec58fb4141a16cfd408f1a21ac944c335a3beaba541c35d2e95c04536f\",\"dweb:/ipfs/QmXWcz73UenN1ji8jiWMbzxHjjfLbNQwLVKTEB5zNFE34K\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0x2424442932373c51391b31409f9620d1e1396c37f41ab9d82c51d69bebdd1ab5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcdf37ee59c10644338fbdfb3b7692125ff42003b34990eff8b04beedd89846f\",\"dweb:/ipfs/QmTMAvXQ4DoZbUSS3oBkNr2SddRPCTrE7DZNXrFArHnk8x\"]}},\"version\":1}"
        }
      },
      "contracts/CLSwapRouter.sol": {
        "CLSwapRouter": {
          "abi": [
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "amount0Delta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1Delta",
                  "type": "int256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "type": "bytes"
                }
              ],
              "name": "astraCLSwapCallback",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "paths",
                  "type": "bytes[]"
                },
                {
                  "internalType": "uint128[]",
                  "name": "amounts",
                  "type": "uint128[]"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes",
                      "name": "path",
                      "type": "bytes"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOutMinimum",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactInputParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactInput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOutMinimum",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactInputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactInputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes",
                      "name": "path",
                      "type": "bytes"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOut",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountInMaximum",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactOutputParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactOutput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOut",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountInMaximum",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactOutputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactOutputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "pull",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "wrapAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "astraCLSwapCallback(int256,int256,bytes)": "11c17848",
              "checkOracleSlippage(bytes,uint24,uint32)": "f25801a7",
              "checkOracleSlippage(bytes[],uint128[],uint24,uint32)": "efdeed8e",
              "exactInput((bytes,address,uint256,uint256))": "b858183f",
              "exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))": "04e45aaf",
              "exactOutput((bytes,address,uint256,uint256))": "09b81346",
              "exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))": "5023b4df",
              "factory()": "c45a0155",
              "pull(address,uint256)": "f2d5d56b",
              "refundAMB()": "c53af304",
              "sweepToken(address,uint256)": "e90a182f",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "sweepTokenWithFee(address,uint256,address,uint256,address)": "e0e189a0",
              "sweepTokenWithFee(address,uint256,uint256,address)": "3068c554",
              "unwrapSAMB(uint256)": "acf8a4ed",
              "unwrapSAMB(uint256,address)": "a98ce37f",
              "unwrapSAMBWithFee(uint256,address,uint256,address)": "97e87d9d",
              "unwrapSAMBWithFee(uint256,uint256,address)": "bc122a54",
              "wrapAMB(uint256)": "e4a40545"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"astraCLSwapCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"paths\",\"type\":\"bytes[]\"},{\"internalType\":\"uint128[]\",\"name\":\"amounts\",\"type\":\"uint128[]\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"}],\"internalType\":\"struct ICLSwapRouter.ExactInputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ICLSwapRouter.ExactInputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"}],\"internalType\":\"struct ICLSwapRouter.ExactOutputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ICLSwapRouter.ExactOutputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"pull\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"wrapAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IAstraCLPoolActions#swap call\"}},\"checkOracleSlippage(bytes,uint24,uint32)\":{\"params\":{\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"path\":\"The path to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"params\":{\"amounts\":\"The weights for each entry in `paths`\",\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"paths\":\"The paths to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}},\"exactInput((bytes,address,uint256,uint256))\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactOutput((bytes,address,uint256,uint256))\":{\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}},\"pull(address,uint256)\":{\"params\":{\"token\":\"The token to pull\",\"value\":\"The amount to pay\"}},\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"sweepToken(address,uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"token\":\"The contract address of the token which will be transferred to msg.sender\"}},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"unwrapSAMB(uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\"}},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"wrapAMB(uint256)\":{\"details\":\"The resulting SAMB is custodied by the router, thus will require further distribution\",\"params\":{\"value\":\"The amount of AMB to wrap\"}}},\"stateVariables\":{\"DEFAULT_AMOUNT_IN_CACHED\":{\"details\":\"Used as the placeholder value for amountInCached, because the computed amount in for an exact output swap can never actually be this value\"},\"amountInCached\":{\"details\":\"Transient storage variable used for returning the computed amount in for an exact output swap.\"}},\"title\":\"Astra CL Swap Router\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\"},\"checkOracleSlippage(bytes,uint24,uint32)\":{\"notice\":\"Ensures that the current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"notice\":\"Ensures that the weighted average current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"},\"exactInput((bytes,address,uint256,uint256))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another along the specified path\"},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another token\"},\"exactOutput((bytes,address,uint256,uint256))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed) that may remain in the router after the swap.\"},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another token that may remain in the router after the swap.\"},\"pull(address,uint256)\":{\"notice\":\"Transfers the specified amount of a token from the msg.sender to address(this)\"},\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"sweepToken(address,uint256)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMB(uint256)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB.\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"wrapAMB(uint256)\":{\"notice\":\"Wraps the contract's AMB balance into SAMB\"}},\"notice\":\"Router for stateless execution of swaps against Astra CL\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/CLSwapRouter.sol\":\"CLSwapRouter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":{\"keccak256\":\"0xaa82f63f0c930e51d6aaae0d59e7bf3ef5b32371ac0549f6e07bfcab5b4dcb16\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73419af0b4f35f02c3b89d387d6ac46041637a7133e249de617103b7567bf4c4\",\"dweb:/ipfs/QmTfwEX1dCoUUUMaMFzDnqDcFXihHQnEG1fbkBFpidRs8o\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"@airdao/astra-cl-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x5340256039418f5d03512a44173d3dcf1da277a73a461e06fb5668f49cfc46f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75dee99795d1125875233a7f1d356935099cc97b4085c0e451060d77db85d144\",\"dweb:/ipfs/QmTGqyrxVLQd8TBaarqSQDiYvq1QFutCdmTyXk6JpxzKTN\"]},\"@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0x86715eb960f18e01ac94e3bba4614ed51a887fa3c5bd1c43bf80aa98e019cf2d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bfc1d5d58e59015086b0e65a6c3a2ddad312e2350480510f6c0c8167f3d71a37\",\"dweb:/ipfs/QmQndULYjFsHKHjMAKLMfc12vWbVB5FawtioHtvwcWRJZp\"]},\"@airdao/astra-cl-core/contracts/libraries/SafeCast.sol\":{\"keccak256\":\"0xd4c1c1b67f946b077d7c52a158113763a89a210fc2927b8491055a962ecd18c0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5344400c74320ca8dbe19241db7ff49babbd6c875c1b561c79d6e4315a9fb5f9\",\"dweb:/ipfs/QmRKCNTbkovxK1WvejXZr3iAHhGN97ZT1yWGsWCJFkrT5X\"]},\"@airdao/astra-cl-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xe22d07f1ebf9c8468c81cb6905bfc8f8a54fa2f9b4a50742202a47cdbcb5af80\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d4773ca5008d2a2f496370695942c8ba3d6e1d487adbf5cda1149da12e3a6268\",\"dweb:/ipfs/QmcPYTLpEWfU8e3KAYBfHH7uYR4tGAkvnWrWS1CG8EkyLC\"]},\"@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol\":{\"keccak256\":\"0x1aa66f71234064a0c0976f62233f2edbd69554e5ad817dc97f318bc8e11f4da6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b3a40450e9d6b0f9cb91b40ffd6215612505bd74e7d954529958f4edc6ee7b93\",\"dweb:/ipfs/QmewsUCHK5N5KhNtqEwK8JgsXFADyFBrQRS5HoDWM5gi3b\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol\":{\"keccak256\":\"0x88e12ecce0236f43cac955dee8ae50e8ffba7d133625ba18b590d51b9e030098\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9f10d1317582a91e7842901c6888c4bb28939817cefa3d3f88458c2ec653b6ed\",\"dweb:/ipfs/QmP2qV22Uq6Pou1VkgNzRnXHzNJ71CBpVBYhYDnLccBx8U\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x93f6d5b75cb4e7204ae63f45722eb82ac62f732d56cbf31f3a65ce2ea262cc6d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a23090fa2e584774818eeb9e548086b8c383acd9d35830845191fd114bfbf03b\",\"dweb:/ipfs/QmXr9EGVoUMCGttgsDFJZ5UBrBjY42qBV2FRakCDi8aeTs\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x95eb2970f74b59074666d156779b7eeb1a34228476ac26f987f6f563b834098d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bd17994291ec4231d4fa66af52e0cfd4f7883365ecb41f534acf08afffa8806d\",\"dweb:/ipfs/QmUjst3v8zu8DE9Ue3YHJJoRLcZGd9CXP3jVoC2tSAUjs9\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol\":{\"keccak256\":\"0x5b5789677c6b7e447fd774a5c065d9547c85f22e950e18690f686a6b779d78dc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c2e45681c8d5c704fbfef7369ff7878e6af2d987ba564eb97148ee6e8db87e49\",\"dweb:/ipfs/Qmeg4ynPmWipSVb6BRj4o8uZRbE2bQk8nCwp9apMAEq8Xk\"]},\"@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol\":{\"keccak256\":\"0xed1b8acd0184eb321d5f4b5c2576608d1c12f5db1bb72d950054438f7f1946a6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f55d6aca86dcf1f1ab6413f48964f821306a29914c2117c16f20446faa5d6d0a\",\"dweb:/ipfs/QmWKbbg6kA9kkPVrCh6hJMnPhK1NhuVoHEd9s3vmYWsvTa\"]},\"@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol\":{\"keccak256\":\"0xf21a3d7e2bc14386ce7b072b124b580df53441a32591770845860e8947f942d0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6941e21d9bc52bddc65079c5e7bc9d6ffd6553f6ed7f3d3b340996a55115b46f\",\"dweb:/ipfs/QmaDJ9uafahho77WP5izBCRL4W3mVM7NFL5q5QR5YvAC3A\"]},\"@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol\":{\"keccak256\":\"0xf9dab1f6ac5c82c1a19688e900ab355a266e85af4f76346db925789352081c31\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1ba91097b8fdd8a46d9b837e7a80f8e3ccdaeb3d49870c6558b88d5064abdfce\",\"dweb:/ipfs/QmaocoW3nkgMSZjTLXm15ERTPN2yFLMAWE114s1R99hgrS\"]},\"@airdao/astra-cl-periphery/contracts/libraries/Path.sol\":{\"keccak256\":\"0x0a6928608f48763796089e22dfc02a462cce63bb7727663961b3ed8c4f3eb862\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73bb4f107faf873db8700ce8950d2c4c88d41e0e1716da599bb733ad884f95eb\",\"dweb:/ipfs/QmZXSaPVpgDXpkKqYRdByJ3UXaMV2ATkr7V72nRZij8wmB\"]},\"@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0xdd82100913bcb7c490e9e6912ab33994bd97d5a59e67209826ebf917bc8271c1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ecfc24c77d80aa718604d8a2c4d59460b76b5fd567d15206414e3838dd6698b7\",\"dweb:/ipfs/QmVtUC9dnade4RkzXaSqEFdAkiEftJ777jmT619LX2VLGv\"]},\"@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x0fef3409a5a161cd12b777fdfa86845d64b86f72c78b8312c9e3c92f9017e5c5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c9df2c76e4581a1d343ea1dd1d0478df7f1c1eef1b476ccea452367ef5b75e65\",\"dweb:/ipfs/QmWZVBRQcn4ekrmCDFkM4BSRAZ1m72GHzUnfzUn39PwQow\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"contracts/CLSwapRouter.sol\":{\"keccak256\":\"0x030d790990bc095cf80ecb7d6b72cd3b04b0df1b6fcff874218d9e44f7dda6b8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://106cd65a78f0e3efd207074ff77e2959fe1273cb791dc6a3c8cfe2088c883b4a\",\"dweb:/ipfs/QmfKV4VMqshiJnaYbWAttPrZg1RUnq6qUNxJW9xQPpqNEb\"]},\"contracts/base/OracleSlippage.sol\":{\"keccak256\":\"0x07ac427a696edbfd94c4bed8effc35b0cdd58e03ef686b90cdb53595c192c735\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bdf770fc6939af09a7a804446d1d6ab9e230ff0255bb2922ae88778677071ecc\",\"dweb:/ipfs/QmYRaL4z9KFDtDTkehTXmfNMntPLxsjtAUPp5GoNELvdiK\"]},\"contracts/base/PeripheryPaymentsExtended.sol\":{\"keccak256\":\"0xf2685da6776cf0dc988436351c93f23087320cad14f6a0ff8a8f5fc37847dd99\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a9514e43dcb646ca0e6ddb628d8371f875c843a46307eee68ecf5f89c8cb09fd\",\"dweb:/ipfs/QmeDK6SA7MoZ2VZ1t4e44DbzW1EX7WXjfeNVvaxpzZ8DMh\"]},\"contracts/base/PeripheryPaymentsWithFeeExtended.sol\":{\"keccak256\":\"0x1c57739b3cb14b514f418301c59eac6a385d5d12bd0d674172e37b45abd540d2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5381be26637b6c2b2b6418a2cab3fd66165b472182d2b17474c7ecb0eb034fec\",\"dweb:/ipfs/QmRuNHixFfkVtHSsBih9LSFrqn9XtsbaqM6yRXC1YoHJEn\"]},\"contracts/interfaces/ICLSwapRouter.sol\":{\"keccak256\":\"0xf21791d14cb0fa67db54f04c322e294616240fef896fec0214be7aa196b767ad\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f3d1acf197037424a8e4901b64b4a35381d88ae361c09c5f3660ae59c5cac190\",\"dweb:/ipfs/QmaAHSbWfriiUsiiArgSiuJqw6s9BeP6Mfy3rZsoTzQoiL\"]},\"contracts/interfaces/IOracleSlippage.sol\":{\"keccak256\":\"0xa9d1e4336b20fa992ab6b742f2750b3fb660e0d667eac304c5bbd8a8ea96edfc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://afe7afc18f293b6bc189550f20c318ecccda37241409a031bc94cf7412420dbd\",\"dweb:/ipfs/QmVuiKox1K4Df5QS6RLHQDprYaDMXRRvHW3ym3NDdi3vrq\"]},\"contracts/interfaces/IPeripheryPaymentsExtended.sol\":{\"keccak256\":\"0x373eb395bc1f5b9c92fbdbdf676d12784c907e7253ea9f262621e8ae812e0938\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5b41980a17c8fc46d28a1eca9462ad3b07c1c2b0c547f3cb7ee63b1ca126b96f\",\"dweb:/ipfs/QmcVfvRiaxDA3MBdZECouvChaMzuqgRuPQTnn3raLEukYb\"]},\"contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol\":{\"keccak256\":\"0xfab1e04cf78e4769a60ddff118648cf7a50cd874d500265c315ee6e2d0ac733c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://711d79e27131b59f79d0b7c94eed61b0b08d61bca9066a921a4f47ebc0f3c76f\",\"dweb:/ipfs/QmTw4pADZp6vqygUMVThgMYx7LtT1jwVLM4NcZvPhjSvpT\"]},\"contracts/libraries/Constants.sol\":{\"keccak256\":\"0x6eeb0392bef0afeb03e18f0e2824a96e76e55282176ea8b64e14a0fba91c9bf2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7ed2216986be881a9924e6efb5f3848367d0fad8cc60c4eb1772791773fedc45\",\"dweb:/ipfs/QmemwuJYDGRheUQxtzxH6mV18xTBFYtVJK26DNtbSSaC9k\"]}},\"version\":1}"
        }
      },
      "contracts/ClassicSwapRouter.sol": {
        "ClassicSwapRouter": {
          "abi": [
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factoryClassic",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "positionManager",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "pull",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOutMin",
                  "type": "uint256"
                },
                {
                  "internalType": "address[]",
                  "name": "path",
                  "type": "address[]"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "swapExactTokensForTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountInMax",
                  "type": "uint256"
                },
                {
                  "internalType": "address[]",
                  "name": "path",
                  "type": "address[]"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "swapTokensForExactTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "wrapAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "factory()": "c45a0155",
              "factoryClassic()": "4f04a0db",
              "positionManager()": "791b98bc",
              "pull(address,uint256)": "f2d5d56b",
              "refundAMB()": "c53af304",
              "swapExactTokensForTokens(uint256,uint256,address[],address)": "472b43f3",
              "swapTokensForExactTokens(uint256,uint256,address[],address)": "42712a67",
              "sweepToken(address,uint256)": "e90a182f",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "sweepTokenWithFee(address,uint256,address,uint256,address)": "e0e189a0",
              "sweepTokenWithFee(address,uint256,uint256,address)": "3068c554",
              "unwrapSAMB(uint256)": "acf8a4ed",
              "unwrapSAMB(uint256,address)": "a98ce37f",
              "unwrapSAMBWithFee(uint256,address,uint256,address)": "97e87d9d",
              "unwrapSAMBWithFee(uint256,uint256,address)": "bc122a54",
              "wrapAMB(uint256)": "e4a40545"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factoryClassic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"positionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"pull\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMin\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"swapExactTokensForTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMax\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"swapTokensForExactTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"wrapAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"pull(address,uint256)\":{\"params\":{\"token\":\"The token to pull\",\"value\":\"The amount to pay\"}},\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"swapExactTokensForTokens(uint256,uint256,address[],address)\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"amountIn\":\"The amount of token to swap\",\"amountOutMin\":\"The minimum amount of output that must be received\",\"path\":\"The ordered list of tokens to swap through\",\"to\":\"The recipient address\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"swapTokensForExactTokens(uint256,uint256,address[],address)\":{\"params\":{\"amountInMax\":\"The maximum amount of input that the caller will pay\",\"amountOut\":\"The amount of token to swap for\",\"path\":\"The ordered list of tokens to swap through\",\"to\":\"The recipient address\"},\"returns\":{\"amountIn\":\"The amount of token to pay\"}},\"sweepToken(address,uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"token\":\"The contract address of the token which will be transferred to msg.sender\"}},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"unwrapSAMB(uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\"}},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"wrapAMB(uint256)\":{\"details\":\"The resulting SAMB is custodied by the router, thus will require further distribution\",\"params\":{\"value\":\"The amount of AMB to wrap\"}}},\"title\":\"Astra Classic Swap Router\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"pull(address,uint256)\":{\"notice\":\"Transfers the specified amount of a token from the msg.sender to address(this)\"},\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"swapExactTokensForTokens(uint256,uint256,address[],address)\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another token\"},\"swapTokensForExactTokens(uint256,uint256,address[],address)\":{\"notice\":\"Swaps as little as possible of one token for an exact amount of another token\"},\"sweepToken(address,uint256)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMB(uint256)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB.\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"wrapAMB(uint256)\":{\"notice\":\"Wraps the contract's AMB balance into SAMB\"}},\"notice\":\"Router for stateless execution of swaps against Astra Classic\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ClassicSwapRouter.sol\":\"ClassicSwapRouter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0x86715eb960f18e01ac94e3bba4614ed51a887fa3c5bd1c43bf80aa98e019cf2d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bfc1d5d58e59015086b0e65a6c3a2ddad312e2350480510f6c0c8167f3d71a37\",\"dweb:/ipfs/QmQndULYjFsHKHjMAKLMfc12vWbVB5FawtioHtvwcWRJZp\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol\":{\"keccak256\":\"0x88e12ecce0236f43cac955dee8ae50e8ffba7d133625ba18b590d51b9e030098\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9f10d1317582a91e7842901c6888c4bb28939817cefa3d3f88458c2ec653b6ed\",\"dweb:/ipfs/QmP2qV22Uq6Pou1VkgNzRnXHzNJ71CBpVBYhYDnLccBx8U\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x93f6d5b75cb4e7204ae63f45722eb82ac62f732d56cbf31f3a65ce2ea262cc6d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a23090fa2e584774818eeb9e548086b8c383acd9d35830845191fd114bfbf03b\",\"dweb:/ipfs/QmXr9EGVoUMCGttgsDFJZ5UBrBjY42qBV2FRakCDi8aeTs\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x95eb2970f74b59074666d156779b7eeb1a34228476ac26f987f6f563b834098d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bd17994291ec4231d4fa66af52e0cfd4f7883365ecb41f534acf08afffa8806d\",\"dweb:/ipfs/QmUjst3v8zu8DE9Ue3YHJJoRLcZGd9CXP3jVoC2tSAUjs9\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol\":{\"keccak256\":\"0x5b5789677c6b7e447fd774a5c065d9547c85f22e950e18690f686a6b779d78dc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c2e45681c8d5c704fbfef7369ff7878e6af2d987ba564eb97148ee6e8db87e49\",\"dweb:/ipfs/Qmeg4ynPmWipSVb6BRj4o8uZRbE2bQk8nCwp9apMAEq8Xk\"]},\"@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x0fef3409a5a161cd12b777fdfa86845d64b86f72c78b8312c9e3c92f9017e5c5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c9df2c76e4581a1d343ea1dd1d0478df7f1c1eef1b476ccea452367ef5b75e65\",\"dweb:/ipfs/QmWZVBRQcn4ekrmCDFkM4BSRAZ1m72GHzUnfzUn39PwQow\"]},\"@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol\":{\"keccak256\":\"0xd2259aac0746706697d6e8097a48b592308fb1e1e78077cc3e0540234dee6648\",\"urls\":[\"bzz-raw://525ef590cf7e5c54030527703a7409b74c70497715aebf8dae0b877ee136dac7\",\"dweb:/ipfs/QmVgR4Pk3i8X8oS8xxNnVsFkDXXGP2wu4YvhG23e3z5K9q\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"contracts/ClassicSwapRouter.sol\":{\"keccak256\":\"0xf9fb7f5d64b4f11e961de711759194b868544e3fb5784c743528e3b26a1e7e8d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://075bc67a2a15ca7e3708df20b351d763779a40b01ef22d6836aec827cc9b9eef\",\"dweb:/ipfs/QmeiSdGNmoAorUzhw91rzQwhmRvQ5JPCPNejeX6jk9w2ab\"]},\"contracts/base/ImmutableState.sol\":{\"keccak256\":\"0xa52c8265326bed23bab067cfaf4a260d12a1b653618920534bb3e6d65c51e047\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1579ffa9db15cb07f0dfc0947feaee663c992455ba719373ac358254aad879ca\",\"dweb:/ipfs/QmSyStKaiERPMswqVFsn37CAGanBoTYNA6FUVWyZr9xDtK\"]},\"contracts/base/PeripheryPaymentsExtended.sol\":{\"keccak256\":\"0xf2685da6776cf0dc988436351c93f23087320cad14f6a0ff8a8f5fc37847dd99\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a9514e43dcb646ca0e6ddb628d8371f875c843a46307eee68ecf5f89c8cb09fd\",\"dweb:/ipfs/QmeDK6SA7MoZ2VZ1t4e44DbzW1EX7WXjfeNVvaxpzZ8DMh\"]},\"contracts/base/PeripheryPaymentsWithFeeExtended.sol\":{\"keccak256\":\"0x1c57739b3cb14b514f418301c59eac6a385d5d12bd0d674172e37b45abd540d2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5381be26637b6c2b2b6418a2cab3fd66165b472182d2b17474c7ecb0eb034fec\",\"dweb:/ipfs/QmRuNHixFfkVtHSsBih9LSFrqn9XtsbaqM6yRXC1YoHJEn\"]},\"contracts/interfaces/IClassicSwapRouter.sol\":{\"keccak256\":\"0x5b35aa4bb97961db53c1f178c034c40a9ae4ce2606356b06620b918a5f91ae5a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8e63d5f61b1b28deddeddc89da42e85429966732a661bd53738ca6fb1a478d15\",\"dweb:/ipfs/QmVX5sjGijDfGFNP767L4rtsiL5DC84yJSfUpWiwJN84CP\"]},\"contracts/interfaces/IImmutableState.sol\":{\"keccak256\":\"0x25fee5bdbdbbb57ffb91c3ab66b9c2db351e7f6061ad2f98ef2991f6b27a15e0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7bf237158fbcfabf64bb0da5c7ff0b0161ed76c45c7197ecc5ac54b338786bfc\",\"dweb:/ipfs/QmT74A24bW9qu1dJUxPQLaqLBnSe57PVgfUJxpu3sEf9fg\"]},\"contracts/interfaces/IPeripheryPaymentsExtended.sol\":{\"keccak256\":\"0x373eb395bc1f5b9c92fbdbdf676d12784c907e7253ea9f262621e8ae812e0938\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5b41980a17c8fc46d28a1eca9462ad3b07c1c2b0c547f3cb7ee63b1ca126b96f\",\"dweb:/ipfs/QmcVfvRiaxDA3MBdZECouvChaMzuqgRuPQTnn3raLEukYb\"]},\"contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol\":{\"keccak256\":\"0xfab1e04cf78e4769a60ddff118648cf7a50cd874d500265c315ee6e2d0ac733c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://711d79e27131b59f79d0b7c94eed61b0b08d61bca9066a921a4f47ebc0f3c76f\",\"dweb:/ipfs/QmTw4pADZp6vqygUMVThgMYx7LtT1jwVLM4NcZvPhjSvpT\"]},\"contracts/libraries/AstraClassicLibrary.sol\":{\"keccak256\":\"0xa0206fe7bc64db0582ab194bf47755b617a204e7e7768593968f9c6e7e7e5d87\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://be4c4afea9bef22f244b7ed926651026515c385410fb469876eff92a21548036\",\"dweb:/ipfs/QmeqP6cPs2igCKpQsA7D8sUiniJtTGXRx5K3rc3XAbVWL3\"]},\"contracts/libraries/Constants.sol\":{\"keccak256\":\"0x6eeb0392bef0afeb03e18f0e2824a96e76e55282176ea8b64e14a0fba91c9bf2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7ed2216986be881a9924e6efb5f3848367d0fad8cc60c4eb1772791773fedc45\",\"dweb:/ipfs/QmemwuJYDGRheUQxtzxH6mV18xTBFYtVJK26DNtbSSaC9k\"]}},\"version\":1}"
        }
      },
      "contracts/SwapRouter02.sol": {
        "SwapRouter02": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_factoryClassic",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "factoryCL",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_positionManager",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_SAMB",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveMax",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveMaxMinusOne",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveZeroThenMax",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveZeroThenMaxMinusOne",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "amount0Delta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1Delta",
                  "type": "int256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "type": "bytes"
                }
              ],
              "name": "astraCLSwapCallback",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "callPositionManager",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "paths",
                  "type": "bytes[]"
                },
                {
                  "internalType": "uint128[]",
                  "name": "amounts",
                  "type": "uint128[]"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes",
                      "name": "path",
                      "type": "bytes"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOutMinimum",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactInputParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactInput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOutMinimum",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactInputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactInputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes",
                      "name": "path",
                      "type": "bytes"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOut",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountInMaximum",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactOutputParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactOutput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOut",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountInMaximum",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactOutputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactOutputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factoryClassic",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "getApprovalType",
              "outputs": [
                {
                  "internalType": "enum IApproveAndCall.ApprovalType",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token0",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "token1",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IApproveAndCall.IncreaseLiquidityParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "increaseLiquidity",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token0",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "token1",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickLower",
                      "type": "int24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickUpper",
                      "type": "int24"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct IApproveAndCall.MintParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "previousBlockhash",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "positionManager",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "pull",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermit",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitAllowed",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitAllowedIfNecessary",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitIfNecessary",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOutMin",
                  "type": "uint256"
                },
                {
                  "internalType": "address[]",
                  "name": "path",
                  "type": "address[]"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "swapExactTokensForTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountInMax",
                  "type": "uint256"
                },
                {
                  "internalType": "address[]",
                  "name": "path",
                  "type": "address[]"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "swapTokensForExactTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "wrapAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:682:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "76:117:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "86:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "101:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "95:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "95:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "86:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "171:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "180:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "183:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "173:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "173:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "173:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "130:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "141:5:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "156:3:89",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "161:1:89",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "152:3:89"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "152:11:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "165:1:89",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "148:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "148:19:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "137:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "137:31:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "127:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "127:42:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "120:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "120:50:89"
                              },
                              "nodeType": "YulIf",
                              "src": "117:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "55:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "66:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:179:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "330:350:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "377:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "386:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "394:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "379:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "379:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "379:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "351:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "360:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "347:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "347:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "372:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "340:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "412:52:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "454:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "422:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "422:42:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "412:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "473:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "519:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "530:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "515:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "515:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "473:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "543:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "589:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "600:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "585:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "585:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "553:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "553:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "543:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "613:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "659:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "670:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "655:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "655:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "623:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "623:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "613:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "272:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "283:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "295:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "303:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "311:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "319:6:89",
                            "type": ""
                          }
                        ],
                        "src": "198:482:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value0, value0) }\n        value0 := abi_decode_t_address_fromMemory(headStart)\n        value1 := abi_decode_t_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_t_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_t_address_fromMemory(add(headStart, 96))\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "6101006040526000196000553480156200001857600080fd5b506040516200612f3803806200612f8339810160408190526200003b9162000087565b6001600160601b0319606094851b811660805291841b821660a05291831b811660c052911b1660e052620000e3565b80516001600160a01b03811681146200008257600080fd5b919050565b600080600080608085870312156200009d578384fd5b620000a8856200006a565b9350620000b8602086016200006a565b9250620000c8604086016200006a565b9150620000d8606086016200006a565b905092959194509250565b60805160601c60a05160601c60c05160601c60e05160601c615fab62000184600039806102c1528061154d528061158d52806116b75280611860528061198a528061236852806129b95280612a195280612a9a5250806109615280611f085280613cd55250806115295280611bca5280611f5e52806131d6525080610d1c5280610df0528061109052806113595280612ef252806130b55250615fab6000f3fe6080604052600436106102a45760003560e01c8063ab3fdd501161016e578063dee00f35116100cb578063efdeed8e1161007f578063f25801a711610064578063f25801a71461066e578063f2d5d56b1461068e578063f3995c67146106a15761034f565b8063efdeed8e1461063b578063f100b2051461065b5761034f565b8063e0e189a0116100b0578063e0e189a014610602578063e4a4054514610615578063e90a182f146106285761034f565b8063dee00f35146105c2578063df2ab5bb146105ef5761034f565b8063bc122a5411610122578063c45a015511610107578063c45a015514610592578063c53af304146105a7578063cab372ce146105af5761034f565b8063bc122a541461056c578063c2e3140a1461057f5761034f565b8063acf8a4ed11610153578063acf8a4ed14610533578063b3a2af1314610546578063b858183f146105595761034f565b8063ab3fdd501461050d578063ac9650d8146105205761034f565b80634f04a0db1161021c578063791b98bc116101d057806397e87d9d116101b557806397e87d9d146104d4578063a4a78f0c146104e7578063a98ce37f146104fa5761034f565b8063791b98bc146104aa57806390793ea8146104bf5761034f565b8063571ac8b011610201578063571ac8b0146104715780635ae401dc14610484578063639d71a9146104975761034f565b80634f04a0db1461043c5780635023b4df1461045e5761034f565b80631f0464d11161027357806342712a671161025857806342712a67146104035780634659a49414610416578063472b43f3146104295761034f565b80631f0464d1146103d05780633068c554146103f05761034f565b806304e45aaf1461035457806309b813461461037d57806311c178481461039057806311ed56c9146103b05761034f565b3661034f573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461034d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b61036761036236600461553d565b6106b4565b6040516103749190615df7565b60405180910390f35b61036761038b3660046155d8565b61083c565b34801561039c57600080fd5b5061034d6103ab3660046153b2565b61091c565b6103c36103be366004615632565b610a6c565b6040516103749190615b74565b6103e36103de3660046152a1565b610c78565b6040516103749190615af6565b61034d6103fe3660046150d2565b610d02565b61036761041136600461587f565b610d15565b61034d61042436600461511b565b610eef565b61036761043736600461587f565b610fa3565b34801561044857600080fd5b50610451611357565b6040516103749190615a36565b61036761046c366004615610565b61137b565b61034d61047f366004614fe5565b611464565b6103e36104923660046152a1565b61149a565b61034d6104a5366004614fe5565b611513565b3480156104b657600080fd5b50610451611527565b3480156104cb57600080fd5b5061045161154b565b61034d6104e2366004615814565b61156f565b61034d6104f536600461511b565b611787565b61034d6105083660046157e5565b61185c565b61034d61051b366004614fe5565b611a22565b6103e361052e366004615176565b611a60565b61034d6105413660046157b5565b611bba565b6103c36105543660046152eb565b611bc4565b610367610567366004615497565b611c82565b61034d61057a366004615852565b611e45565b61034d61058d36600461511b565b611e51565b34801561059e57600080fd5b50610451611f06565b61034d611f2a565b61034d6105bd366004614fe5565b611a36565b3480156105ce57600080fd5b506105e26105dd366004615008565b611f3c565b6040516103749190615b87565b61034d6105fd366004615033565b6120e9565b61034d610610366004615074565b612200565b61034d6106233660046157b5565b612366565b61034d610636366004615008565b6123e2565b34801561064757600080fd5b5061034d6106563660046151b6565b6123f1565b6103c3610669366004615621565b612443565b34801561067a57600080fd5b5061034d61068936600461531e565b6124e3565b61034d61069c366004615008565b612534565b61034d6106af36600461511b565b612540565b600080600083608001511415610771575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a082319061071b903090600401615a36565b60206040518083038186803b15801561073357600080fd5b505afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906157cd565b60808401525b6107ed836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107af939291906159a4565b6040516020818303038152906040528152602001866107ce57336107d0565b305b73ffffffffffffffffffffffffffffffffffffffff1690526125d8565b91508260a00151821015610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b60405180910390fd5b50919050565b60006108b0604083018035906108559060208601614fe5565b604080518082019091526000908061086d8880615e3b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152612789565b505060005460608201358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b600084138061092b5750600083135b61093457600080fd5b600061094282840184615644565b905060008060006109568460000151612970565b9250925092506109887f00000000000000000000000000000000000000000000000000000000000000008484846129a1565b5060008060008a136109c9578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896109fa565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115610a1957610a1485876020015133846129b7565b610a60565b8551610a2490612b95565b15610a49578551610a3490612b9d565b8652610a438133600089612789565b50610a60565b80600081905550610a6084876020015133846129b7565b50505050505050505050565b604080516101608101909152606090610c70907f88316456000000000000000000000000000000000000000000000000000000009080610aaf6020870187614fe5565b73ffffffffffffffffffffffffffffffffffffffff168152602001856020016020810190610add9190614fe5565b73ffffffffffffffffffffffffffffffffffffffff168152602001610b08606087016040880161579b565b62ffffff168152602001610b226080870160608801615373565b60020b8152602001610b3a60a0870160808801615373565b60020b8152602090810190610b5a90610b5590880188614fe5565b612bd2565b8152602001610b75866020016020810190610b559190614fe5565b815260a0860135602082015260c08601356040820152606001610b9f610100870160e08801614fe5565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610bee9190615cf2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611bc4565b90505b919050565b60608380600143034014610ced57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610cf78484611a60565b91505b509392505050565b610d0f8484338585612200565b50505050565b6000610d757f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c7792505050565b600081518110610d8157fe5b6020026020010151905084811115610dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b610e5e84846000818110610dd557fe5b9050602002016020810190610dea9190614fe5565b33610e587f000000000000000000000000000000000000000000000000000000000000000088886000818110610e1c57fe5b9050602002016020810190610e319190614fe5565b89896001818110610e3e57fe5b9050602002016020810190610e539190614fe5565b612db0565b846129b7565b73ffffffffffffffffffffffffffffffffffffffff821660011415610e8557339150610ea8565b73ffffffffffffffffffffffffffffffffffffffff821660021415610ea8573091505b610ee6848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612e9b915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610f8f57600080fd5b505af1158015610a60573d6000803e3d6000fd5b60008086611059575060018484600081610fb957fe5b9050602002016020810190610fce9190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110069190615a36565b60206040518083038186803b15801561101e57600080fd5b505afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105691906157cd565b96505b6110e48585600081811061106957fe5b905060200201602081019061107e9190614fe5565b82611089573361108b565b305b6110de7f0000000000000000000000000000000000000000000000000000000000000000898960008181106110bc57fe5b90506020020160208101906110d19190614fe5565b8a8a6001818110610e3e57fe5b8a6129b7565b73ffffffffffffffffffffffffffffffffffffffff83166001141561110b5733925061112e565b73ffffffffffffffffffffffffffffffffffffffff83166002141561112e573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061115e57fe5b90506020020160208101906111739190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111ab9190615a36565b60206040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fb91906157cd565b905061123b868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612e9b915050565b6113108187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061126d57fe5b90506020020160208101906112829190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016112ba9190615a36565b60206040518083038186803b1580156112d257600080fd5b505afa1580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a91906157cd565b906131a0565b92508683101561134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b505095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611424608083018035906113949060608601614fe5565b6113a460e0860160c08701614fe5565b60405180604001604052808760200160208101906113c29190614fe5565b6113d260608a0160408b0161579b565b6113df60208b018b614fe5565b6040516020016113f1939291906159a4565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250612789565b90508160a001358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b61148e817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b61149757600080fd5b50565b606083806114a66132fc565b1115610ced57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61151e8160006131b0565b61146457600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600082118015611580575060648211155b61158957600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561161257600080fd5b505afa158015611626573d6000803e3d6000fd5b505050506040513d602081101561163c57600080fd5b50519050848110156116af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611780577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561172857600080fd5b505af115801561173c573d6000803e3d6000fd5b505050506000612710611758858461330090919063ffffffff16565b8161175f57fe5b0490508015611772576117728382613324565b61177e85828403613324565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b5051101561177e5761177e868686868686610eef565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118e557600080fd5b505afa1580156118f9573d6000803e3d6000fd5b505050506040513d602081101561190f57600080fd5b505190508281101561198257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611a1d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156119fb57600080fd5b505af1158015611a0f573d6000803e3d6000fd5b50505050611a1d8282613324565b505050565b611a2d8160006131b0565b611a3657600080fd5b61148e817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b60608167ffffffffffffffff81118015611a7957600080fd5b50604051908082528060200260200182016040528015611aad57816020015b6060815260200190600190039081611a985790505b50905060005b82811015611bb35760008030868685818110611acb57fe5b9050602002810190611add9190615e3b565b604051611aeb929190615a0a565b600060405180830381855af49150503d8060008114611b26576040519150601f19603f3d011682016040523d82523d6000602084013e611b2b565b606091505b509150915081611b9157604481511015611b4457600080fd5b60048101905080806020019051810190611b5e919061542d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d9190615b74565b80848481518110611b9e57fe5b60209081029190910101525050600101611ab3565b5092915050565b611497813361185c565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611c0d9190615a1a565b6000604051808303816000865af19150503d8060008114611c4a576040519150601f19603f3d011682016040523d82523d6000602084013e611c4f565b606091505b50925090508061083657604482511015611c6857600080fd5b60048201915081806020019051810190611b5e919061542d565b600080600083604001511415611d5357600190506000611ca58460000151612970565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611cfc903090600401615a36565b60206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4c91906157cd565b6040850152505b600081611d605733611d62565b305b90505b6000611d748560000151612b95565b9050611dcd856040015182611d8d578660200151611d8f565b305b60006040518060400160405280611da98b60000151613472565b81526020018773ffffffffffffffffffffffffffffffffffffffff168152506125d8565b60408601528015611ded578451309250611de690612b9d565b8552611dfa565b8460400151935050611e00565b50611d65565b8360600151831015611e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b5050919050565b611a1d8333848461156f565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611ec657600080fd5b505afa158015611eda573d6000803e3d6000fd5b505050506040513d6020811015611ef057600080fd5b5051101561177e5761177e868686868686612540565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715611f3a57611f3a3347613324565b565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611f9a929190615a57565b60206040518083038186803b158015611fb257600080fd5b505afa158015611fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fea91906157cd565b10611ff7575060006120e3565b612021837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b1561202e575060016120e3565b612058837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b15612065575060026120e3565b6120708360006131b0565b61207957600080fd5b6120a3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b156120b0575060036120e3565b6120da837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b1561034f575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d602081101561217c57600080fd5b50519050828110156121ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610d0f57610d0f848383613481565b600082118015612211575060648211155b61221a57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561228357600080fd5b505afa158015612297573d6000803e3d6000fd5b505050506040513d60208110156122ad57600080fd5b505190508481101561232057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561177e5760006127106123358386613300565b8161233c57fe5b049050801561235057612350878483613481565b61235d8786838503613481565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123ce57600080fd5b505af115801561177e573d6000803e3d6000fd5b6123ed8282336120e9565b5050565b6000806123ff868685613656565b915091508362ffffff168183031261177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c40565b6060610c7063219f5d1760e01b6040518060c001604052808560400135815260200161247b866000016020810190610b559190614fe5565b8152602001612496866020016020810190610b559190614fe5565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610bee9190615cae565b6000806124f08584613869565b915091508362ffffff1681830312611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c40565b6123ed82333084613af1565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610f8f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff84166001141561260157339350612624565b73ffffffffffffffffffffffffffffffffffffffff841660021415612624573093505b60008060006126368560000151612970565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80831690841610600080612667868686613cce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561268d8f613d0c565b73ffffffffffffffffffffffffffffffffffffffff8e16156126af578d6126d5565b876126ce5773fffd8963efd1fc6a506488495d951d5263988d256126d5565b6401000276a45b8d6040516020016126e69190615da0565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612715959493929190615a7e565b6040805180830381600087803b15801561272e57600080fd5b505af1158015612742573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612766919061538f565b91509150826127755781612777565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127b2573393506127d5565b73ffffffffffffffffffffffffffffffffffffffff8416600214156127d5573093505b60008060006127e78560000151612970565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80841690831610600080612818858786613cce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561283e8f613d0c565b60000373ffffffffffffffffffffffffffffffffffffffff8e1615612863578d612889565b876128825773fffd8963efd1fc6a506488495d951d5263988d25612889565b6401000276a45b8d60405160200161289a9190615da0565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016128c9959493929190615a7e565b6040805180830381600087803b1580156128e257600080fd5b505af11580156128f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291a919061538f565b9150915060008361292f578183600003612935565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16612961578b811461296157600080fd5b50505050505050949350505050565b6000808061297e8482613d3e565b925061298b846014613e3e565b9050612998846017613d3e565b91509193909250565b6000610ee6856129b2868686613f2e565b613fab565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a125750804710155b15612b5b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a7f57600080fd5b505af1158015612a93573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b505050506040513d6020811015612b5357600080fd5b50610d0f9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612b8957612b84848383613481565b610d0f565b610d0f84848484613af1565b516042111590565b8051606090610c709083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901613fdb565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190612c27903090600401615a36565b60206040518083038186803b158015612c3f57600080fd5b505afa158015612c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7091906157cd565b6060600282511015612c8857600080fd5b815167ffffffffffffffff81118015612ca057600080fd5b50604051908082528060200260200182016040528015612cca578160200160208202803683370190505b5090508281600183510381518110612cde57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610cfa57600080612d4b87866001860381518110612d2a57fe5b6020026020010151878681518110612d3e57fe5b60200260200101516141c2565b91509150612d6d848481518110612d5e57fe5b602002602001015183836142aa565b846001850381518110612d7c57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612d0e565b6000806000612dbf8585614380565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60005b6001835103811015611a1d57600080848381518110612eb957fe5b6020026020010151858460010181518110612ed057fe5b6020026020010151915091506000612ee88383614380565b5090506000612f187f00000000000000000000000000000000000000000000000000000000000000008585612db0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612f6657600080fd5b505afa158015612f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9e91906156d4565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614613000578284613003565b83835b91509150613044828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016112ba9190615a36565b9550613051868383614425565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461309557826000613099565b6000835b91509150600060028c51038a106130b0578a6130f1565b6130f17f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106130e457fe5b6020026020010151612db0565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906131599086908690869060248101615e00565b600060405180830381600087803b15801561317357600080fd5b505af1158015613187573d6000803e3d6000fd5b50506001909b019a50612e9e9950505050505050505050565b808203828111156120e357600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f000000000000000000000000000000000000000000000000000000000000000086604051602401613207929190615ad0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516132909190615a1a565b6000604051808303816000865af19150503d80600081146132cd576040519150601f19603f3d011682016040523d82523d6000602084013e6132d2565b606091505b5091509150818015610ee6575080511580610ee6575080806020019051810190610ee69190615287565b4290565b600082158061331b5750508181028183828161331857fe5b04145b6120e357600080fd5b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061339b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161335e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146133fd576040519150601f19603f3d011682016040523d82523d6000602084013e613402565b606091505b5050905080611a1d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060610c70826000602b613fdb565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061355657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613519565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135b8576040519150601f19603f3d011682016040523d82523d6000602084013e6135bd565b606091505b50915091508180156135eb5750805115806135eb57508080602001905160208110156135e857600080fd5b50515b61178057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080835185511461366757600080fd5b6000855167ffffffffffffffff8111801561368157600080fd5b506040519080825280602002602001820160405280156136bb57816020015b6136a8614e2e565b8152602001906001900390816136a05790505b5090506000865167ffffffffffffffff811180156136d857600080fd5b5060405190808252806020026020018201604052801561371257816020015b6136ff614e2e565b8152602001906001900390816136f75790505b50905060005b8751811015613842576000806137418a848151811061373357fe5b602002602001015189613869565b9150915061374e826144fb565b85848151811061375a57fe5b60200260200101516000019060020b908160020b8152505061377b816144fb565b84848151811061378757fe5b60200260200101516000019060020b908160020b815250508883815181106137ab57fe5b60200260200101518584815181106137bf57fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505088838151811061380157fe5b602002602001015184848151811061381557fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff9092169101525050600101613718565b5061384c8261450c565b60020b935061385a8161450c565b60020b92505050935093915050565b600080600080613878866145f4565b90506000805b82811015613a965760008060006138948b612970565b92509250925060006138a7848484613cce565b905060008063ffffffff8d166138d0576138c08361461f565b600291820b9350900b9050613972565b6138da838e6148b7565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561392b57600080fd5b505afa15801561393f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613963919061570f565b50505060029290920b93505050505b600189038714156139b3578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161099506139c2565b6139bc8e612b9d565b9d508597505b6000871580613a6357508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a33578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613a63565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613a78579b82019b9a81019a613a83565b828d039c50818c039b505b50506001909501945061387e9350505050565b5082613ae7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613bce57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b91565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c30576040519150601f19603f3d011682016040523d82523d6000602084013e613c35565b606091505b5091509150818015613c63575080511580613c635750808060200190516020811015613c6057600080fd5b50515b61177e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000613d047f0000000000000000000000000000000000000000000000000000000000000000613cff868686613f2e565b614ce8565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d3a57600080fd5b5090565b600081826014011015613db257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015613e2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015613eb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015613f2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b613f36614e45565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115613f6e579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000613fb78383614ce8565b90503373ffffffffffffffffffffffffffffffffffffffff8216146120e357600080fd5b60608182601f01101561404f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8282840110156140c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561413257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561415157604051915060008252602082016040526141b9565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561418a578051835260209283019201614172565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60008060006141d18585614380565b5090506000806141e2888888612db0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561422757600080fd5b505afa15801561423b573d6000803e3d6000fd5b505050506040513d606081101561425157600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461429857808261429b565b81815b90999098509650505050505050565b600080841161431a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b60008311801561432a5750600082115b61433357600080fd5b600061434b6103e86143458688613300565b90613300565b9050600061435f6103e561434586896131a0565b9050614376600182848161436f57fe5b0490614e1e565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156143bc57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106143f65782846143f9565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661441e57600080fd5b9250929050565b600080841161449557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156144a55750600082115b6144ae57600080fd5b60006144bc856103e5613300565b905060006144ca8285613300565b905060006144e4836144de886103e8613300565b90614e1e565b90508082816144ef57fe5b04979650505050505050565b80600281900b8114610c7357600080fd5b6000806000805b84518110156145a15784818151811061452857fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1685828151811061455257fe5b60200260200101516000015160020b028301925084818151811061457257fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16820191508080600101915050614513565b508082816145ab57fe5b0592506000821280156145c657508082816145c257fe5b0715155b15611e3e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561466b57600080fd5b505afa15801561467f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146a3919061570f565b50939750919550935050600161ffff84161191506146ef9050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615bd2565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b815260040161472b9190615de8565b60806040518083038186803b15801561474357600080fd5b505afa158015614757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477b91906158da565b5050915091506147896132fc565b63ffffffff168263ffffffff16146147a3578495506148ae565b60008361ffff1660018561ffff168761ffff160103816147bf57fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016148009190615df7565b60806040518083038186803b15801561481857600080fd5b505afa15801561482c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061485091906158da565b935050925092508061488e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615b9b565b82860363ffffffff811683870360060b816148a557fe5b059a5050505050505b50505050915091565b60008063ffffffff831661492c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061495b57fe5b602002602001019063ffffffff16908163ffffffff168152505060008160018151811061498457fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614a1f578181015183820152602001614a07565b505050509050019250505060006040518083038186803b158015614a4257600080fd5b505afa158015614a56573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040908152811015614a9d57600080fd5b8101908080516040519392919084640100000000821115614abd57600080fd5b908301906020820185811115614ad257600080fd5b8251866020820283011164010000000082111715614aef57600080fd5b82525081516020918201928201910280838360005b83811015614b1c578181015183820152602001614b04565b5050505090500160405260200180516040519392919084640100000000821115614b4557600080fd5b908301906020820185811115614b5a57600080fd5b8251866020820283011164010000000082111715614b7757600080fd5b82525081516020918201928201910280838360005b83811015614ba4578181015183820152602001614b8c565b5050505090500160405250505091509150600082600081518110614bc457fe5b602002602001015183600181518110614bd957fe5b6020026020010151039050600082600081518110614bf357fe5b602002602001015183600181518110614c0857fe5b60200260200101510390508763ffffffff168260060b81614c2557fe5b05965060008260060b128015614c4f57508763ffffffff168260060b81614c4857fe5b0760060b15155b15614c7a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614cd857fe5b0496505050505050509250929050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d2a57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b808201828110156120e357600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610c7381615f4c565b60008083601f840112614e81578182fd5b50813567ffffffffffffffff811115614e98578182fd5b602083019150836020808302850101111561441e57600080fd5b600082601f830112614ec2578081fd5b81356020614ed7614ed283615ec2565b615e9e565b8281528181019085830183850287018401881015614ef3578586fd5b855b85811015614f2e5781356fffffffffffffffffffffffffffffffff81168114614f1c578788fd5b84529284019290840190600101614ef5565b5090979650505050505050565b80518015158114610c7357600080fd5b600082601f830112614f5b578081fd5b8135614f69614ed282615ee0565b818152846020838601011115614f7d578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610c7357600080fd5b805161ffff81168114610c7357600080fd5b803562ffffff81168114610c7357600080fd5b8035610c7381615f7d565b600060208284031215614ff6578081fd5b813561500181615f4c565b9392505050565b6000806040838503121561501a578081fd5b823561502581615f4c565b946020939093013593505050565b600080600060608486031215615047578081fd5b833561505281615f4c565b925060208401359150604084013561506981615f4c565b809150509250925092565b600080600080600060a0868803121561508b578283fd5b853561509681615f4c565b94506020860135935060408601356150ad81615f4c565b92506060860135915060808601356150c481615f4c565b809150509295509295909350565b600080600080608085870312156150e7578182fd5b84356150f281615f4c565b93506020850135925060408501359150606085013561511081615f4c565b939692955090935050565b60008060008060008060c08789031215615133578384fd5b863561513e81615f4c565b95506020870135945060408701359350606087013561515c81615f8f565b9598949750929560808101359460a0909101359350915050565b60008060208385031215615188578182fd5b823567ffffffffffffffff81111561519e578283fd5b6151aa85828601614e70565b90969095509350505050565b600080600080608085870312156151cb578182fd5b843567ffffffffffffffff808211156151e2578384fd5b818701915087601f8301126151f5578384fd5b81356020615205614ed283615ec2565b82815281810190858301885b8581101561523a576152288e8684358b0101614f4b565b84529284019290840190600101615211565b50909950505088013592505080821115615252578384fd5b5061525f87828801614eb2565b93505061526e60408601614fc7565b915061527c60608601614fda565b905092959194509250565b600060208284031215615298578081fd5b61500182614f3b565b6000806000604084860312156152b5578081fd5b83359250602084013567ffffffffffffffff8111156152d2578182fd5b6152de86828701614e70565b9497909650939450505050565b6000602082840312156152fc578081fd5b813567ffffffffffffffff811115615312578182fd5b613d0484828501614f4b565b600080600060608486031215615332578081fd5b833567ffffffffffffffff811115615348578182fd5b61535486828701614f4b565b93505061536360208501614fc7565b9150604084013561506981615f7d565b600060208284031215615384578081fd5b813561500181615f6e565b600080604083850312156153a1578182fd5b505080516020909101519092909150565b600080600080606085870312156153c7578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156153ec578384fd5b818701915087601f8301126153ff578384fd5b81358181111561540d578485fd5b88602082850101111561541e578485fd5b95989497505060200194505050565b60006020828403121561543e578081fd5b815167ffffffffffffffff811115615454578182fd5b8201601f81018413615464578182fd5b8051615472614ed282615ee0565b818152856020838501011115615486578384fd5b610ee6826020830160208601615f20565b6000602082840312156154a8578081fd5b813567ffffffffffffffff808211156154bf578283fd5b90830190608082860312156154d2578283fd5b6040516080810181811083821117156154e757fe5b6040528235828111156154f8578485fd5b61550487828601614f4b565b8252506020830135915061551782615f4c565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e0828403121561554e578081fd5b60405160e0810181811067ffffffffffffffff8211171561556b57fe5b60405261557783614e65565b815261558560208401614e65565b602082015261559660408401614fc7565b60408201526155a760608401614e65565b60608201526080830135608082015260a083013560a08201526155cc60c08401614e65565b60c08201529392505050565b6000602082840312156155e9578081fd5b813567ffffffffffffffff8111156155ff578182fd5b820160808185031215615001578182fd5b600060e08284031215610836578081fd5b600060a08284031215610836578081fd5b60006101008284031215610836578081fd5b600060208284031215615655578081fd5b813567ffffffffffffffff8082111561566c578283fd5b908301906040828603121561567f578283fd5b60405160408101818110838211171561569457fe5b6040528235828111156156a5578485fd5b6156b187828601614f4b565b825250602083013592506156c483615f4c565b6020810192909252509392505050565b6000806000606084860312156156e8578081fd5b6156f184614f97565b92506156ff60208501614f97565b9150604084015161506981615f7d565b600080600080600080600060e0888a031215615729578485fd5b875161573481615f4c565b602089015190975061574581615f6e565b955061575360408901614fb5565b945061576160608901614fb5565b935061576f60808901614fb5565b925060a088015161577f81615f8f565b915061578d60c08901614f3b565b905092959891949750929550565b6000602082840312156157ac578081fd5b61500182614fc7565b6000602082840312156157c6578081fd5b5035919050565b6000602082840312156157de578081fd5b5051919050565b600080604083850312156157f7578182fd5b82359150602083013561580981615f4c565b809150509250929050565b60008060008060808587031215615829578182fd5b84359350602085013561583b81615f4c565b925060408501359150606085013561511081615f4c565b600080600060608486031215615866578081fd5b8335925060208401359150604084013561506981615f4c565b600080600080600060808688031215615896578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158ba578384fd5b6158c688828901614e70565b90945092505060608601356150c481615f4c565b600080600080608085870312156158ef578182fd5b84516158fa81615f7d565b8094505060208501518060060b8114615911578283fd5b604086015190935061592281615f4c565b915061527c60608601614f3b565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452615962816020860160208601615f20565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a2c818460208701615f20565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615ac560a083018461594a565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615b67577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b5585835161594a565b94509285019290850190600101615b1b565b5092979650505050505050565b600060208252615001602083018461594a565b6020810160058310615b9557fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d06828451615930565b6020830151615d186020840182615930565b506040830151615d2b604084018261599b565b506060830151615d3e6060840182615994565b506080830151615d516080840182615994565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615d8f82850182615930565b505061014092830151919092015290565b600060208252825160406020840152615dbc606084018261594a565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152614376608083018461594a565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615e6f578283fd5b83018035915067ffffffffffffffff821115615e89578283fd5b60200191503681900382131561441e57600080fd5b60405181810167ffffffffffffffff81118282101715615eba57fe5b604052919050565b600067ffffffffffffffff821115615ed657fe5b5060209081020190565b600067ffffffffffffffff821115615ef457fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f3b578181015183820152602001615f23565b83811115610d0f5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461149757600080fd5b8060020b811461149757600080fd5b63ffffffff8116811461149757600080fd5b60ff8116811461149757600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH2 0x100 PUSH1 0x40 MSTORE PUSH1 0x0 NOT PUSH1 0x0 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x612F CODESIZE SUB DUP1 PUSH3 0x612F DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x3B SWAP2 PUSH3 0x87 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 DUP5 SHL DUP3 AND PUSH1 0xA0 MSTORE SWAP2 DUP4 SHL DUP2 AND PUSH1 0xC0 MSTORE SWAP2 SHL AND PUSH1 0xE0 MSTORE PUSH3 0xE3 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x9D JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH3 0xA8 DUP6 PUSH3 0x6A JUMP JUMPDEST SWAP4 POP PUSH3 0xB8 PUSH1 0x20 DUP7 ADD PUSH3 0x6A JUMP JUMPDEST SWAP3 POP PUSH3 0xC8 PUSH1 0x40 DUP7 ADD PUSH3 0x6A JUMP JUMPDEST SWAP2 POP PUSH3 0xD8 PUSH1 0x60 DUP7 ADD PUSH3 0x6A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x5FAB PUSH3 0x184 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x2C1 MSTORE DUP1 PUSH2 0x154D MSTORE DUP1 PUSH2 0x158D MSTORE DUP1 PUSH2 0x16B7 MSTORE DUP1 PUSH2 0x1860 MSTORE DUP1 PUSH2 0x198A MSTORE DUP1 PUSH2 0x2368 MSTORE DUP1 PUSH2 0x29B9 MSTORE DUP1 PUSH2 0x2A19 MSTORE DUP1 PUSH2 0x2A9A MSTORE POP DUP1 PUSH2 0x961 MSTORE DUP1 PUSH2 0x1F08 MSTORE DUP1 PUSH2 0x3CD5 MSTORE POP DUP1 PUSH2 0x1529 MSTORE DUP1 PUSH2 0x1BCA MSTORE DUP1 PUSH2 0x1F5E MSTORE DUP1 PUSH2 0x31D6 MSTORE POP DUP1 PUSH2 0xD1C MSTORE DUP1 PUSH2 0xDF0 MSTORE DUP1 PUSH2 0x1090 MSTORE DUP1 PUSH2 0x1359 MSTORE DUP1 PUSH2 0x2EF2 MSTORE DUP1 PUSH2 0x30B5 MSTORE POP PUSH2 0x5FAB PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2A4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB3FDD50 GT PUSH2 0x16E JUMPI DUP1 PUSH4 0xDEE00F35 GT PUSH2 0xCB JUMPI DUP1 PUSH4 0xEFDEED8E GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xF25801A7 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xF25801A7 EQ PUSH2 0x66E JUMPI DUP1 PUSH4 0xF2D5D56B EQ PUSH2 0x68E JUMPI DUP1 PUSH4 0xF3995C67 EQ PUSH2 0x6A1 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xEFDEED8E EQ PUSH2 0x63B JUMPI DUP1 PUSH4 0xF100B205 EQ PUSH2 0x65B JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xE0E189A0 GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0xE0E189A0 EQ PUSH2 0x602 JUMPI DUP1 PUSH4 0xE4A40545 EQ PUSH2 0x615 JUMPI DUP1 PUSH4 0xE90A182F EQ PUSH2 0x628 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xDEE00F35 EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0xDF2AB5BB EQ PUSH2 0x5EF JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xBC122A54 GT PUSH2 0x122 JUMPI DUP1 PUSH4 0xC45A0155 GT PUSH2 0x107 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x592 JUMPI DUP1 PUSH4 0xC53AF304 EQ PUSH2 0x5A7 JUMPI DUP1 PUSH4 0xCAB372CE EQ PUSH2 0x5AF JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xBC122A54 EQ PUSH2 0x56C JUMPI DUP1 PUSH4 0xC2E3140A EQ PUSH2 0x57F JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xACF8A4ED GT PUSH2 0x153 JUMPI DUP1 PUSH4 0xACF8A4ED EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xB3A2AF13 EQ PUSH2 0x546 JUMPI DUP1 PUSH4 0xB858183F EQ PUSH2 0x559 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xAB3FDD50 EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x520 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x4F04A0DB GT PUSH2 0x21C JUMPI DUP1 PUSH4 0x791B98BC GT PUSH2 0x1D0 JUMPI DUP1 PUSH4 0x97E87D9D GT PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x97E87D9D EQ PUSH2 0x4D4 JUMPI DUP1 PUSH4 0xA4A78F0C EQ PUSH2 0x4E7 JUMPI DUP1 PUSH4 0xA98CE37F EQ PUSH2 0x4FA JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x791B98BC EQ PUSH2 0x4AA JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0x4BF JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x571AC8B0 GT PUSH2 0x201 JUMPI DUP1 PUSH4 0x571AC8B0 EQ PUSH2 0x471 JUMPI DUP1 PUSH4 0x5AE401DC EQ PUSH2 0x484 JUMPI DUP1 PUSH4 0x639D71A9 EQ PUSH2 0x497 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x4F04A0DB EQ PUSH2 0x43C JUMPI DUP1 PUSH4 0x5023B4DF EQ PUSH2 0x45E JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x1F0464D1 GT PUSH2 0x273 JUMPI DUP1 PUSH4 0x42712A67 GT PUSH2 0x258 JUMPI DUP1 PUSH4 0x42712A67 EQ PUSH2 0x403 JUMPI DUP1 PUSH4 0x4659A494 EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0x472B43F3 EQ PUSH2 0x429 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x1F0464D1 EQ PUSH2 0x3D0 JUMPI DUP1 PUSH4 0x3068C554 EQ PUSH2 0x3F0 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x4E45AAF EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0x9B81346 EQ PUSH2 0x37D JUMPI DUP1 PUSH4 0x11C17848 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0x11ED56C9 EQ PUSH2 0x3B0 JUMPI PUSH2 0x34F JUMP JUMPDEST CALLDATASIZE PUSH2 0x34F JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x34D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F742053414D42000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x367 PUSH2 0x362 CALLDATASIZE PUSH1 0x4 PUSH2 0x553D JUMP JUMPDEST PUSH2 0x6B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x374 SWAP2 SWAP1 PUSH2 0x5DF7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x367 PUSH2 0x38B CALLDATASIZE PUSH1 0x4 PUSH2 0x55D8 JUMP JUMPDEST PUSH2 0x83C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH2 0x3AB CALLDATASIZE PUSH1 0x4 PUSH2 0x53B2 JUMP JUMPDEST PUSH2 0x91C JUMP JUMPDEST PUSH2 0x3C3 PUSH2 0x3BE CALLDATASIZE PUSH1 0x4 PUSH2 0x5632 JUMP JUMPDEST PUSH2 0xA6C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x374 SWAP2 SWAP1 PUSH2 0x5B74 JUMP JUMPDEST PUSH2 0x3E3 PUSH2 0x3DE CALLDATASIZE PUSH1 0x4 PUSH2 0x52A1 JUMP JUMPDEST PUSH2 0xC78 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x374 SWAP2 SWAP1 PUSH2 0x5AF6 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x3FE CALLDATASIZE PUSH1 0x4 PUSH2 0x50D2 JUMP JUMPDEST PUSH2 0xD02 JUMP JUMPDEST PUSH2 0x367 PUSH2 0x411 CALLDATASIZE PUSH1 0x4 PUSH2 0x587F JUMP JUMPDEST PUSH2 0xD15 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x424 CALLDATASIZE PUSH1 0x4 PUSH2 0x511B JUMP JUMPDEST PUSH2 0xEEF JUMP JUMPDEST PUSH2 0x367 PUSH2 0x437 CALLDATASIZE PUSH1 0x4 PUSH2 0x587F JUMP JUMPDEST PUSH2 0xFA3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x448 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x451 PUSH2 0x1357 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x374 SWAP2 SWAP1 PUSH2 0x5A36 JUMP JUMPDEST PUSH2 0x367 PUSH2 0x46C CALLDATASIZE PUSH1 0x4 PUSH2 0x5610 JUMP JUMPDEST PUSH2 0x137B JUMP JUMPDEST PUSH2 0x34D PUSH2 0x47F CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x1464 JUMP JUMPDEST PUSH2 0x3E3 PUSH2 0x492 CALLDATASIZE PUSH1 0x4 PUSH2 0x52A1 JUMP JUMPDEST PUSH2 0x149A JUMP JUMPDEST PUSH2 0x34D PUSH2 0x4A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x1513 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x451 PUSH2 0x1527 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x451 PUSH2 0x154B JUMP JUMPDEST PUSH2 0x34D PUSH2 0x4E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x5814 JUMP JUMPDEST PUSH2 0x156F JUMP JUMPDEST PUSH2 0x34D PUSH2 0x4F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x511B JUMP JUMPDEST PUSH2 0x1787 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x57E5 JUMP JUMPDEST PUSH2 0x185C JUMP JUMPDEST PUSH2 0x34D PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x1A22 JUMP JUMPDEST PUSH2 0x3E3 PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x5176 JUMP JUMPDEST PUSH2 0x1A60 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x57B5 JUMP JUMPDEST PUSH2 0x1BBA JUMP JUMPDEST PUSH2 0x3C3 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x52EB JUMP JUMPDEST PUSH2 0x1BC4 JUMP JUMPDEST PUSH2 0x367 PUSH2 0x567 CALLDATASIZE PUSH1 0x4 PUSH2 0x5497 JUMP JUMPDEST PUSH2 0x1C82 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x57A CALLDATASIZE PUSH1 0x4 PUSH2 0x5852 JUMP JUMPDEST PUSH2 0x1E45 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x511B JUMP JUMPDEST PUSH2 0x1E51 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x59E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x451 PUSH2 0x1F06 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x1F2A JUMP JUMPDEST PUSH2 0x34D PUSH2 0x5BD CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x1A36 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E2 PUSH2 0x5DD CALLDATASIZE PUSH1 0x4 PUSH2 0x5008 JUMP JUMPDEST PUSH2 0x1F3C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x374 SWAP2 SWAP1 PUSH2 0x5B87 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x5FD CALLDATASIZE PUSH1 0x4 PUSH2 0x5033 JUMP JUMPDEST PUSH2 0x20E9 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x610 CALLDATASIZE PUSH1 0x4 PUSH2 0x5074 JUMP JUMPDEST PUSH2 0x2200 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x623 CALLDATASIZE PUSH1 0x4 PUSH2 0x57B5 JUMP JUMPDEST PUSH2 0x2366 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x636 CALLDATASIZE PUSH1 0x4 PUSH2 0x5008 JUMP JUMPDEST PUSH2 0x23E2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH2 0x656 CALLDATASIZE PUSH1 0x4 PUSH2 0x51B6 JUMP JUMPDEST PUSH2 0x23F1 JUMP JUMPDEST PUSH2 0x3C3 PUSH2 0x669 CALLDATASIZE PUSH1 0x4 PUSH2 0x5621 JUMP JUMPDEST PUSH2 0x2443 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH2 0x689 CALLDATASIZE PUSH1 0x4 PUSH2 0x531E JUMP JUMPDEST PUSH2 0x24E3 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x69C CALLDATASIZE PUSH1 0x4 PUSH2 0x5008 JUMP JUMPDEST PUSH2 0x2534 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x6AF CALLDATASIZE PUSH1 0x4 PUSH2 0x511B JUMP JUMPDEST PUSH2 0x2540 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x80 ADD MLOAD EQ ISZERO PUSH2 0x771 JUMPI POP DUP2 MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x71B SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x733 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x747 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x76B SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE JUMPDEST PUSH2 0x7ED DUP4 PUSH1 0x80 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x40 ADD MLOAD DUP11 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x7AF SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH2 0x7CE JUMPI CALLER PUSH2 0x7D0 JUMP JUMPDEST ADDRESS JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE PUSH2 0x25D8 JUMP JUMPDEST SWAP2 POP DUP3 PUSH1 0xA0 ADD MLOAD DUP3 LT ISZERO PUSH2 0x836 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C77 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B0 PUSH1 0x40 DUP4 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0x855 SWAP1 PUSH1 0x20 DUP7 ADD PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SWAP1 DUP1 PUSH2 0x86D DUP9 DUP1 PUSH2 0x5E3B JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP CALLER PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE PUSH2 0x2789 JUMP JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH1 0x60 DUP3 ADD CALLDATALOAD DUP2 GT ISZERO PUSH2 0x8F3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C09 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 SGT DUP1 PUSH2 0x92B JUMPI POP PUSH1 0x0 DUP4 SGT JUMPDEST PUSH2 0x934 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x942 DUP3 DUP5 ADD DUP5 PUSH2 0x5644 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x956 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2970 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x988 PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x29A1 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 SGT PUSH2 0x9C9 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 PUSH2 0x9FA JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP11 JUMPDEST SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0xA19 JUMPI PUSH2 0xA14 DUP6 DUP8 PUSH1 0x20 ADD MLOAD CALLER DUP5 PUSH2 0x29B7 JUMP JUMPDEST PUSH2 0xA60 JUMP JUMPDEST DUP6 MLOAD PUSH2 0xA24 SWAP1 PUSH2 0x2B95 JUMP JUMPDEST ISZERO PUSH2 0xA49 JUMPI DUP6 MLOAD PUSH2 0xA34 SWAP1 PUSH2 0x2B9D JUMP JUMPDEST DUP7 MSTORE PUSH2 0xA43 DUP2 CALLER PUSH1 0x0 DUP10 PUSH2 0x2789 JUMP JUMPDEST POP PUSH2 0xA60 JUMP JUMPDEST DUP1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0xA60 DUP5 DUP8 PUSH1 0x20 ADD MLOAD CALLER DUP5 PUSH2 0x29B7 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x160 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP1 PUSH2 0xC70 SWAP1 PUSH32 0x8831645600000000000000000000000000000000000000000000000000000000 SWAP1 DUP1 PUSH2 0xAAF PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xADD SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB08 PUSH1 0x60 DUP8 ADD PUSH1 0x40 DUP9 ADD PUSH2 0x579B JUMP JUMPDEST PUSH3 0xFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB22 PUSH1 0x80 DUP8 ADD PUSH1 0x60 DUP9 ADD PUSH2 0x5373 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB3A PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x5373 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD SWAP1 PUSH2 0xB5A SWAP1 PUSH2 0xB55 SWAP1 DUP9 ADD DUP9 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x2BD2 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB75 DUP7 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB55 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0xA0 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC0 DUP7 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0xB9F PUSH2 0x100 DUP8 ADD PUSH1 0xE0 DUP9 ADD PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xBEE SWAP2 SWAP1 PUSH2 0x5CF2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x1BC4 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH1 0x1 NUMBER SUB BLOCKHASH EQ PUSH2 0xCED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426C6F636B686173680000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xCF7 DUP5 DUP5 PUSH2 0x1A60 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD0F DUP5 DUP5 CALLER DUP6 DUP6 PUSH2 0x2200 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD75 PUSH32 0x0 DUP8 DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2C77 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xD81 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP5 DUP2 GT ISZERO PUSH2 0xDC5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C09 JUMP JUMPDEST PUSH2 0xE5E DUP5 DUP5 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDD5 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xDEA SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST CALLER PUSH2 0xE58 PUSH32 0x0 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE1C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE31 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP10 DUP10 PUSH1 0x1 DUP2 DUP2 LT PUSH2 0xE3E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE53 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x2DB0 JUMP JUMPDEST DUP5 PUSH2 0x29B7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x1 EQ ISZERO PUSH2 0xE85 JUMPI CALLER SWAP2 POP PUSH2 0xEA8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x2 EQ ISZERO PUSH2 0xEA8 JUMPI ADDRESS SWAP2 POP JUMPDEST PUSH2 0xEE6 DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP3 POP PUSH2 0x2E9B SWAP2 POP POP JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8FCBAF0C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xFF DUP6 AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xE4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0x8FCBAF0C SWAP2 PUSH2 0x104 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA60 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH2 0x1059 JUMPI POP PUSH1 0x1 DUP5 DUP5 PUSH1 0x0 DUP2 PUSH2 0xFB9 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xFCE SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1006 SWAP2 SWAP1 PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x101E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1032 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1056 SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST SWAP7 POP JUMPDEST PUSH2 0x10E4 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x1069 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x107E SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP3 PUSH2 0x1089 JUMPI CALLER PUSH2 0x108B JUMP JUMPDEST ADDRESS JUMPDEST PUSH2 0x10DE PUSH32 0x0 DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x10BC JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x10D1 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP11 DUP11 PUSH1 0x1 DUP2 DUP2 LT PUSH2 0xE3E JUMPI INVALID JUMPDEST DUP11 PUSH2 0x29B7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x1 EQ ISZERO PUSH2 0x110B JUMPI CALLER SWAP3 POP PUSH2 0x112E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x2 EQ ISZERO PUSH2 0x112E JUMPI ADDRESS SWAP3 POP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD DUP2 DUP2 LT PUSH2 0x115E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1173 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11AB SWAP2 SWAP1 PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11FB SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST SWAP1 POP PUSH2 0x123B DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 SWAP3 POP PUSH2 0x2E9B SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1310 DUP2 DUP8 DUP8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD DUP2 DUP2 LT PUSH2 0x126D JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1282 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12BA SWAP2 SWAP1 PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x130A SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST SWAP1 PUSH2 0x31A0 JUMP JUMPDEST SWAP3 POP DUP7 DUP4 LT ISZERO PUSH2 0x134C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C77 JUMP JUMPDEST POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1424 PUSH1 0x80 DUP4 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0x1394 SWAP1 PUSH1 0x60 DUP7 ADD PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x13A4 PUSH1 0xE0 DUP7 ADD PUSH1 0xC0 DUP8 ADD PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x13C2 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x13D2 PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x579B JUMP JUMPDEST PUSH2 0x13DF PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x13F1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x2789 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0xA0 ADD CALLDATALOAD DUP2 GT ISZERO PUSH2 0x8F3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C09 JUMP JUMPDEST PUSH2 0x148E DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31B0 JUMP JUMPDEST PUSH2 0x1497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH2 0x14A6 PUSH2 0x32FC JUMP JUMPDEST GT ISZERO PUSH2 0xCED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73616374696F6E20746F6F206F6C6400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x151E DUP2 PUSH1 0x0 PUSH2 0x31B0 JUMP JUMPDEST PUSH2 0x1464 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x1580 JUMPI POP PUSH1 0x64 DUP3 GT ISZERO JUMPDEST PUSH2 0x1589 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1612 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1626 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x163C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP2 LT ISZERO PUSH2 0x16AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E742053414D42000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1780 JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2E1A7D4D DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1728 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x173C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x2710 PUSH2 0x1758 DUP6 DUP5 PUSH2 0x3300 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x175F JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x1772 JUMPI PUSH2 0x1772 DUP4 DUP3 PUSH2 0x3324 JUMP JUMPDEST PUSH2 0x177E DUP6 DUP3 DUP5 SUB PUSH2 0x3324 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 PUSH4 0xDD62ED3E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x181C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1846 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD LT ISZERO PUSH2 0x177E JUMPI PUSH2 0x177E DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0xEEF JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x190F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x1982 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E742053414D42000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1A1D JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2E1A7D4D DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A0F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1A1D DUP3 DUP3 PUSH2 0x3324 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1A2D DUP2 PUSH1 0x0 PUSH2 0x31B0 JUMP JUMPDEST PUSH2 0x1A36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x148E DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31B0 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1A79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1AAD JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1A98 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1BB3 JUMPI PUSH1 0x0 DUP1 ADDRESS DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x1ACB JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x1ADD SWAP2 SWAP1 PUSH2 0x5E3B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1AEB SWAP3 SWAP2 SWAP1 PUSH2 0x5A0A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B26 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B2B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x1B91 JUMPI PUSH1 0x44 DUP2 MLOAD LT ISZERO PUSH2 0x1B44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD SWAP1 POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1B5E SWAP2 SWAP1 PUSH2 0x542D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP2 SWAP1 PUSH2 0x5B74 JUMP JUMPDEST DUP1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1B9E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x1AB3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1497 DUP2 CALLER PUSH2 0x185C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x1C0D SWAP2 SWAP1 PUSH2 0x5A1A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1C4A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1C4F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP3 POP SWAP1 POP DUP1 PUSH2 0x836 JUMPI PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x1C68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1B5E SWAP2 SWAP1 PUSH2 0x542D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD EQ ISZERO PUSH2 0x1D53 JUMPI PUSH1 0x1 SWAP1 POP PUSH1 0x0 PUSH2 0x1CA5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2970 JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1CFC SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D28 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D4C SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE POP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1D60 JUMPI CALLER PUSH2 0x1D62 JUMP JUMPDEST ADDRESS JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x0 PUSH2 0x1D74 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x2B95 JUMP JUMPDEST SWAP1 POP PUSH2 0x1DCD DUP6 PUSH1 0x40 ADD MLOAD DUP3 PUSH2 0x1D8D JUMPI DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x1D8F JUMP JUMPDEST ADDRESS JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1DA9 DUP12 PUSH1 0x0 ADD MLOAD PUSH2 0x3472 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x25D8 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE DUP1 ISZERO PUSH2 0x1DED JUMPI DUP5 MLOAD ADDRESS SWAP3 POP PUSH2 0x1DE6 SWAP1 PUSH2 0x2B9D JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1DFA JUMP JUMPDEST DUP5 PUSH1 0x40 ADD MLOAD SWAP4 POP POP PUSH2 0x1E00 JUMP JUMPDEST POP PUSH2 0x1D65 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD DUP4 LT ISZERO PUSH2 0x1E3E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C77 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A1D DUP4 CALLER DUP5 DUP5 PUSH2 0x156F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD DUP7 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 PUSH4 0xDD62ED3E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1EF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD LT ISZERO PUSH2 0x177E JUMPI PUSH2 0x177E DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x2540 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST SELFBALANCE ISZERO PUSH2 0x1F3A JUMPI PUSH2 0x1F3A CALLER SELFBALANCE PUSH2 0x3324 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E ADDRESS PUSH32 0x0 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F9A SWAP3 SWAP2 SWAP1 PUSH2 0x5A57 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FEA SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST LT PUSH2 0x1FF7 JUMPI POP PUSH1 0x0 PUSH2 0x20E3 JUMP JUMPDEST PUSH2 0x2021 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31B0 JUMP JUMPDEST ISZERO PUSH2 0x202E JUMPI POP PUSH1 0x1 PUSH2 0x20E3 JUMP JUMPDEST PUSH2 0x2058 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31B0 JUMP JUMPDEST ISZERO PUSH2 0x2065 JUMPI POP PUSH1 0x2 PUSH2 0x20E3 JUMP JUMPDEST PUSH2 0x2070 DUP4 PUSH1 0x0 PUSH2 0x31B0 JUMP JUMPDEST PUSH2 0x2079 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x20A3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31B0 JUMP JUMPDEST ISZERO PUSH2 0x20B0 JUMPI POP PUSH1 0x3 PUSH2 0x20E3 JUMP JUMPDEST PUSH2 0x20DA DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31B0 JUMP JUMPDEST ISZERO PUSH2 0x34F JUMPI POP PUSH1 0x4 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2166 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x217C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x21EF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420746F6B656E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0xD0F JUMPI PUSH2 0xD0F DUP5 DUP4 DUP4 PUSH2 0x3481 JUMP JUMPDEST PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x2211 JUMPI POP PUSH1 0x64 DUP3 GT ISZERO JUMPDEST PUSH2 0x221A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2297 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP2 LT ISZERO PUSH2 0x2320 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420746F6B656E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x177E JUMPI PUSH1 0x0 PUSH2 0x2710 PUSH2 0x2335 DUP4 DUP7 PUSH2 0x3300 JUMP JUMPDEST DUP2 PUSH2 0x233C JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2350 JUMPI PUSH2 0x2350 DUP8 DUP5 DUP4 PUSH2 0x3481 JUMP JUMPDEST PUSH2 0x235D DUP8 DUP7 DUP4 DUP6 SUB PUSH2 0x3481 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x177E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x23ED DUP3 DUP3 CALLER PUSH2 0x20E9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x23FF DUP7 DUP7 DUP6 PUSH2 0x3656 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x177E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C40 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC70 PUSH4 0x219F5D17 PUSH1 0xE0 SHL PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH1 0x40 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x247B DUP7 PUSH1 0x0 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB55 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2496 DUP7 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB55 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x60 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x80 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xBEE SWAP2 SWAP1 PUSH2 0x5CAE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x24F0 DUP6 DUP5 PUSH2 0x3869 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x1780 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C40 JUMP JUMPDEST PUSH2 0x23ED DUP3 CALLER ADDRESS DUP5 PUSH2 0x3AF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xFF DUP6 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0xD505ACCF SWAP2 PUSH1 0xE4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x1 EQ ISZERO PUSH2 0x2601 JUMPI CALLER SWAP4 POP PUSH2 0x2624 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x2 EQ ISZERO PUSH2 0x2624 JUMPI ADDRESS SWAP4 POP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2636 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x2970 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP1 DUP5 AND LT PUSH1 0x0 DUP1 PUSH2 0x2667 DUP7 DUP7 DUP7 PUSH2 0x3CCE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP12 DUP6 PUSH2 0x268D DUP16 PUSH2 0x3D0C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND ISZERO PUSH2 0x26AF JUMPI DUP14 PUSH2 0x26D5 JUMP JUMPDEST DUP8 PUSH2 0x26CE JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x26D5 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x26E6 SWAP2 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2715 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5A7E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x272E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2742 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2766 SWAP2 SWAP1 PUSH2 0x538F JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP3 PUSH2 0x2775 JUMPI DUP2 PUSH2 0x2777 JUMP JUMPDEST DUP1 JUMPDEST PUSH1 0x0 SUB SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x1 EQ ISZERO PUSH2 0x27B2 JUMPI CALLER SWAP4 POP PUSH2 0x27D5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x2 EQ ISZERO PUSH2 0x27D5 JUMPI ADDRESS SWAP4 POP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x27E7 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x2970 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP1 DUP4 AND LT PUSH1 0x0 DUP1 PUSH2 0x2818 DUP6 DUP8 DUP7 PUSH2 0x3CCE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP12 DUP6 PUSH2 0x283E DUP16 PUSH2 0x3D0C JUMP JUMPDEST PUSH1 0x0 SUB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND ISZERO PUSH2 0x2863 JUMPI DUP14 PUSH2 0x2889 JUMP JUMPDEST DUP8 PUSH2 0x2882 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x2889 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x289A SWAP2 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x28C9 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5A7E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x28F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x291A SWAP2 SWAP1 PUSH2 0x538F JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP4 PUSH2 0x292F JUMPI DUP2 DUP4 PUSH1 0x0 SUB PUSH2 0x2935 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x0 SUB JUMPDEST SWAP1 SWAP9 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH2 0x2961 JUMPI DUP12 DUP2 EQ PUSH2 0x2961 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x297E DUP5 DUP3 PUSH2 0x3D3E JUMP JUMPDEST SWAP3 POP PUSH2 0x298B DUP5 PUSH1 0x14 PUSH2 0x3E3E JUMP JUMPDEST SWAP1 POP PUSH2 0x2998 DUP5 PUSH1 0x17 PUSH2 0x3D3E JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEE6 DUP6 PUSH2 0x29B2 DUP7 DUP7 DUP7 PUSH2 0x3F2E JUMP JUMPDEST PUSH2 0x3FAB JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 ISZERO PUSH2 0x2A12 JUMPI POP DUP1 SELFBALANCE LT ISZERO JUMPDEST ISZERO PUSH2 0x2B5B JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2B29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2B3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD0F SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ ISZERO PUSH2 0x2B89 JUMPI PUSH2 0x2B84 DUP5 DUP4 DUP4 PUSH2 0x3481 JUMP JUMPDEST PUSH2 0xD0F JUMP JUMPDEST PUSH2 0xD0F DUP5 DUP5 DUP5 DUP5 PUSH2 0x3AF1 JUMP JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0xC70 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x3FDB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2C27 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC70 SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP3 MLOAD LT ISZERO PUSH2 0x2C88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2CA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2CCA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 DUP2 PUSH1 0x1 DUP4 MLOAD SUB DUP2 MLOAD DUP2 LT PUSH2 0x2CDE JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD JUMPDEST DUP1 ISZERO PUSH2 0xCFA JUMPI PUSH1 0x0 DUP1 PUSH2 0x2D4B DUP8 DUP7 PUSH1 0x1 DUP7 SUB DUP2 MLOAD DUP2 LT PUSH2 0x2D2A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x2D3E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x41C2 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x2D6D DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2D5E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 PUSH2 0x42AA JUMP JUMPDEST DUP5 PUSH1 0x1 DUP6 SUB DUP2 MLOAD DUP2 LT PUSH2 0x2D7C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD PUSH2 0x2D0E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2DBF DUP6 DUP6 PUSH2 0x4380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 DUP6 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP6 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP11 SWAP1 SWAP5 SHL SWAP1 SWAP4 AND PUSH1 0x69 DUP5 ADD MSTORE PUSH1 0x7D DUP4 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH32 0x400E13FC6C59224F20228F0C0561806856AC34B7318F337F8012707C880C351F PUSH1 0x9D DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP3 ADD SWAP1 SWAP8 MSTORE DUP1 MLOAD SWAP7 ADD SWAP6 SWAP1 SWAP6 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP4 MLOAD SUB DUP2 LT ISZERO PUSH2 0x1A1D JUMPI PUSH1 0x0 DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2EB9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x2ED0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x2EE8 DUP4 DUP4 PUSH2 0x4380 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x2F18 PUSH32 0x0 DUP6 DUP6 PUSH2 0x2DB0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F7A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F9E SWAP2 SWAP1 PUSH2 0x56D4 JUMP JUMPDEST POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3000 JUMPI DUP3 DUP5 PUSH2 0x3003 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3044 DUP3 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12BA SWAP2 SWAP1 PUSH2 0x5A36 JUMP JUMPDEST SWAP6 POP PUSH2 0x3051 DUP7 DUP4 DUP4 PUSH2 0x4425 JUMP JUMPDEST SWAP5 POP POP POP POP POP PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3095 JUMPI DUP3 PUSH1 0x0 PUSH2 0x3099 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x2 DUP13 MLOAD SUB DUP11 LT PUSH2 0x30B0 JUMPI DUP11 PUSH2 0x30F1 JUMP JUMPDEST PUSH2 0x30F1 PUSH32 0x0 DUP10 DUP15 DUP14 PUSH1 0x2 ADD DUP2 MLOAD DUP2 LT PUSH2 0x30E4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2DB0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH32 0x22C0D9F00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 PUSH4 0x22C0D9F SWAP1 PUSH2 0x3159 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x24 DUP2 ADD PUSH2 0x5E00 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3187 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP12 ADD SWAP11 POP PUSH2 0x2E9E SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x20E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH32 0x0 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x3207 SWAP3 SWAP2 SWAP1 PUSH2 0x5AD0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE SWAP1 MLOAD PUSH2 0x3290 SWAP2 SWAP1 PUSH2 0x5A1A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x32CD JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x32D2 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xEE6 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xEE6 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xEE6 SWAP2 SWAP1 PUSH2 0x5287 JUMP JUMPDEST TIMESTAMP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x331B JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x3318 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x20E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x339B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x335E JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x33FD JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3402 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x1A1D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354450000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0xC70 DUP3 PUSH1 0x0 PUSH1 0x2B PUSH2 0x3FDB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 DUP6 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3556 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3519 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x35B8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x35BD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x35EB JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x35EB JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x35E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1780 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 MLOAD DUP6 MLOAD EQ PUSH2 0x3667 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3681 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x36BB JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x36A8 PUSH2 0x4E2E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x36A0 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x36D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3712 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x36FF PUSH2 0x4E2E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x36F7 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x3842 JUMPI PUSH1 0x0 DUP1 PUSH2 0x3741 DUP11 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3733 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH2 0x3869 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x374E DUP3 PUSH2 0x44FB JUMP JUMPDEST DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x375A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP PUSH2 0x377B DUP2 PUSH2 0x44FB JUMP JUMPDEST DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3787 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x37AB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x37BF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3801 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3815 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x3718 JUMP JUMPDEST POP PUSH2 0x384C DUP3 PUSH2 0x450C JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP4 POP PUSH2 0x385A DUP2 PUSH2 0x450C JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP3 POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3878 DUP7 PUSH2 0x45F4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3A96 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3894 DUP12 PUSH2 0x2970 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x38A7 DUP5 DUP5 DUP5 PUSH2 0x3CCE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP14 AND PUSH2 0x38D0 JUMPI PUSH2 0x38C0 DUP4 PUSH2 0x461F JUMP JUMPDEST PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND SWAP4 POP SWAP1 SIGNEXTEND SWAP1 POP PUSH2 0x3972 JUMP JUMPDEST PUSH2 0x38DA DUP4 DUP15 PUSH2 0x48B7 JUMP JUMPDEST DUP2 PUSH1 0x2 SIGNEXTEND SWAP2 POP POP DUP1 SWAP3 POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x392B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x393F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3963 SWAP2 SWAP1 PUSH2 0x570F JUMP JUMPDEST POP POP POP PUSH1 0x2 SWAP3 SWAP1 SWAP3 SIGNEXTEND SWAP4 POP POP POP POP JUMPDEST PUSH1 0x1 DUP10 SUB DUP8 EQ ISZERO PUSH2 0x39B3 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT SWAP10 POP PUSH2 0x39C2 JUMP JUMPDEST PUSH2 0x39BC DUP15 PUSH2 0x2B9D JUMP JUMPDEST SWAP14 POP DUP6 SWAP8 POP JUMPDEST PUSH1 0x0 DUP8 ISZERO DUP1 PUSH2 0x3A63 JUMPI POP DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x3A33 JUMPI DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x3A63 JUMP JUMPDEST DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3A78 JUMPI SWAP12 DUP3 ADD SWAP12 SWAP11 DUP2 ADD SWAP11 PUSH2 0x3A83 JUMP JUMPDEST DUP3 DUP14 SUB SWAP13 POP DUP2 DUP13 SUB SWAP12 POP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 POP PUSH2 0x387E SWAP4 POP POP POP POP JUMP JUMPDEST POP DUP3 PUSH2 0x3AE7 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MUL SWAP5 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 MUL SWAP4 POP JUMPDEST POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 DUP6 SWAP5 SWAP4 DUP11 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3BCE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3B91 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3C30 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3C35 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x3C63 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x3C63 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x177E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354460000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3D04 PUSH32 0x0 PUSH2 0x3CFF DUP7 DUP7 DUP7 PUSH2 0x3F2E JUMP JUMPDEST PUSH2 0x4CE8 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x3D3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x3DB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x3E25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x3EB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x3F25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3F36 PUSH2 0x4E45 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0x3F6E JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FB7 DUP4 DUP4 PUSH2 0x4CE8 JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x20E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0x404F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0x40C0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0x4132 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x4151 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x41B9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x418A JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x4172 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x41D1 DUP6 DUP6 PUSH2 0x4380 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x41E2 DUP9 DUP9 DUP9 PUSH2 0x2DB0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x423B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x4298 JUMPI DUP1 DUP3 PUSH2 0x429B JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x431A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F4F55545055545F414D4F554E54000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x432A JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x4333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x434B PUSH2 0x3E8 PUSH2 0x4345 DUP7 DUP9 PUSH2 0x3300 JUMP JUMPDEST SWAP1 PUSH2 0x3300 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x435F PUSH2 0x3E5 PUSH2 0x4345 DUP7 DUP10 PUSH2 0x31A0 JUMP JUMPDEST SWAP1 POP PUSH2 0x4376 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0x436F JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0x4E1E JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x43BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x43F6 JUMPI DUP3 DUP5 PUSH2 0x43F9 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x441E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x4495 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F494E5055545F414D4F554E5400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x44A5 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x44AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x44BC DUP6 PUSH2 0x3E5 PUSH2 0x3300 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x44CA DUP3 DUP6 PUSH2 0x3300 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x44E4 DUP4 PUSH2 0x44DE DUP9 PUSH2 0x3E8 PUSH2 0x3300 JUMP JUMPDEST SWAP1 PUSH2 0x4E1E JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0x44EF JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x45A1 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x4528 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4552 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH1 0x2 SIGNEXTEND MUL DUP4 ADD SWAP3 POP DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x4572 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 ADD SWAP2 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x4513 JUMP JUMPDEST POP DUP1 DUP3 DUP2 PUSH2 0x45AB JUMPI INVALID JUMPDEST SDIV SWAP3 POP PUSH1 0x0 DUP3 SLT DUP1 ISZERO PUSH2 0x45C6 JUMPI POP DUP1 DUP3 DUP2 PUSH2 0x45C2 JUMPI INVALID JUMPDEST SMOD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1E3E JUMPI POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP2 SWAP1 POP JUMP JUMPDEST MLOAD PUSH1 0x17 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC SWAP1 SWAP2 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x466B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x467F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x46A3 SWAP2 SWAP1 PUSH2 0x570F JUMP JUMPDEST POP SWAP4 SWAP8 POP SWAP2 SWAP6 POP SWAP4 POP POP PUSH1 0x1 PUSH2 0xFFFF DUP5 AND GT SWAP2 POP PUSH2 0x46EF SWAP1 POP JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5BD2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x472B SWAP2 SWAP1 PUSH2 0x5DE8 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4743 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4757 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x477B SWAP2 SWAP1 PUSH2 0x58DA JUMP JUMPDEST POP POP SWAP2 POP SWAP2 POP PUSH2 0x4789 PUSH2 0x32FC JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP3 PUSH4 0xFFFFFFFF AND EQ PUSH2 0x47A3 JUMPI DUP5 SWAP6 POP PUSH2 0x48AE JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0xFFFF AND PUSH1 0x1 DUP6 PUSH2 0xFFFF AND DUP8 PUSH2 0xFFFF AND ADD SUB DUP2 PUSH2 0x47BF JUMPI INVALID JUMPDEST MOD SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4800 SWAP2 SWAP1 PUSH2 0x5DF7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x482C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4850 SWAP2 SWAP1 PUSH2 0x58DA JUMP JUMPDEST SWAP4 POP POP SWAP3 POP SWAP3 POP DUP1 PUSH2 0x488E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5B9B JUMP JUMPDEST DUP3 DUP7 SUB PUSH4 0xFFFFFFFF DUP2 AND DUP4 DUP8 SUB PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x48A5 JUMPI INVALID JUMPDEST SDIV SWAP11 POP POP POP POP POP POP JUMPDEST POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP4 AND PUSH2 0x492C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4250000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x495B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4984 JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH32 0x883BDBFD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP4 PUSH4 0x883BDBFD SWAP4 DUP9 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 DUP6 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP12 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4A1F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4A07 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A56 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 LT ISZERO PUSH2 0x4A9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x4ABD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x4AD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x4AEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B1C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B04 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x4B45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x4B5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x4B77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4BA4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B8C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4BC4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4BD9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4BF3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4C08 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x4C25 JUMPI INVALID JUMPDEST SDIV SWAP7 POP PUSH1 0x0 DUP3 PUSH1 0x6 SIGNEXTEND SLT DUP1 ISZERO PUSH2 0x4C4F JUMPI POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x4C48 JUMPI INVALID JUMPDEST SMOD PUSH1 0x6 SIGNEXTEND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x4C7A JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 ADD SWAP6 JUMPDEST PUSH4 0xFFFFFFFF DUP9 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 PUSH1 0x20 DUP4 SWAP1 SHL AND PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP2 PUSH2 0x4CD8 JUMPI INVALID JUMPDEST DIV SWAP7 POP POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x4D2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x203C8EC649B23B7FAF9B73CCADFB1A67AF52A097119C82801F4947EC5DEB6C04 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x20E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xC73 DUP2 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4E81 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4E98 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x441E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4EC2 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x4ED7 PUSH2 0x4ED2 DUP4 PUSH2 0x5EC2 JUMP JUMPDEST PUSH2 0x5E9E JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP4 DUP6 MUL DUP8 ADD DUP5 ADD DUP9 LT ISZERO PUSH2 0x4EF3 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x4F2E JUMPI DUP2 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4F1C JUMPI DUP8 DUP9 REVERT JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4EF5 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4F5B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4F69 PUSH2 0x4ED2 DUP3 PUSH2 0x5EE0 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x4F7D JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xC73 DUP2 PUSH2 0x5F7D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4FF6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5001 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x501A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5025 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5047 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5052 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x5069 DUP2 PUSH2 0x5F4C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x508B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x5096 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x50AD DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x50C4 DUP2 PUSH2 0x5F4C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x50E7 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x50F2 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5110 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x5133 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x513E DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x515C DUP2 PUSH2 0x5F8F JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5188 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x519E JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x51AA DUP6 DUP3 DUP7 ADD PUSH2 0x4E70 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x51CB JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x51E2 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x51F5 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x5205 PUSH2 0x4ED2 DUP4 PUSH2 0x5EC2 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP9 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x523A JUMPI PUSH2 0x5228 DUP15 DUP7 DUP5 CALLDATALOAD DUP12 ADD ADD PUSH2 0x4F4B JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5211 JUMP JUMPDEST POP SWAP1 SWAP10 POP POP POP DUP9 ADD CALLDATALOAD SWAP3 POP POP DUP1 DUP3 GT ISZERO PUSH2 0x5252 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x525F DUP8 DUP3 DUP9 ADD PUSH2 0x4EB2 JUMP JUMPDEST SWAP4 POP POP PUSH2 0x526E PUSH1 0x40 DUP7 ADD PUSH2 0x4FC7 JUMP JUMPDEST SWAP2 POP PUSH2 0x527C PUSH1 0x60 DUP7 ADD PUSH2 0x4FDA JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5298 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5001 DUP3 PUSH2 0x4F3B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x52B5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x52D2 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x52DE DUP7 DUP3 DUP8 ADD PUSH2 0x4E70 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52FC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5312 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x3D04 DUP5 DUP3 DUP6 ADD PUSH2 0x4F4B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5332 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5348 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5354 DUP7 DUP3 DUP8 ADD PUSH2 0x4F4B JUMP JUMPDEST SWAP4 POP POP PUSH2 0x5363 PUSH1 0x20 DUP6 ADD PUSH2 0x4FC7 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x5069 DUP2 PUSH2 0x5F7D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5384 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5001 DUP2 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x53A1 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x53C7 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x53EC JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x53FF JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x540D JUMPI DUP5 DUP6 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x541E JUMPI DUP5 DUP6 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x543E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5454 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x5464 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x5472 PUSH2 0x4ED2 DUP3 PUSH2 0x5EE0 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x5486 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xEE6 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x5F20 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x54A8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x54BF JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x80 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x54D2 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT DUP4 DUP3 GT OR ISZERO PUSH2 0x54E7 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x54F8 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x5504 DUP8 DUP3 DUP7 ADD PUSH2 0x4F4B JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP2 POP PUSH2 0x5517 DUP3 PUSH2 0x5F4C JUMP JUMPDEST DUP2 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x554E JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x556B JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE PUSH2 0x5577 DUP4 PUSH2 0x4E65 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5585 PUSH1 0x20 DUP5 ADD PUSH2 0x4E65 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x5596 PUSH1 0x40 DUP5 ADD PUSH2 0x4FC7 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x55A7 PUSH1 0x60 DUP5 ADD PUSH2 0x4E65 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x55CC PUSH1 0xC0 DUP5 ADD PUSH2 0x4E65 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x55E9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x55FF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x80 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x5001 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x836 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x836 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x836 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5655 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x566C JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x40 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x567F JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT DUP4 DUP3 GT OR ISZERO PUSH2 0x5694 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x56A5 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x56B1 DUP8 DUP3 DUP7 ADD PUSH2 0x4F4B JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP3 POP PUSH2 0x56C4 DUP4 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x56E8 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x56F1 DUP5 PUSH2 0x4F97 JUMP JUMPDEST SWAP3 POP PUSH2 0x56FF PUSH1 0x20 DUP6 ADD PUSH2 0x4F97 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x5069 DUP2 PUSH2 0x5F7D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x5729 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x5734 DUP2 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD SWAP1 SWAP8 POP PUSH2 0x5745 DUP2 PUSH2 0x5F6E JUMP JUMPDEST SWAP6 POP PUSH2 0x5753 PUSH1 0x40 DUP10 ADD PUSH2 0x4FB5 JUMP JUMPDEST SWAP5 POP PUSH2 0x5761 PUSH1 0x60 DUP10 ADD PUSH2 0x4FB5 JUMP JUMPDEST SWAP4 POP PUSH2 0x576F PUSH1 0x80 DUP10 ADD PUSH2 0x4FB5 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH2 0x577F DUP2 PUSH2 0x5F8F JUMP JUMPDEST SWAP2 POP PUSH2 0x578D PUSH1 0xC0 DUP10 ADD PUSH2 0x4F3B JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x57AC JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5001 DUP3 PUSH2 0x4FC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x57C6 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x57DE JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x57F7 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x5809 DUP2 PUSH2 0x5F4C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5829 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x583B DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5110 DUP2 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5866 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x5069 DUP2 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x5896 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x58BA JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x58C6 DUP9 DUP3 DUP10 ADD PUSH2 0x4E70 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x50C4 DUP2 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x58EF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD PUSH2 0x58FA DUP2 PUSH2 0x5F7D JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x20 DUP6 ADD MLOAD DUP1 PUSH1 0x6 SIGNEXTEND DUP2 EQ PUSH2 0x5911 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x5922 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP2 POP PUSH2 0x527C PUSH1 0x60 DUP7 ADD PUSH2 0x4F3B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x5962 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x5F20 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP1 MSTORE JUMP JUMPDEST PUSH3 0xFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5A2C DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x5F20 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x5AC5 PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x594A JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x5B67 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x5B55 DUP6 DUP4 MLOAD PUSH2 0x594A JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5B1B JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x5001 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x594A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x5 DUP4 LT PUSH2 0x5B95 JUMPI INVALID JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F4E490000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4E454F0000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6F206D756368207265717565737465640000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH32 0x5444000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x13 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6F206C6974746C6520726563656976656400000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 ADD SWAP1 POP PUSH2 0x5D06 DUP3 DUP5 MLOAD PUSH2 0x5930 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x5D18 PUSH1 0x20 DUP5 ADD DUP3 PUSH2 0x5930 JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5D2B PUSH1 0x40 DUP5 ADD DUP3 PUSH2 0x599B JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x5D3E PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x5994 JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x5D51 PUSH1 0x80 DUP5 ADD DUP3 PUSH2 0x5994 JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD DUP2 DUP5 ADD MSTORE POP PUSH2 0x120 DUP1 DUP5 ADD MLOAD PUSH2 0x5D8F DUP3 DUP6 ADD DUP3 PUSH2 0x5930 JUMP JUMPDEST POP POP PUSH2 0x140 SWAP3 DUP4 ADD MLOAD SWAP2 SWAP1 SWAP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x5DBC PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x594A JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x4376 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x594A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x5E6F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5E89 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x441E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5EBA JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5ED6 JUMPI INVALID JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5EF4 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5F3B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5F23 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD0F JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x1497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1497 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "462:356:54:-:0;;;-1:-1:-1;;1343:57:52;;587:229:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;507:32:56;;;;;;;;549:34;;;;;;;520:18:16;;;;;;;548:12;;;;;462:356:54;;14:179:89;95:13;;-1:-1:-1;;;;;137:31:89;;127:42;;117:2;;183:1;180;173:12;117:2;76:117;;;:::o;198:482::-;;;;;372:3;360:9;351:7;347:23;343:33;340:2;;;394:6;386;379:22;340:2;422:42;454:9;422:42;:::i;:::-;412:52;;483:51;530:2;519:9;515:18;483:51;:::i;:::-;473:61;;553:51;600:2;589:9;585:18;553:51;:::i;:::-;543:61;;623:51;670:2;659:9;655:18;623:51;:::i;:::-;613:61;;330:350;;;;;;;:::o;:::-;462:356:54;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:32512:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "65:87:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "75:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "97:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "84:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "75:5:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "140:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "113:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "113:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "113:33:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "44:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "55:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:138:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "247:314:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "296:30:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "305:8:89"
                                        },
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "315:8:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "298:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "298:26:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "298:26:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "275:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "283:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "271:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "271:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "290:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "267:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "267:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "260:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "260:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "257:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "335:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "358:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "345:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "345:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "335:6:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "408:30:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "417:8:89"
                                        },
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "427:8:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "410:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "410:26:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "410:26:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "380:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "388:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "377:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "377:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "374:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "447:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "463:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "471:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "459:17:89"
                              },
                              "variableNames": [
                                {
                                  "name": "arrayPos",
                                  "nodeType": "YulIdentifier",
                                  "src": "447:8:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "539:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "548:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "551:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "541:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "541:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "541:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "499:6:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "511:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "519:4:89",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mul",
                                              "nodeType": "YulIdentifier",
                                              "src": "507:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "507:17:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "495:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "495:30:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "527:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "491:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "491:41:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "534:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "488:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "488:50:89"
                              },
                              "nodeType": "YulIf",
                              "src": "485:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "210:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "218:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "arrayPos",
                            "nodeType": "YulTypedName",
                            "src": "226:8:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "236:6:89",
                            "type": ""
                          }
                        ],
                        "src": "157:404:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "636:770:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "685:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "694:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "701:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "687:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "687:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "687:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "664:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "672:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "660:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "660:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "679:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "656:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "656:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "649:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "649:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "646:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "718:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "741:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "728:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "728:20:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "722:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "757:14:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "767:4:89",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "761:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "780:74:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "850:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_array$_t_bytes_$dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "806:43:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "806:47:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "791:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "791:63:89"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "784:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "863:16:89",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "876:3:89"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "867:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "895:3:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "900:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "888:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "888:15:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "888:15:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "912:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "923:3:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "928:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "919:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "919:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "912:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "940:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "955:6:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "963:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "951:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "951:15:89"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "944:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1021:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1030:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1037:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1023:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1023:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1023:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "989:6:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "1001:2:89"
                                              },
                                              {
                                                "name": "_2",
                                                "nodeType": "YulIdentifier",
                                                "src": "1005:2:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mul",
                                              "nodeType": "YulIdentifier",
                                              "src": "997:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "997:11:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "985:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "985:24:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1011:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "981:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "981:33:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "1016:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "978:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "978:42:89"
                              },
                              "nodeType": "YulIf",
                              "src": "975:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1054:14:89",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "1063:5:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1058:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1122:255:89",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "1136:30:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "1162:3:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "calldataload",
                                        "nodeType": "YulIdentifier",
                                        "src": "1149:12:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1149:17:89"
                                    },
                                    "variables": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulTypedName",
                                        "src": "1140:5:89",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "1248:24:89",
                                      "statements": [
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "name": "array",
                                                "nodeType": "YulIdentifier",
                                                "src": "1257:5:89"
                                              },
                                              {
                                                "name": "array",
                                                "nodeType": "YulIdentifier",
                                                "src": "1264:5:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "1250:6:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1250:20:89"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "1250:20:89"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "value",
                                              "nodeType": "YulIdentifier",
                                              "src": "1192:5:89"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "value",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1203:5:89"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1210:34:89",
                                                  "type": "",
                                                  "value": "0xffffffffffffffffffffffffffffffff"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "and",
                                                "nodeType": "YulIdentifier",
                                                "src": "1199:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1199:46:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "eq",
                                            "nodeType": "YulIdentifier",
                                            "src": "1189:2:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1189:57:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "iszero",
                                        "nodeType": "YulIdentifier",
                                        "src": "1182:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1182:65:89"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "1179:2:89"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "1292:3:89"
                                        },
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "1297:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1285:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1285:18:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1285:18:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1316:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "1327:3:89"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1332:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1323:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1323:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "1316:3:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1348:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "1359:3:89"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1364:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1355:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1355:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "1348:3:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1088:1:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1091:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1085:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1085:9:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1095:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1097:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1106:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1109:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1102:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1102:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1097:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1081:3:89",
                                "statements": []
                              },
                              "src": "1077:300:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1386:14:89",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "1395:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "1386:5:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_t_array$_t_uint128_$dyn",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "610:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "618:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "626:5:89",
                            "type": ""
                          }
                        ],
                        "src": "566:840:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1470:107:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1480:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1495:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1489:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1489:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "1480:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1555:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1564:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1567:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1557:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1557:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1557:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1524:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "1545:5:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "1538:6:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1538:13:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "1531:6:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1531:21:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1521:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1521:32:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1514:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1514:40:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1511:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1449:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1460:5:89",
                            "type": ""
                          }
                        ],
                        "src": "1411:166:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1636:431:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1685:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1694:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1701:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1687:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1687:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1687:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "1664:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1672:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1660:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1660:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "1679:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1656:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1656:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1649:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1649:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1646:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1718:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1741:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1728:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1728:20:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1722:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1757:64:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1817:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "1787:29:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1787:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1772:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1772:49:89"
                              },
                              "variables": [
                                {
                                  "name": "array_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1761:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1837:7:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1846:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1830:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1830:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1830:19:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1897:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1906:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1913:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1899:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1899:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1899:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "1872:6:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "1880:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1868:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1868:15:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1885:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1864:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1864:26:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "1892:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1861:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1861:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1858:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "array_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1947:7:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1956:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1943:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1943:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1967:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1975:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1963:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1963:17:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1982:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "1930:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1930:55:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1930:55:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "array_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2009:7:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2018:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2005:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2005:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2023:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2001:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2001:27:89"
                                  },
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "2030:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1994:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1994:42:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1994:42:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2045:16:89",
                              "value": {
                                "name": "array_1",
                                "nodeType": "YulIdentifier",
                                "src": "2054:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "2045:5:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1610:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "1618:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "1626:5:89",
                            "type": ""
                          }
                        ],
                        "src": "1582:485:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2134:128:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2144:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2159:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2153:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2153:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2144:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2240:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2249:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2252:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2242:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2242:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2242:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2188:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "2199:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2206:30:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2195:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2195:42:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2185:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2185:53:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2178:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2178:61:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2175:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint112_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2113:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2124:5:89",
                            "type": ""
                          }
                        ],
                        "src": "2072:190:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2328:104:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2338:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2353:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2347:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2347:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2338:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2410:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2419:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2422:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2412:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2412:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2412:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2382:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "2393:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2400:6:89",
                                            "type": "",
                                            "value": "0xffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2389:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2389:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2379:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2379:29:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2372:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2372:37:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2369:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint16_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2307:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2318:5:89",
                            "type": ""
                          }
                        ],
                        "src": "2267:165:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2487:113:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2497:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2519:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2506:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2506:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2497:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2578:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2587:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2590:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2580:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2580:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2580:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2548:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "2559:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2566:8:89",
                                            "type": "",
                                            "value": "0xffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2555:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2555:20:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2545:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2545:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2538:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2538:39:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2535:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2466:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2477:5:89",
                            "type": ""
                          }
                        ],
                        "src": "2437:163:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2655:86:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2665:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2687:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2674:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2674:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2665:5:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2729:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "2703:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2703:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2703:32:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2634:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2645:5:89",
                            "type": ""
                          }
                        ],
                        "src": "2605:136:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2816:189:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2862:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2871:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2879:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2864:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2864:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2864:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2837:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2846:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2833:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2833:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2858:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2829:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2829:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2826:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2897:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2923:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2910:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2910:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2901:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2969:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2942:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2942:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2942:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2984:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2994:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2984:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2782:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2793:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2805:6:89",
                            "type": ""
                          }
                        ],
                        "src": "2746:259:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3097:240:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3143:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3152:6:89"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3160:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3145:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3145:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3145:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3118:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3127:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3114:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3114:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3139:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3110:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3110:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3107:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3178:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3204:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3191:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3191:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3182:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3250:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3223:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3223:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3223:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3265:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3275:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3265:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3289:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3316:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3327:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3312:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3312:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3299:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3299:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3289:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3055:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3066:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3078:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3086:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3010:327:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3446:366:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3492:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "3501:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "3509:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3494:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3494:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3494:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3467:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3476:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3463:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3463:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3488:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3459:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3459:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3456:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3527:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3553:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3540:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3540:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3531:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3599:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3572:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3572:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3572:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3614:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3624:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3614:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3638:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3665:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3676:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3661:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3661:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3648:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3648:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3638:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3689:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3721:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3732:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3717:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3717:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3704:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3704:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3693:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3772:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3745:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3745:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3745:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3789:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "3799:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3789:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3396:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3407:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3419:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3427:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3435:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3342:470:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3955:545:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4002:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4011:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4019:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4004:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4004:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4004:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3976:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3985:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3972:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3972:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3997:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3968:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3968:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3965:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4037:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4063:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4050:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4050:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4041:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4109:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4082:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4082:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4082:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4124:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4134:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4124:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4148:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4175:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4186:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4171:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4171:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4158:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4158:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4148:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4199:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4231:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4242:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4227:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4227:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4214:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4214:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4203:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4282:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4255:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4255:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4255:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4299:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "4309:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4299:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4325:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4352:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4363:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4348:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4348:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4335:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4335:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "4325:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4376:48:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4408:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4419:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4404:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4404:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4391:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4391:33:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "4380:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4460:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4433:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4433:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4433:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4477:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "4487:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "4477:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3889:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3900:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3912:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3920:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3928:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "3936:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "3944:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3817:683:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4626:418:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4673:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4682:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4690:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4675:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4675:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4675:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4647:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4656:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4643:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4643:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4668:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4639:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4639:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4636:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4708:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4734:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4721:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4721:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4712:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4780:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4753:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4753:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4753:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4795:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4805:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4795:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4819:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4846:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4857:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4842:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4842:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4829:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4829:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4819:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4870:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4897:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4908:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4893:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4893:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4880:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4880:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4870:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4921:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4953:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4964:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4949:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4949:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4936:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4936:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4925:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5004:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4977:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4977:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4977:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5021:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "5031:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5021:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4568:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4579:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4591:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4599:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4607:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4615:6:89",
                            "type": ""
                          }
                        ],
                        "src": "4505:539:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5202:520:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5249:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "5258:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "5266:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5251:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5251:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5251:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5223:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5232:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5219:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5219:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5244:3:89",
                                    "type": "",
                                    "value": "192"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5215:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5215:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5212:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5284:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5310:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5297:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5297:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5288:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5356:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5329:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5329:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5329:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5371:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5381:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5371:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5395:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5422:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5433:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5418:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5418:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5405:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5405:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5395:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5446:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5473:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5484:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5469:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5469:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5456:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5456:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5446:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5497:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5529:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5540:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5525:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5525:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5512:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5512:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5501:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5578:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint8",
                                  "nodeType": "YulIdentifier",
                                  "src": "5553:24:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5553:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5553:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5595:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "5605:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5595:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5621:43:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5648:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5659:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5644:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5644:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5631:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5631:33:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "5621:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5673:43:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5700:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5711:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5696:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5696:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5683:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5683:33:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "5673:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5128:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5139:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5151:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5159:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5167:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "5175:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "5183:6:89",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "5191:6:89",
                            "type": ""
                          }
                        ],
                        "src": "5049:673:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5843:358:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5889:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5898:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5906:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5891:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5891:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5891:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5864:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5873:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5860:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5860:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5885:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5856:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5856:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5853:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5924:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5951:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5938:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5938:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "5928:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6004:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "6013:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "6021:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6006:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6006:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6006:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "5976:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5984:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5973:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5973:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5970:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6039:102:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6113:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "6124:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6109:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6109:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "6133:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "6065:43:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6065:76:89"
                              },
                              "variables": [
                                {
                                  "name": "value0_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6043:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6053:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6150:18:89",
                              "value": {
                                "name": "value0_1",
                                "nodeType": "YulIdentifier",
                                "src": "6160:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "6150:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6177:18:89",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "6187:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "6177:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5801:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5812:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5824:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5832:6:89",
                            "type": ""
                          }
                        ],
                        "src": "5727:474:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6384:1162:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6431:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6440:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6448:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6433:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6433:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6433:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6405:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6414:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "6401:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6401:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6426:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6397:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6397:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6394:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6466:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6493:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6480:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6480:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "6470:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6512:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6522:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6516:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6567:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6576:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6584:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6569:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6569:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6569:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "6555:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6563:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6552:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6552:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6549:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6602:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6616:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "6627:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6612:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6612:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "6606:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6682:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6691:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6699:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6684:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6684:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6684:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "6661:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6665:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "6657:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6657:13:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6672:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "6653:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6653:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6646:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6646:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6643:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6717:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6740:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6727:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6727:16:89"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "6721:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6752:14:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6762:4:89",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "6756:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6775:74:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "6845:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_array$_t_bytes_$dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "6801:43:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6801:47:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6786:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6786:63:89"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "6779:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6858:16:89",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "6871:3:89"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6862:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "6890:3:89"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "6895:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6883:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6883:15:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6883:15:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6907:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "6918:3:89"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "6923:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6914:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6914:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "6907:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6935:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6950:2:89"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "6954:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6946:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6946:11:89"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "6939:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6966:15:89",
                              "value": {
                                "name": "value2",
                                "nodeType": "YulIdentifier",
                                "src": "6975:6:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6970:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7035:165:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "7056:3:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "_2",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "7088:2:89"
                                                    },
                                                    {
                                                      "arguments": [
                                                        {
                                                          "name": "src",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "7105:3:89"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "calldataload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "7092:12:89"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "7092:17:89"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "7084:3:89"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "7084:26:89"
                                                },
                                                {
                                                  "name": "_4",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "7112:2:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "7080:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "7080:35:89"
                                            },
                                            {
                                              "name": "dataEnd",
                                              "nodeType": "YulIdentifier",
                                              "src": "7117:7:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "abi_decode_t_bytes",
                                            "nodeType": "YulIdentifier",
                                            "src": "7061:18:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7061:64:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7049:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7049:77:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7049:77:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7139:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "7150:3:89"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "7155:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7146:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7146:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "7139:3:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7171:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "7182:3:89"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "7187:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7178:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7178:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "7171:3:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "7001:1:89"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "7004:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6998:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6998:9:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "7008:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7010:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "7019:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7022:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7015:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7015:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "7010:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6994:3:89",
                                "statements": []
                              },
                              "src": "6990:210:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7209:15:89",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "7219:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7209:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7233:48:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7266:9:89"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "7277:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7262:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7262:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7249:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7249:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7237:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7310:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7319:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7327:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7312:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7312:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7312:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7296:8:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7306:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7293:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7293:16:89"
                              },
                              "nodeType": "YulIf",
                              "src": "7290:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7345:79:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7394:9:89"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7405:8:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7390:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7390:24:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "7416:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_uint128_$dyn",
                                  "nodeType": "YulIdentifier",
                                  "src": "7355:34:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7355:69:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "7345:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7433:49:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7467:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7478:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7463:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7463:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint24",
                                  "nodeType": "YulIdentifier",
                                  "src": "7443:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7443:39:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7433:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7491:49:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7525:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7536:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7521:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7521:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "7501:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7501:39:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "7491:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_array$_t_uint128_$dyn_memory_ptrt_uint24t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6326:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "6337:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6349:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6357:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6365:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "6373:6:89",
                            "type": ""
                          }
                        ],
                        "src": "6206:1340:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7629:136:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7675:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "7684:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "7692:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7677:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7677:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7677:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "7650:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7659:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "7646:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7646:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7671:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7642:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7642:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "7639:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7710:49:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7749:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "7720:28:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7720:39:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7710:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7595:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "7606:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7618:6:89",
                            "type": ""
                          }
                        ],
                        "src": "7551:214:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7903:409:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7949:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7958:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7966:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7951:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7951:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7951:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "7924:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7933:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "7920:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7920:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7945:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7916:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7916:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "7913:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7984:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8007:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7994:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7994:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7984:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8026:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8057:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8068:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8053:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8053:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8040:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8040:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "8030:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8115:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8124:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8132:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8117:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8117:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8117:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "8087:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8095:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8084:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8084:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8081:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8150:102:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8224:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "8235:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8220:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8220:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "8244:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "8176:43:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8176:76:89"
                              },
                              "variables": [
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8154:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8164:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8261:18:89",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "8271:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "8261:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8288:18:89",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "8298:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "8288:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes32t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7853:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "7864:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7876:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7884:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7892:6:89",
                            "type": ""
                          }
                        ],
                        "src": "7770:542:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8396:263:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8442:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "8451:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "8459:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8444:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8444:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8444:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "8417:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8426:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "8413:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8413:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8438:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8409:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8409:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8406:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8477:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8504:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8491:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8491:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "8481:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8557:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "8566:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "8574:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8559:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8559:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8559:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "8529:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8537:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8526:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8526:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8523:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8592:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8625:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "8636:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8621:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8621:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "8645:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "8602:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8602:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "8592:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8362:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "8373:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8385:6:89",
                            "type": ""
                          }
                        ],
                        "src": "8317:342:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8775:440:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8821:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8830:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8838:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8823:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8823:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8823:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "8796:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8805:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "8792:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8792:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8817:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8788:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8788:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8785:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8856:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8883:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8870:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8870:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "8860:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8936:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8945:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8953:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8938:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8938:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8938:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "8908:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8916:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8905:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8905:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8902:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8971:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9004:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "9015:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9000:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9000:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "9024:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "8981:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8981:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "8971:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9041:49:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9075:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9086:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9071:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9071:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint24",
                                  "nodeType": "YulIdentifier",
                                  "src": "9051:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9051:39:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "9041:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9099:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9129:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9140:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9125:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9125:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9112:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9112:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "9103:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "9179:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "9153:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9153:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9153:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9194:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "9204:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "9194:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes_memory_ptrt_uint24t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8725:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "8736:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8748:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8756:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8764:6:89",
                            "type": ""
                          }
                        ],
                        "src": "8664:551:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9288:187:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9334:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "9343:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "9351:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9336:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9336:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9336:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "9309:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9318:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "9305:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9305:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9330:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9301:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9301:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "9298:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9369:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9395:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9382:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9382:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "9373:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "9439:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_int24",
                                  "nodeType": "YulIdentifier",
                                  "src": "9414:24:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9414:31:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9414:31:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9454:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "9464:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "9454:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9254:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "9265:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9277:6:89",
                            "type": ""
                          }
                        ],
                        "src": "9220:255:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9576:157:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9622:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "9631:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "9639:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9624:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9624:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9624:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "9597:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9606:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "9593:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9593:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9618:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9589:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9589:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "9586:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9657:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9673:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9667:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9667:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "9657:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9692:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9712:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9723:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9708:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9708:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9702:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9702:25:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "9692:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int256t_int256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9534:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "9545:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9557:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9565:6:89",
                            "type": ""
                          }
                        ],
                        "src": "9480:253:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9859:654:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9905:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "9914:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "9922:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9907:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9907:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9907:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "9880:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9889:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "9876:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9876:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9901:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9872:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9872:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "9869:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9940:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9963:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9950:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9950:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "9940:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9982:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10009:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10020:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10005:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10005:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9992:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9992:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "9982:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10033:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10064:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10075:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10060:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10060:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10047:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10047:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "10037:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10088:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10098:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10092:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10143:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10152:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10160:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10145:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10145:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10145:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "10131:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10139:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10128:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10128:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10125:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10178:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10192:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "10203:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10188:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10188:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "10182:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10258:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10267:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10275:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10260:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10260:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10260:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "10237:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10241:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10233:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10233:13:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "10248:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10229:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10229:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10222:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10222:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10219:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10293:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "10320:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10307:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10307:16:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "10297:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10350:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10359:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10367:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10352:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10352:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10352:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10338:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10346:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10335:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10335:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10332:2:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10426:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10435:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10443:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10428:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10428:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10428:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "10399:2:89"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "10403:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10395:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10395:15:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10412:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10391:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10391:24:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "10417:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10388:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10388:37:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10385:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10461:21:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "10475:2:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10479:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10471:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10471:11:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "10461:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10491:16:89",
                              "value": {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "10501:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "10491:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int256t_int256t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9801:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "9812:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9824:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9832:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "9840:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "9848:6:89",
                            "type": ""
                          }
                        ],
                        "src": "9738:775:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10609:585:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10655:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10664:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10672:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10657:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10657:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10657:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "10630:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10639:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "10626:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10626:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10651:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10622:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10622:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10619:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10690:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10710:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10704:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10704:16:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "10694:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10763:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10772:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10780:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10765:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10765:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10765:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "10735:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10743:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10732:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10732:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10729:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10798:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10812:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "10823:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10808:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10808:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10802:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10878:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10887:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10895:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10880:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10880:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10880:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "10857:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10861:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10853:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10853:13:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "10868:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10849:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10849:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10842:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10842:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10839:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10913:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10929:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10923:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10923:9:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "10917:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10941:62:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "10999:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "10969:29:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10969:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "10954:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10954:49:89"
                              },
                              "variables": [
                                {
                                  "name": "array",
                                  "nodeType": "YulTypedName",
                                  "src": "10945:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "11019:5:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "11026:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11012:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11012:17:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11012:17:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11075:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11084:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11092:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11077:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11077:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11077:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "11052:2:89"
                                          },
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "11056:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "11048:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11048:11:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11061:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11044:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11044:20:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "11066:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11041:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11041:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11038:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11136:2:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11140:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11132:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11132:11:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "array",
                                        "nodeType": "YulIdentifier",
                                        "src": "11149:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11156:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11145:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11145:14:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "11161:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "11110:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11110:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11110:54:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11173:15:89",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "11183:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "11173:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10575:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "10586:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10598:6:89",
                            "type": ""
                          }
                        ],
                        "src": "10518:676:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11303:938:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11349:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11358:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11366:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11351:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11351:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11351:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "11324:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11333:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "11320:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11320:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11345:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11316:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11316:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11313:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11384:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11411:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "11398:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11398:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "11388:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11430:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11440:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11434:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11485:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11494:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11502:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11487:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11487:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11487:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "11473:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11481:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11470:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11470:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11467:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11520:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11534:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "11545:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11530:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11530:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "11524:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11592:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11601:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11609:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11594:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11594:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11594:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "11572:7:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "11581:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "11568:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11568:16:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11586:4:89",
                                    "type": "",
                                    "value": "0x80"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11564:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11564:27:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11561:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11627:23:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11647:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "11641:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11641:9:89"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "11631:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11659:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "11681:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11689:4:89",
                                    "type": "",
                                    "value": "0x80"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11677:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11677:17:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "11663:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11753:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "11755:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11755:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11755:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "11712:10:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11724:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "11709:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11709:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "11732:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "11744:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "11729:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11729:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "11706:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11706:46:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11703:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11782:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "11786:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11775:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11775:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11775:22:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11806:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "11835:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "11822:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11822:16:89"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11810:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11867:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11876:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11884:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11869:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11869:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11869:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11853:8:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11863:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11850:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11850:16:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11847:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "11909:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "11940:2:89"
                                          },
                                          {
                                            "name": "offset_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "11944:8:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "11936:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11936:17:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "11955:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "11917:18:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11917:46:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11902:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11902:62:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11902:62:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11973:38:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "12003:2:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12007:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11999:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11999:11:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "11986:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11986:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "11977:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "12047:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "12020:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12020:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12020:33:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12073:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12081:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12069:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12069:15:89"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "12086:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12062:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12062:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12062:30:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12112:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12120:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12108:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12108:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "12142:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12146:2:89",
                                            "type": "",
                                            "value": "64"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12138:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12138:11:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "12125:12:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12125:25:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12101:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12101:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12101:50:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12171:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12179:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12167:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12167:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "12201:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12205:2:89",
                                            "type": "",
                                            "value": "96"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12197:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12197:11:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "12184:12:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12184:25:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12160:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12160:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12160:50:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12219:16:89",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "12229:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "12219:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_ExactInputParams_$8594_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11269:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "11280:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11292:6:89",
                            "type": ""
                          }
                        ],
                        "src": "11199:1042:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12356:787:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12403:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "12412:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "12420:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "12405:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12405:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12405:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "12377:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12386:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "12373:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12373:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12398:3:89",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "12369:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12369:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "12366:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12438:23:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12458:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "12452:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12452:9:89"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "12442:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12470:34:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "12492:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12500:3:89",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12488:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12488:16:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "12474:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12579:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "12581:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12581:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12581:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12522:10:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12534:18:89",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "12519:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12519:34:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12558:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12570:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "12555:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12555:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "12516:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12516:62:89"
                              },
                              "nodeType": "YulIf",
                              "src": "12513:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12608:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "12612:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12601:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12601:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12601:22:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "12639:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12668:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "12647:20:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12647:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12632:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12632:47:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12632:47:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12699:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12707:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12695:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12695:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "12737:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12748:2:89",
                                            "type": "",
                                            "value": "32"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12733:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12733:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "12712:20:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12712:40:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12688:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12688:65:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12688:65:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12773:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12781:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12769:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12769:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "12810:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12821:2:89",
                                            "type": "",
                                            "value": "64"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12806:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12806:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_uint24",
                                      "nodeType": "YulIdentifier",
                                      "src": "12786:19:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12786:39:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12762:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12762:64:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12762:64:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12846:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12854:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12842:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12842:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "12884:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12895:2:89",
                                            "type": "",
                                            "value": "96"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12880:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12880:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "12859:20:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12859:40:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12835:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12835:65:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12835:65:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12920:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12928:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12916:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12916:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "12951:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12962:3:89",
                                            "type": "",
                                            "value": "128"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12947:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12947:19:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "12934:12:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12934:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12909:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12909:59:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12909:59:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12988:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12996:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12984:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12984:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "13019:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "13030:3:89",
                                            "type": "",
                                            "value": "160"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "13015:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13015:19:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "13002:12:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13002:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12977:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12977:59:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12977:59:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "13056:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13064:3:89",
                                        "type": "",
                                        "value": "192"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13052:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13052:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "13095:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "13106:3:89",
                                            "type": "",
                                            "value": "192"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "13091:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13091:19:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "13070:20:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13070:41:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13045:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13045:67:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13045:67:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13121:16:89",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "13131:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "13121:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12322:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "12333:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "12345:6:89",
                            "type": ""
                          }
                        ],
                        "src": "12246:897:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13255:320:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13301:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13310:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13318:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13303:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13303:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13303:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "13276:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13285:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "13272:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13272:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13297:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13268:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13268:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "13265:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13336:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13363:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "13350:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13350:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "13340:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13416:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13425:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13433:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13418:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13418:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13418:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "13388:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13396:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13385:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13385:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "13382:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13451:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13465:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "13476:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13461:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13461:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "13455:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13522:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13531:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13539:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13524:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13524:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13524:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "13503:7:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "13512:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "13499:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13499:16:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13517:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13495:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13495:26:89"
                              },
                              "nodeType": "YulIf",
                              "src": "13492:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13557:12:89",
                              "value": {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "13567:2:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "13557:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_ExactOutputParams_$8634_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13221:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "13232:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "13244:6:89",
                            "type": ""
                          }
                        ],
                        "src": "13148:427:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13693:107:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13740:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13749:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13757:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13742:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13742:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13742:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "13714:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13723:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "13710:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13710:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13735:3:89",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13706:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13706:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "13703:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13775:19:89",
                              "value": {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "13785:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "13775:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_ExactOutputSingleParams_$8617_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13659:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "13670:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "13682:6:89",
                            "type": ""
                          }
                        ],
                        "src": "13580:220:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13918:107:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13965:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13974:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13982:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13967:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13967:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13967:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "13939:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13948:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "13935:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13935:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13960:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13931:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13931:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "13928:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14000:19:89",
                              "value": {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "14010:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "14000:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_IncreaseLiquidityParams_$8546_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13884:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "13895:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "13907:6:89",
                            "type": ""
                          }
                        ],
                        "src": "13805:220:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14130:107:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14177:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14186:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14194:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14179:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14179:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14179:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "14151:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "14160:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "14147:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14147:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14172:3:89",
                                    "type": "",
                                    "value": "256"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14143:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14143:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14140:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14212:19:89",
                              "value": {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "14222:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "14212:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_MintParams_$8527_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14096:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "14107:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "14119:6:89",
                            "type": ""
                          }
                        ],
                        "src": "14030:207:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14346:824:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14392:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14401:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14409:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14394:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14394:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14394:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "14367:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "14376:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "14363:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14363:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14388:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14359:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14359:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14356:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14427:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14454:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "14441:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14441:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "14431:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14473:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "14483:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "14477:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14528:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14537:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14545:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14530:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14530:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14530:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "14516:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14524:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14513:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14513:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14510:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14563:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14577:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "14588:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14573:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14573:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "14567:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14635:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14644:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14652:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14637:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14637:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14637:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "14615:7:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "14624:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "14611:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14611:16:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14629:4:89",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14607:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14607:27:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14604:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14670:25:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14690:4:89",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "14684:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14684:11:89"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "14674:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14704:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "14726:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14734:4:89",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14722:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14722:17:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "14708:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14798:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "14800:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14800:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14800:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "14757:10:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "14769:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "14754:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14754:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "14777:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "14789:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "14774:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14774:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "14751:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14751:46:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14748:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14827:4:89",
                                    "type": "",
                                    "value": "0x40"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "14833:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14820:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14820:24:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14820:24:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14853:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "14882:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "14869:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14869:16:89"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "14857:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14914:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14923:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14931:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14916:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14916:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14916:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14900:8:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14910:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14897:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14897:16:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14894:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "14956:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "14987:2:89"
                                          },
                                          {
                                            "name": "offset_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "14991:8:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "14983:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14983:17:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "15002:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "14964:18:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14964:46:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14949:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14949:62:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14949:62:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15020:38:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "15050:2:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15054:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15046:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15046:11:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "15033:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15033:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "15024:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "15094:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "15067:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15067:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15067:33:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "15120:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15128:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15116:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15116:15:89"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "15133:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15109:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15109:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15109:30:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15148:16:89",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "15158:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "15148:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_SwapCallbackData_$6193_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14312:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "14323:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "14335:6:89",
                            "type": ""
                          }
                        ],
                        "src": "14242:928:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15289:321:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15335:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "15344:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "15352:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "15337:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15337:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15337:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "15310:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15319:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "15306:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15306:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15331:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "15302:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15302:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "15299:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15370:52:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "15412:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint112_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "15380:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15380:42:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "15370:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15431:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15477:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15488:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15473:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15473:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint112_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "15441:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15441:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "15431:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15501:38:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15524:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15535:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15520:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15520:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "15514:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15514:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "15505:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "15574:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "15548:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15548:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15548:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15589:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "15599:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "15589:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint112t_uint112t_uint32_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "15239:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "15250:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "15262:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "15270:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "15278:6:89",
                            "type": ""
                          }
                        ],
                        "src": "15175:435:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15685:189:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15731:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "15740:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "15748:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "15733:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15733:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15733:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "15706:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15715:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "15702:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15702:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15727:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "15698:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15698:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "15695:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15766:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "15792:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "15779:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15779:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "15770:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "15838:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "15811:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15811:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15811:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15853:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "15863:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "15853:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "15651:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "15662:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "15674:6:89",
                            "type": ""
                          }
                        ],
                        "src": "15615:259:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16052:694:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16099:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "16108:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "16116:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "16101:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16101:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16101:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "16073:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16082:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "16069:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16069:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16094:3:89",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "16065:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16065:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "16062:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16134:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "16153:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "16147:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16147:16:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "16138:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "16199:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "16172:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16172:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16172:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16214:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "16224:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "16214:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16238:40:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16263:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16274:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16259:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16259:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "16253:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16253:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "16242:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "16312:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_int24",
                                  "nodeType": "YulIdentifier",
                                  "src": "16287:24:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16287:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16287:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16329:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "16339:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "16329:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16355:60:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16400:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16411:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16396:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16396:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "16365:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16365:50:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "16355:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16424:60:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16469:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16480:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16465:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16465:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "16434:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16434:50:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "16424:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16493:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16538:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16549:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16534:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16534:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "16503:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16503:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "16493:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16563:41:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16588:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16599:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16584:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16584:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "16578:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16578:26:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "16567:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "16638:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint8",
                                  "nodeType": "YulIdentifier",
                                  "src": "16613:24:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16613:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16613:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16655:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "16665:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "16655:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16681:59:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16724:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16735:3:89",
                                        "type": "",
                                        "value": "192"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16720:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16720:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "16691:28:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16691:49:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value6",
                                  "nodeType": "YulIdentifier",
                                  "src": "16681:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "15970:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "15981:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "15993:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "16001:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "16009:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "16017:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "16025:6:89",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "16033:6:89",
                            "type": ""
                          },
                          {
                            "name": "value6",
                            "nodeType": "YulTypedName",
                            "src": "16041:6:89",
                            "type": ""
                          }
                        ],
                        "src": "15879:867:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16820:127:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16866:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "16875:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "16883:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "16868:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16868:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16868:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "16841:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16850:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "16837:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16837:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16862:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "16833:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16833:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "16830:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16901:40:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "16931:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint24",
                                  "nodeType": "YulIdentifier",
                                  "src": "16911:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16911:30:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "16901:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "16786:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "16797:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "16809:6:89",
                            "type": ""
                          }
                        ],
                        "src": "16751:196:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17022:120:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17068:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17077:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17085:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17070:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17070:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17070:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "17043:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17052:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "17039:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17039:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17064:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "17035:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17035:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "17032:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17103:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17126:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17113:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17113:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "17103:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "16988:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "16999:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "17011:6:89",
                            "type": ""
                          }
                        ],
                        "src": "16952:190:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17228:113:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17274:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17283:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17291:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17276:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17276:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17276:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "17249:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17258:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "17245:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17245:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17270:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "17241:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17241:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "17238:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17309:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17325:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17319:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17319:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "17309:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "17194:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "17205:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "17217:6:89",
                            "type": ""
                          }
                        ],
                        "src": "17147:194:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17433:240:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17479:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17488:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17496:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17481:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17481:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17481:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "17454:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17463:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "17450:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17450:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17475:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "17446:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17446:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "17443:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17514:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17537:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17524:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17524:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "17514:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "17556:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17586:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17597:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17582:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17582:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17569:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17569:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "17560:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "17637:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "17610:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17610:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17610:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17652:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "17662:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "17652:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "17391:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "17402:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "17414:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "17422:6:89",
                            "type": ""
                          }
                        ],
                        "src": "17346:327:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17799:418:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17846:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "17855:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "17863:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17848:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17848:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17848:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "17820:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17829:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "17816:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17816:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17841:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "17812:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17812:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "17809:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17881:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17904:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17891:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17891:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "17881:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "17923:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17953:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17964:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17949:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17949:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17936:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17936:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "17927:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "18004:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "17977:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17977:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17977:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18019:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "18029:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "18019:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18043:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18070:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18081:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18066:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18066:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "18053:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18053:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "18043:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "18094:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18126:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18137:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18122:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18122:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "18109:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18109:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "18098:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "18177:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "18150:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18150:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18150:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18194:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "18204:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "18194:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "17741:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "17752:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "17764:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "17772:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "17780:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "17788:6:89",
                            "type": ""
                          }
                        ],
                        "src": "17678:539:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "18355:409:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "18401:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18410:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18418:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "18403:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "18403:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "18403:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "18376:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18385:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "18372:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18372:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18397:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "18368:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18368:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "18365:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18436:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "18459:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "18446:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18446:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "18436:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "18478:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18509:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18520:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18505:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18505:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "18492:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18492:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "18482:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "18567:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18576:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18584:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "18569:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "18569:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "18569:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "18539:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18547:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "18536:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18536:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "18533:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "18602:102:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18676:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "18687:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18672:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18672:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "18696:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "18628:43:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18628:76:89"
                              },
                              "variables": [
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "18606:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "18616:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18713:18:89",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "18723:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "18713:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18740:18:89",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "18750:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "18740:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "18305:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "18316:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "18328:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "18336:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "18344:6:89",
                            "type": ""
                          }
                        ],
                        "src": "18222:542:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "18873:291:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "18919:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18928:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18936:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "18921:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "18921:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "18921:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "18894:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18903:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "18890:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18890:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18915:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "18886:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18886:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "18883:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18954:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "18977:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "18964:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18964:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "18954:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18996:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19023:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19034:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19019:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19019:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19006:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19006:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "18996:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "19047:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19077:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19088:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19073:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19073:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19060:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19060:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "19051:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "19128:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "19101:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19101:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19101:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19143:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "19153:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "19143:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "18823:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "18834:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "18846:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "18854:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "18862:6:89",
                            "type": ""
                          }
                        ],
                        "src": "18769:395:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "19325:581:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "19372:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "19381:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "19389:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "19374:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "19374:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "19374:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "19346:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19355:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "19342:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19342:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19367:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "19338:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19338:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "19335:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19407:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "19430:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19417:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19417:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "19407:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19449:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19476:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19487:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19472:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19472:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19459:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19459:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "19449:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "19500:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19531:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19542:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19527:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19527:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19514:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19514:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "19504:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "19589:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "19598:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "19606:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "19591:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "19591:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "19591:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "19561:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19569:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "19558:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19558:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "19555:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "19624:102:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19698:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "19709:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19694:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19694:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "19718:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "19650:43:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19650:76:89"
                              },
                              "variables": [
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "19628:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value3_1",
                                  "nodeType": "YulTypedName",
                                  "src": "19638:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19735:18:89",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "19745:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "19735:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19762:18:89",
                              "value": {
                                "name": "value3_1",
                                "nodeType": "YulIdentifier",
                                "src": "19772:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "19762:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "19789:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19819:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19830:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19815:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19815:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19802:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19802:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "19793:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "19870:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "19843:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19843:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19843:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19885:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "19895:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "19885:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_array$_t_address_$dyn_calldata_ptrt_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "19259:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "19270:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "19282:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "19290:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "19298:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "19306:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "19314:6:89",
                            "type": ""
                          }
                        ],
                        "src": "19169:737:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "20037:525:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "20084:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "20093:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "20101:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "20086:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "20086:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "20086:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "20058:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20067:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "20054:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20054:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20079:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "20050:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20050:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "20047:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20119:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "20138:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "20132:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20132:16:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "20123:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "20183:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "20157:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20157:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20157:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20198:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "20208:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "20198:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20222:40:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20247:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20258:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20243:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20243:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "20237:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20237:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "20226:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "20318:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "20327:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "20335:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "20320:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "20320:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "20320:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "20284:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "20304:1:89",
                                            "type": "",
                                            "value": "6"
                                          },
                                          {
                                            "name": "value_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "20307:7:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "20293:10:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "20293:22:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "20281:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20281:35:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "20274:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20274:43:89"
                              },
                              "nodeType": "YulIf",
                              "src": "20271:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20353:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "20363:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "20353:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20379:40:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20404:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20415:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20400:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20400:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "20394:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20394:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "20383:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "20455:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "20428:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20428:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20428:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20472:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "20482:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "20472:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20498:58:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20541:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20552:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20537:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20537:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "20508:28:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20508:48:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "20498:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint32t_int56t_uint160t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "19979:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "19990:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "20002:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "20010:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "20018:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "20026:6:89",
                            "type": ""
                          }
                        ],
                        "src": "19911:651:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "20613:83:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "20630:3:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "20639:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20646:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "20635:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20635:54:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20623:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20623:67:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20623:67:89"
                            }
                          ]
                        },
                        "name": "abi_encode_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "20597:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "20604:3:89",
                            "type": ""
                          }
                        ],
                        "src": "20567:129:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "20752:267:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20762:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "20782:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "20776:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20776:12:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "20766:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "20804:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "20809:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20797:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20797:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20797:19:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "20851:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20858:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20847:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20847:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "20869:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20874:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20865:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20865:14:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "20881:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "20825:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20825:63:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20825:63:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20897:116:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "20912:3:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "20925:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "20933:2:89",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "20921:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "20921:15:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "20938:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "20917:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "20917:88:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20908:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20908:98:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "21008:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "20904:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20904:109:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "20897:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "20729:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "20736:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "20744:3:89",
                            "type": ""
                          }
                        ],
                        "src": "20701:318:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21068:49:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21085:3:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21101:1:89",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "21104:5:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "21090:10:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21090:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21078:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21078:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21078:33:89"
                            }
                          ]
                        },
                        "name": "abi_encode_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "21052:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "21059:3:89",
                            "type": ""
                          }
                        ],
                        "src": "21024:93:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21167:49:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21184:3:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "21193:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21200:8:89",
                                        "type": "",
                                        "value": "0xffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "21189:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21189:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21177:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21177:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21177:33:89"
                            }
                          ]
                        },
                        "name": "abi_encode_t_uint24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "21151:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "21158:3:89",
                            "type": ""
                          }
                        ],
                        "src": "21122:94:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21394:341:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "21404:76:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "21414:66:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "21408:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21496:3:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "21509:2:89",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "21513:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "21505:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "21505:15:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "21522:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "21501:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21501:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21489:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21489:37:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21489:37:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "21546:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21551:2:89",
                                        "type": "",
                                        "value": "20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "21542:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21542:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "21564:3:89",
                                            "type": "",
                                            "value": "232"
                                          },
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "21569:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "21560:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "21560:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21578:66:89",
                                        "type": "",
                                        "value": "0xffffff0000000000000000000000000000000000000000000000000000000000"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "21556:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21556:89:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21535:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21535:111:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21535:111:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "21666:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21671:2:89",
                                        "type": "",
                                        "value": "23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "21662:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21662:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "21684:2:89",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value2",
                                            "nodeType": "YulIdentifier",
                                            "src": "21688:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "21680:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "21680:15:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "21697:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "21676:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21676:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21655:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21655:46:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21655:46:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "21710:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21721:3:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "21726:2:89",
                                    "type": "",
                                    "value": "43"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "21717:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21717:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "21710:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "21354:3:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "21359:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "21367:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "21375:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "21386:3:89",
                            "type": ""
                          }
                        ],
                        "src": "21221:514:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21887:126:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21910:3:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "21915:6:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "21923:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "21897:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21897:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21897:33:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "21939:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21953:3:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "21958:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "21949:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21949:16:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "21943:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "21981:2:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "21985:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21974:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21974:15:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21974:15:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "21998:9:89",
                              "value": {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "22005:2:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "21998:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "21855:3:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "21860:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "21868:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "21879:3:89",
                            "type": ""
                          }
                        ],
                        "src": "21740:273:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22155:137:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "22165:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "22185:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "22179:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22179:13:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "22169:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "22227:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "22235:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "22223:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22223:17:89"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "22242:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "22247:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "22201:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22201:53:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "22201:53:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "22263:23:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "22274:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "22279:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "22270:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22270:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "22263:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "22131:3:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "22136:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "22147:3:89",
                            "type": ""
                          }
                        ],
                        "src": "22018:274:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22398:125:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "22408:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "22420:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22431:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "22416:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22416:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "22408:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "22450:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "22465:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "22473:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "22461:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22461:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "22443:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22443:74:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "22443:74:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "22367:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "22378:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "22389:4:89",
                            "type": ""
                          }
                        ],
                        "src": "22297:226:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22637:125:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "22647:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "22659:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22670:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "22655:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22655:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "22647:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "22689:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "22704:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "22712:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "22700:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22700:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "22682:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22682:74:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "22682:74:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_payable__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "22606:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "22617:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "22628:4:89",
                            "type": ""
                          }
                        ],
                        "src": "22528:234:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22896:198:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "22906:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "22918:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22929:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "22914:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22914:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "22906:4:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "22941:52:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "22951:42:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "22945:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "23009:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "23024:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "23032:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "23020:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23020:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23002:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23002:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23002:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23056:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23067:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23052:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23052:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "23076:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "23084:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "23072:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23072:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23045:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23045:43:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23045:43:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "22857:9:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "22868:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "22876:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "22887:4:89",
                            "type": ""
                          }
                        ],
                        "src": "22767:327:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "23322:370:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "23332:52:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "23342:42:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "23336:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "23400:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "23415:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "23423:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "23411:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23411:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23393:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23393:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23393:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23447:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23458:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23443:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23443:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "23477:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "23470:6:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "23470:14:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "23463:6:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23463:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23436:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23436:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23436:50:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23506:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23517:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23502:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23502:18:89"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "23522:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23495:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23495:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23495:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23549:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23560:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23545:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23545:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value3",
                                        "nodeType": "YulIdentifier",
                                        "src": "23569:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "23577:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "23565:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23565:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23538:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23538:43:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23538:43:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23601:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23612:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23597:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23597:19:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23618:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23590:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23590:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23590:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "23631:55:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "23658:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23670:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23681:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23666:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23666:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "23639:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23639:47:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "23631:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "23259:9:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "23270:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "23278:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "23286:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "23294:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "23302:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "23313:4:89",
                            "type": ""
                          }
                        ],
                        "src": "23099:593:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "23826:168:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "23836:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "23848:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23859:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "23844:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23844:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "23836:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "23878:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "23893:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23901:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "23889:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23889:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23871:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23871:74:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23871:74:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23965:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23976:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23961:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23961:18:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "23981:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23954:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23954:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23954:34:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "23787:9:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "23798:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "23806:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "23817:4:89",
                            "type": ""
                          }
                        ],
                        "src": "23697:297:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "24168:696:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24178:12:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "24188:2:89",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "24182:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24199:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "24217:9:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "24228:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "24213:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24213:18:89"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "24203:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "24247:9:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "24258:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "24240:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24240:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "24240:21:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24270:17:89",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "24281:6:89"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "24274:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24296:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "24316:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "24310:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24310:13:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "24300:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "24339:6:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "24347:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "24332:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24332:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "24332:22:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "24363:25:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "24374:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "24385:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "24370:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24370:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "24363:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24397:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "24419:9:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "24434:6:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "24442:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mul",
                                          "nodeType": "YulIdentifier",
                                          "src": "24430:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "24430:15:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "24415:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "24415:31:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "24448:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "24411:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24411:40:89"
                              },
                              "variables": [
                                {
                                  "name": "tail_2",
                                  "nodeType": "YulTypedName",
                                  "src": "24401:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24460:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "24478:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "24486:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "24474:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24474:15:89"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "24464:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24498:13:89",
                              "value": {
                                "name": "tail",
                                "nodeType": "YulIdentifier",
                                "src": "24507:4:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "24502:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "24569:266:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "24590:3:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "tail_2",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "24603:6:89"
                                                },
                                                {
                                                  "name": "headStart",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "24611:9:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "24599:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "24599:22:89"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "24623:66:89",
                                              "type": "",
                                              "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "24595:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "24595:95:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "24583:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "24583:108:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "24583:108:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "24704:51:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "srcPtr",
                                              "nodeType": "YulIdentifier",
                                              "src": "24739:6:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "24733:5:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "24733:13:89"
                                        },
                                        {
                                          "name": "tail_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "24748:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "abi_encode_t_bytes",
                                        "nodeType": "YulIdentifier",
                                        "src": "24714:18:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "24714:41:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "tail_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "24704:6:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "24768:25:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "24782:6:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "24790:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "24778:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "24778:15:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "24768:6:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "24806:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "24817:3:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "24822:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "24813:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "24813:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "24806:3:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "24531:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "24534:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "24528:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24528:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "24542:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "24544:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "24553:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "24556:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "24549:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "24549:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "24544:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "24524:3:89",
                                "statements": []
                              },
                              "src": "24520:315:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "24844:14:89",
                              "value": {
                                "name": "tail_2",
                                "nodeType": "YulIdentifier",
                                "src": "24852:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "24844:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "24137:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "24148:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "24159:4:89",
                            "type": ""
                          }
                        ],
                        "src": "23999:865:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "24988:100:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25005:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25016:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "24998:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24998:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "24998:21:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "25028:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "25055:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "25067:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "25078:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "25063:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "25063:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "25036:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25036:46:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "25028:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "24957:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "24968:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "24979:4:89",
                            "type": ""
                          }
                        ],
                        "src": "24869:219:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "25209:123:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "25219:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25231:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25242:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "25227:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25227:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "25219:4:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "25279:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "25281:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "25281:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "25281:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "25267:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "25275:1:89",
                                        "type": "",
                                        "value": "5"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "25264:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "25264:13:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "25257:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25257:21:89"
                              },
                              "nodeType": "YulIf",
                              "src": "25254:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25308:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "25319:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "25301:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25301:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "25301:25:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_enum$_ApprovalType_$8468__to_t_uint8__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "25178:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "25189:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "25200:4:89",
                            "type": ""
                          }
                        ],
                        "src": "25093:239:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "25458:100:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25475:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25486:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "25468:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25468:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "25468:21:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "25498:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "25525:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "25537:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "25548:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "25533:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "25533:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "25506:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25506:46:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "25498:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "25427:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "25438:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "25449:4:89",
                            "type": ""
                          }
                        ],
                        "src": "25337:221:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "25737:152:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25754:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25765:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "25747:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25747:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "25747:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "25788:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "25799:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "25784:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "25784:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25804:1:89",
                                    "type": "",
                                    "value": "3"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "25777:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25777:29:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "25777:29:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "25826:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "25837:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "25822:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "25822:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "25842:5:89",
                                    "type": "",
                                    "value": "ONI"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "25815:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25815:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "25815:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "25857:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25869:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25880:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "25865:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25865:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "25857:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_4375a34c158c497e1dec923d39179cd2bff1d358f7876b16ed4f850d3b707895__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "25714:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "25728:4:89",
                            "type": ""
                          }
                        ],
                        "src": "25563:326:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "26068:152:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26085:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26096:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26078:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26078:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26078:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26119:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26130:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26115:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26115:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26135:1:89",
                                    "type": "",
                                    "value": "3"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26108:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26108:29:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26108:29:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26157:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26168:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26153:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26153:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "26173:5:89",
                                    "type": "",
                                    "value": "NEO"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26146:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26146:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26146:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "26188:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26200:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26211:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "26196:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26196:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "26188:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_6dc5790d7c4bfaaa2e4f8e2cd517bacd4a3831f85c0964e56f2743cbb847bc46__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "26045:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "26059:4:89",
                            "type": ""
                          }
                        ],
                        "src": "25894:326:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "26399:168:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26416:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26427:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26409:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26409:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26409:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26450:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26461:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26446:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26446:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26466:2:89",
                                    "type": "",
                                    "value": "18"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26439:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26439:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26439:30:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26489:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26500:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26485:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26485:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "26505:20:89",
                                    "type": "",
                                    "value": "Too much requested"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26478:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26478:48:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26478:48:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "26535:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26547:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26558:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "26543:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26543:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "26535:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_a5c1362ddf12293b907d8907d79f16e40792a7ddc4f09ee6d70cfec4ad443305__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "26376:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "26390:4:89",
                            "type": ""
                          }
                        ],
                        "src": "26225:342:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "26746:151:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26763:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26774:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26756:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26756:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26756:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26797:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26808:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26793:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26793:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26813:1:89",
                                    "type": "",
                                    "value": "2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26786:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26786:29:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26786:29:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26835:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26846:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26831:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26831:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "26851:4:89",
                                    "type": "",
                                    "value": "TD"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26824:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26824:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26824:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "26865:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26877:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26888:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "26873:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26873:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "26865:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_df7085977c0a4e0ff243c8cdd75cc6add5df901d8b8ca4cde5e0319089f27136__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "26723:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "26737:4:89",
                            "type": ""
                          }
                        ],
                        "src": "26572:325:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "27076:169:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "27093:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "27104:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27086:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27086:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27086:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27127:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27138:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27123:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27123:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "27143:2:89",
                                    "type": "",
                                    "value": "19"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27116:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27116:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27116:30:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27166:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27177:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27162:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27162:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "27182:21:89",
                                    "type": "",
                                    "value": "Too little received"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27155:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27155:49:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27155:49:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "27213:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "27225:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "27236:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "27221:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27221:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "27213:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_f037a9cbca9be03859489f289f0cf5f85c0414bbfdd9785bc7ab31bd734e249c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "27053:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "27067:4:89",
                            "type": ""
                          }
                        ],
                        "src": "26902:343:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "27433:399:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "27443:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "27455:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "27466:3:89",
                                    "type": "",
                                    "value": "192"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "27451:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27451:19:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "27443:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "27486:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "27503:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27497:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27497:13:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27479:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27479:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27479:32:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27531:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27542:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27527:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27527:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "27559:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "27567:4:89",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "27555:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "27555:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27549:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27549:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27520:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27520:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27520:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27594:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27605:4:89",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27590:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27590:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "27622:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "27630:4:89",
                                            "type": "",
                                            "value": "0x40"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "27618:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "27618:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27612:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27612:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27583:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27583:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27583:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27657:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27668:4:89",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27653:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27653:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "27685:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "27693:4:89",
                                            "type": "",
                                            "value": "0x60"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "27681:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "27681:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27675:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27675:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27646:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27646:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27646:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27720:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27731:4:89",
                                        "type": "",
                                        "value": "0x80"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27716:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27716:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "27748:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "27756:4:89",
                                            "type": "",
                                            "value": "0x80"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "27744:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "27744:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27738:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27738:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27709:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27709:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27709:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27783:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27794:4:89",
                                        "type": "",
                                        "value": "0xa0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27779:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27779:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "27811:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "27819:4:89",
                                            "type": "",
                                            "value": "0xa0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "27807:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "27807:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27801:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27801:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27772:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27772:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27772:54:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_IncreaseLiquidityParams_$2797_memory_ptr__to_t_struct$_IncreaseLiquidityParams_$2797_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "27402:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "27413:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "27424:4:89",
                            "type": ""
                          }
                        ],
                        "src": "27250:582:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "27994:1077:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "28004:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "28016:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "28027:3:89",
                                    "type": "",
                                    "value": "352"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "28012:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28012:19:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "28004:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28067:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "28061:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28061:13:89"
                                  },
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "28076:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "28040:20:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28040:46:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28040:46:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28095:44:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28125:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28133:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28121:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28121:17:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "28115:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28115:24:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0",
                                  "nodeType": "YulTypedName",
                                  "src": "28099:12:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memberValue0",
                                    "nodeType": "YulIdentifier",
                                    "src": "28169:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28187:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28198:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28183:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28183:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "28148:20:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28148:56:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28148:56:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28213:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28245:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28253:4:89",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28241:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28241:17:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "28235:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28235:24:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_1",
                                  "nodeType": "YulTypedName",
                                  "src": "28217:14:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "28288:14:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28308:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28319:4:89",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28304:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28304:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_uint24",
                                  "nodeType": "YulIdentifier",
                                  "src": "28268:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28268:57:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28268:57:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28334:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28366:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28374:4:89",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28362:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28362:17:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "28356:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28356:24:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_2",
                                  "nodeType": "YulTypedName",
                                  "src": "28338:14:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "28408:14:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28428:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28439:4:89",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28424:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28424:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_int24",
                                  "nodeType": "YulIdentifier",
                                  "src": "28389:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28389:56:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28389:56:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28454:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28486:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28494:4:89",
                                        "type": "",
                                        "value": "0x80"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28482:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28482:17:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "28476:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28476:24:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_3",
                                  "nodeType": "YulTypedName",
                                  "src": "28458:14:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "28528:14:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28548:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28559:4:89",
                                        "type": "",
                                        "value": "0x80"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28544:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28544:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_int24",
                                  "nodeType": "YulIdentifier",
                                  "src": "28509:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28509:56:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28509:56:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28585:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28596:4:89",
                                        "type": "",
                                        "value": "0xa0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28581:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28581:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "28613:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "28621:4:89",
                                            "type": "",
                                            "value": "0xa0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "28609:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "28609:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "28603:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28603:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "28574:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28574:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28574:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28648:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28659:4:89",
                                        "type": "",
                                        "value": "0xc0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28644:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28644:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "28676:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "28684:4:89",
                                            "type": "",
                                            "value": "0xc0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "28672:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "28672:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "28666:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28666:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "28637:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28637:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28637:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28711:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28722:4:89",
                                        "type": "",
                                        "value": "0xe0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28707:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28707:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "28739:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "28747:4:89",
                                            "type": "",
                                            "value": "0xe0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "28735:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "28735:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "28729:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28729:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "28700:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28700:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28700:54:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28763:16:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "28773:6:89",
                                "type": "",
                                "value": "0x0100"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "28767:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28799:9:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "28810:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28795:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28795:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "28825:6:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "28833:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "28821:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "28821:15:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "28815:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28815:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "28788:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28788:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28788:50:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28847:16:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "28857:6:89",
                                "type": "",
                                "value": "0x0120"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "28851:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28872:44:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28904:6:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "28912:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28900:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28900:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "28894:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28894:22:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_4",
                                  "nodeType": "YulTypedName",
                                  "src": "28876:14:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "28946:14:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28966:9:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "28977:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28962:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28962:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "28925:20:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28925:56:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28925:56:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28990:16:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "29000:6:89",
                                "type": "",
                                "value": "0x0140"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "28994:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "29026:9:89"
                                      },
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "29037:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "29022:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29022:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "29052:6:89"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "29060:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "29048:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "29048:15:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "29042:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29042:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29015:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29015:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29015:50:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_MintParams_$2770_memory_ptr__to_t_struct$_MintParams_$2770_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "27963:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "27974:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "27985:4:89",
                            "type": ""
                          }
                        ],
                        "src": "27837:1234:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "29245:328:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "29262:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29273:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29255:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29255:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29255:21:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "29285:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "29311:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "29305:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29305:13:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0",
                                  "nodeType": "YulTypedName",
                                  "src": "29289:12:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "29338:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "29349:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "29334:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29334:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29354:4:89",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29327:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29327:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29327:32:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "29368:66:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memberValue0",
                                    "nodeType": "YulIdentifier",
                                    "src": "29401:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "29419:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "29430:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "29415:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29415:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "29382:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29382:52:89"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "29372:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "29454:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "29465:4:89",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "29450:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29450:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "29486:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "29494:2:89",
                                                "type": "",
                                                "value": "32"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "29482:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "29482:15:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "29476:5:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "29476:22:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "29500:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "29472:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29472:71:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29443:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29443:101:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29443:101:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "29553:14:89",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "29561:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "29553:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_SwapCallbackData_$6193_memory_ptr__to_t_struct$_SwapCallbackData_$6193_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "29214:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "29225:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "29236:4:89",
                            "type": ""
                          }
                        ],
                        "src": "29076:497:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "29678:89:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "29688:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "29700:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29711:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "29696:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29696:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "29688:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "29730:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "29745:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "29753:6:89",
                                        "type": "",
                                        "value": "0xffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "29741:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29741:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29723:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29723:38:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29723:38:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint16__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "29647:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "29658:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "29669:4:89",
                            "type": ""
                          }
                        ],
                        "src": "29578:189:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "29873:76:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "29883:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "29895:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29906:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "29891:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29891:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "29883:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "29925:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "29936:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29918:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29918:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29918:25:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "29842:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "29853:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "29864:4:89",
                            "type": ""
                          }
                        ],
                        "src": "29772:177:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "30157:280:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "30174:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "30185:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "30167:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30167:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "30167:25:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "30212:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "30223:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "30208:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30208:18:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "30228:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "30201:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30201:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "30201:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "30255:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "30266:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "30251:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30251:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "30275:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "30283:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "30271:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30271:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "30244:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30244:83:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "30244:83:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "30347:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "30358:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "30343:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30343:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "30363:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "30336:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30336:31:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "30336:31:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "30376:55:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "30403:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "30415:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "30426:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "30411:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30411:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "30384:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30384:47:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "30376:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "30102:9:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "30113:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "30121:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "30129:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "30137:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "30148:4:89",
                            "type": ""
                          }
                        ],
                        "src": "29954:483:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "30536:498:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "30546:51:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "ptr_to_tail",
                                    "nodeType": "YulIdentifier",
                                    "src": "30585:11:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "30572:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30572:25:89"
                              },
                              "variables": [
                                {
                                  "name": "rel_offset_of_tail",
                                  "nodeType": "YulTypedName",
                                  "src": "30550:18:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "30745:22:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "30754:4:89"
                                        },
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "30760:4:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "30747:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "30747:18:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "30747:18:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "rel_offset_of_tail",
                                        "nodeType": "YulIdentifier",
                                        "src": "30620:18:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [],
                                                "functionName": {
                                                  "name": "calldatasize",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "30648:12:89"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "30648:14:89"
                                              },
                                              {
                                                "name": "base_ref",
                                                "nodeType": "YulIdentifier",
                                                "src": "30664:8:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "30644:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "30644:29:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "30675:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "30640:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "30640:102:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "30616:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30616:127:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "30609:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30609:135:89"
                              },
                              "nodeType": "YulIf",
                              "src": "30606:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "30776:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "base_ref",
                                    "nodeType": "YulIdentifier",
                                    "src": "30794:8:89"
                                  },
                                  {
                                    "name": "rel_offset_of_tail",
                                    "nodeType": "YulIdentifier",
                                    "src": "30804:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "30790:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30790:33:89"
                              },
                              "variables": [
                                {
                                  "name": "addr_1",
                                  "nodeType": "YulTypedName",
                                  "src": "30780:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "30832:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "addr_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "30855:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "30842:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30842:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "30832:6:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "30905:22:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "30914:4:89"
                                        },
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "30920:4:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "30907:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "30907:18:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "30907:18:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "30877:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "30885:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "30874:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30874:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "30871:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "30936:25:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "addr_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "30948:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "30956:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "30944:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30944:17:89"
                              },
                              "variableNames": [
                                {
                                  "name": "addr",
                                  "nodeType": "YulIdentifier",
                                  "src": "30936:4:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31012:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "31021:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "31024:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "31014:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31014:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31014:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "addr",
                                    "nodeType": "YulIdentifier",
                                    "src": "30977:4:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "calldatasize",
                                          "nodeType": "YulIdentifier",
                                          "src": "30987:12:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "30987:14:89"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "31003:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "30983:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30983:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "sgt",
                                  "nodeType": "YulIdentifier",
                                  "src": "30973:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30973:38:89"
                              },
                              "nodeType": "YulIf",
                              "src": "30970:2:89"
                            }
                          ]
                        },
                        "name": "access_calldata_tail_t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "base_ref",
                            "nodeType": "YulTypedName",
                            "src": "30493:8:89",
                            "type": ""
                          },
                          {
                            "name": "ptr_to_tail",
                            "nodeType": "YulTypedName",
                            "src": "30503:11:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "addr",
                            "nodeType": "YulTypedName",
                            "src": "30519:4:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "30525:6:89",
                            "type": ""
                          }
                        ],
                        "src": "30442:592:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "31083:198:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "31093:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31109:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "31103:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31103:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "31093:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "31121:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "31143:6:89"
                                  },
                                  {
                                    "name": "size",
                                    "nodeType": "YulIdentifier",
                                    "src": "31151:4:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "31139:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31139:17:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "31125:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31231:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "31233:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31233:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31233:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "31174:10:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "31186:18:89",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "31171:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "31171:34:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "31210:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "31222:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "31207:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "31207:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "31168:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31168:62:89"
                              },
                              "nodeType": "YulIf",
                              "src": "31165:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31260:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "31264:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "31253:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31253:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "31253:22:89"
                            }
                          ]
                        },
                        "name": "allocateMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "31063:4:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "31072:6:89",
                            "type": ""
                          }
                        ],
                        "src": "31039:242:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "31359:108:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31403:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "31405:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31405:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31405:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "31375:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31383:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "31372:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31372:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "31369:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "31425:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "31441:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "31449:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "31437:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "31437:17:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31456:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "31433:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31433:28:89"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "31425:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_t_array$_t_bytes_$dyn",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "31339:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "31350:4:89",
                            "type": ""
                          }
                        ],
                        "src": "31286:181:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "31531:181:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31575:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "31577:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31577:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31577:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "31547:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31555:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "31544:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31544:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "31541:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "31597:109:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "31617:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "31625:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "31613:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "31613:17:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "31632:66:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "31609:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "31609:90:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31701:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "31605:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31605:101:89"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "31597:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "31511:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "31522:4:89",
                            "type": ""
                          }
                        ],
                        "src": "31472:240:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "31770:205:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "31780:10:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "31789:1:89",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "31784:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31849:63:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "31874:3:89"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "31879:1:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "31870:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "31870:11:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "31893:3:89"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "31898:1:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "31889:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "31889:11:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "31883:5:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "31883:18:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "31863:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31863:39:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31863:39:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "31810:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "31813:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "31807:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31807:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "31821:19:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "31823:15:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "31832:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "31835:2:89",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "31828:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31828:10:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "31823:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "31803:3:89",
                                "statements": []
                              },
                              "src": "31799:113:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31938:31:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "31951:3:89"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "31956:6:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "31947:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "31947:16:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "31965:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "31940:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31940:27:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31940:27:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "31927:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "31930:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "31924:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31924:13:89"
                              },
                              "nodeType": "YulIf",
                              "src": "31921:2:89"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "31748:3:89",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "31753:3:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "31758:6:89",
                            "type": ""
                          }
                        ],
                        "src": "31717:258:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "32027:109:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "32114:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32123:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32126:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "32116:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "32116:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "32116:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "32050:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "32061:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "32068:42:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "32057:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "32057:54:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "32047:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "32047:65:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "32040:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "32040:73:89"
                              },
                              "nodeType": "YulIf",
                              "src": "32037:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "32016:5:89",
                            "type": ""
                          }
                        ],
                        "src": "31980:156:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "32186:75:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "32239:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32248:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32251:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "32241:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "32241:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "32241:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "32209:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "32227:1:89",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "32230:5:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "32216:10:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "32216:20:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "32206:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "32206:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "32199:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "32199:39:89"
                              },
                              "nodeType": "YulIf",
                              "src": "32196:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "32175:5:89",
                            "type": ""
                          }
                        ],
                        "src": "32141:120:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "32312:77:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "32367:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32376:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32379:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "32369:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "32369:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "32369:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "32335:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "32346:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "32353:10:89",
                                            "type": "",
                                            "value": "0xffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "32342:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "32342:22:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "32332:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "32332:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "32325:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "32325:41:89"
                              },
                              "nodeType": "YulIf",
                              "src": "32322:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "32301:5:89",
                            "type": ""
                          }
                        ],
                        "src": "32266:123:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "32439:71:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "32488:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32497:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32500:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "32490:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "32490:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "32490:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "32462:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "32473:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "32480:4:89",
                                            "type": "",
                                            "value": "0xff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "32469:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "32469:16:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "32459:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "32459:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "32452:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "32452:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "32449:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_uint8",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "32428:5:89",
                            "type": ""
                          }
                        ],
                        "src": "32394:116:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n    function abi_decode_t_array$_t_address_$dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(arrayPos, arrayPos) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(arrayPos, arrayPos) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, mul(length, 0x20)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_t_array$_t_uint128_$dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocateMemory(array_allocation_size_t_array$_t_bytes_$dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let src := add(offset, _2)\n        if gt(add(add(offset, mul(_1, _2)), _2), end) { revert(array, array) }\n        let i := array\n        for { } lt(i, _1) { i := add(i, 1) }\n        {\n            let value := calldataload(src)\n            if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(array, array) }\n            mstore(dst, value)\n            dst := add(dst, _2)\n            src := add(src, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_t_bool_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_t_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := calldataload(offset)\n        let array_1 := allocateMemory(array_allocation_size_t_bytes(_1))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), array)\n        array := array_1\n    }\n    function abi_decode_t_uint112_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_t_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_t_uint24(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffff))) { revert(0, 0) }\n    }\n    function abi_decode_t_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_t_uint32(value)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value1, value1) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_t_address(value_1)\n        value2 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(value2, value2) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_t_address(value_1)\n        value2 := value_1\n        value3 := calldataload(add(headStart, 96))\n        let value_2 := calldataload(add(headStart, 128))\n        validator_revert_t_address(value_2)\n        value4 := value_2\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_t_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(value2, value2) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_t_uint8(value_1)\n        value3 := value_1\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let value0_1, value1_1 := abi_decode_t_array$_t_address_$dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_decode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_array$_t_uint128_$dyn_memory_ptrt_uint24t_uint32(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value2, value2) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value2, value2) }\n        let _3 := calldataload(_2)\n        let _4 := 0x20\n        let dst := allocateMemory(array_allocation_size_t_array$_t_bytes_$dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, _4)\n        let src := add(_2, _4)\n        let i := value2\n        for { } lt(i, _3) { i := add(i, 1) }\n        {\n            mstore(dst, abi_decode_t_bytes(add(add(_2, calldataload(src)), _4), dataEnd))\n            dst := add(dst, _4)\n            src := add(src, _4)\n        }\n        value0 := dst_1\n        let offset_1 := calldataload(add(headStart, _4))\n        if gt(offset_1, _1) { revert(value2, value2) }\n        value1 := abi_decode_t_array$_t_uint128_$dyn(add(headStart, offset_1), dataEnd)\n        value2 := abi_decode_t_uint24(add(headStart, 64))\n        value3 := abi_decode_t_uint32(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_t_bool_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_bytes32t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        let value1_1, value2_1 := abi_decode_t_array$_t_address_$dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        value0 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_uint24t_uint32(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        value0 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n        value1 := abi_decode_t_uint24(add(headStart, 32))\n        let value := calldataload(add(headStart, 64))\n        validator_revert_t_uint32(value)\n        value2 := value\n    }\n    function abi_decode_tuple_t_int24(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_int24(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_int256t_int256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_int256t_int256t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value2, value2) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value2, value2) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(value2, value2) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(value2, value2) }\n        value2 := add(_2, 32)\n        value3 := length\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value0, value0) }\n        let _2 := mload(_1)\n        let array := allocateMemory(array_allocation_size_t_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(value0, value0) }\n        copy_memory_to_memory(add(_1, 32), add(array, 32), _2)\n        value0 := array\n    }\n    function abi_decode_tuple_t_struct$_ExactInputParams_$8594_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value0, value0) }\n        let _2 := add(headStart, offset)\n        if slt(sub(dataEnd, _2), 0x80) { revert(value0, value0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x80)\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n        let offset_1 := calldataload(_2)\n        if gt(offset_1, _1) { revert(value0, value0) }\n        mstore(memPtr, abi_decode_t_bytes(add(_2, offset_1), dataEnd))\n        let value := calldataload(add(_2, 32))\n        validator_revert_t_address(value)\n        mstore(add(memPtr, 32), value)\n        mstore(add(memPtr, 64), calldataload(add(_2, 64)))\n        mstore(add(memPtr, 96), calldataload(add(_2, 96)))\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_struct$_ExactInputSingleParams_$8577_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(value0, value0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 224)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, abi_decode_t_address(headStart))\n        mstore(add(memPtr, 32), abi_decode_t_address(add(headStart, 32)))\n        mstore(add(memPtr, 64), abi_decode_t_uint24(add(headStart, 64)))\n        mstore(add(memPtr, 96), abi_decode_t_address(add(headStart, 96)))\n        mstore(add(memPtr, 128), calldataload(add(headStart, 128)))\n        mstore(add(memPtr, 160), calldataload(add(headStart, 160)))\n        mstore(add(memPtr, 192), abi_decode_t_address(add(headStart, 192)))\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_struct$_ExactOutputParams_$8634_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 128) { revert(value0, value0) }\n        value0 := _1\n    }\n    function abi_decode_tuple_t_struct$_ExactOutputSingleParams_$8617_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(value0, value0) }\n        value0 := headStart\n    }\n    function abi_decode_tuple_t_struct$_IncreaseLiquidityParams_$8546_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(value0, value0) }\n        value0 := headStart\n    }\n    function abi_decode_tuple_t_struct$_MintParams_$8527_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(value0, value0) }\n        value0 := headStart\n    }\n    function abi_decode_tuple_t_struct$_SwapCallbackData_$6193_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value0, value0) }\n        let _2 := add(headStart, offset)\n        if slt(sub(dataEnd, _2), 0x40) { revert(value0, value0) }\n        let memPtr := mload(0x40)\n        let newFreePtr := add(memPtr, 0x40)\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(0x40, newFreePtr)\n        let offset_1 := calldataload(_2)\n        if gt(offset_1, _1) { revert(value0, value0) }\n        mstore(memPtr, abi_decode_t_bytes(add(_2, offset_1), dataEnd))\n        let value := calldataload(add(_2, 32))\n        validator_revert_t_address(value)\n        mstore(add(memPtr, 32), value)\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_uint112t_uint112t_uint32_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := abi_decode_t_uint112_fromMemory(headStart)\n        value1 := abi_decode_t_uint112_fromMemory(add(headStart, 32))\n        let value := mload(add(headStart, 64))\n        validator_revert_t_uint32(value)\n        value2 := value\n    }\n    function abi_decode_tuple_t_uint160(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(value2, value2) }\n        let value := mload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_t_int24(value_1)\n        value1 := value_1\n        value2 := abi_decode_t_uint16_fromMemory(add(headStart, 64))\n        value3 := abi_decode_t_uint16_fromMemory(add(headStart, 96))\n        value4 := abi_decode_t_uint16_fromMemory(add(headStart, 128))\n        let value_2 := mload(add(headStart, 160))\n        validator_revert_t_uint8(value_2)\n        value5 := value_2\n        value6 := abi_decode_t_bool_fromMemory(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_uint24(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_t_uint24(headStart)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_t_address(value)\n        value1 := value\n    }\n    function abi_decode_tuple_t_uint256t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_t_address(value)\n        value1 := value\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_t_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_uint256t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        let value1_1, value2_1 := abi_decode_t_array$_t_address_$dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let value := calldataload(add(headStart, 64))\n        validator_revert_t_address(value)\n        value2 := value\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_array$_t_address_$dyn_calldata_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        let value2_1, value3_1 := abi_decode_t_array$_t_address_$dyn_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        let value := calldataload(add(headStart, 96))\n        validator_revert_t_address(value)\n        value4 := value\n    }\n    function abi_decode_tuple_t_uint32t_int56t_uint160t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n        let value := mload(headStart)\n        validator_revert_t_uint32(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        if iszero(eq(value_1, signextend(6, value_1))) { revert(value2, value2) }\n        value1 := value_1\n        let value_2 := mload(add(headStart, 64))\n        validator_revert_t_address(value_2)\n        value2 := value_2\n        value3 := abi_decode_t_bool_fromMemory(add(headStart, 96))\n    }\n    function abi_encode_t_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_t_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_t_int24(value, pos)\n    {\n        mstore(pos, signextend(2, value))\n    }\n    function abi_encode_t_uint24(value, pos)\n    {\n        mstore(pos, and(value, 0xffffff))\n    }\n    function abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000\n        mstore(pos, and(shl(96, value0), _1))\n        mstore(add(pos, 20), and(shl(232, value1), 0xffffff0000000000000000000000000000000000000000000000000000000000))\n        mstore(add(pos, 23), and(shl(96, value2), _1))\n        end := add(pos, 43)\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, end)\n        end := _1\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_payable__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), 160)\n        tail := abi_encode_t_bytes(value4, add(headStart, 160))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let tail_2 := add(add(headStart, mul(length, _1)), 64)\n        let srcPtr := add(value0, _1)\n        let i := tail\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0))\n            tail_2 := abi_encode_t_bytes(mload(srcPtr), tail_2)\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        tail := tail_2\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_t_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_enum$_ApprovalType_$8468__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        if iszero(lt(value0, 5)) { invalid() }\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_t_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_4375a34c158c497e1dec923d39179cd2bff1d358f7876b16ed4f850d3b707895__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 3)\n        mstore(add(headStart, 64), \"ONI\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6dc5790d7c4bfaaa2e4f8e2cd517bacd4a3831f85c0964e56f2743cbb847bc46__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 3)\n        mstore(add(headStart, 64), \"NEO\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_a5c1362ddf12293b907d8907d79f16e40792a7ddc4f09ee6d70cfec4ad443305__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"Too much requested\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_df7085977c0a4e0ff243c8cdd75cc6add5df901d8b8ca4cde5e0319089f27136__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 2)\n        mstore(add(headStart, 64), \"TD\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f037a9cbca9be03859489f289f0cf5f85c0414bbfdd9785bc7ab31bd734e249c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"Too little received\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_IncreaseLiquidityParams_$2797_memory_ptr__to_t_struct$_IncreaseLiquidityParams_$2797_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n    }\n    function abi_encode_tuple_t_struct$_MintParams_$2770_memory_ptr__to_t_struct$_MintParams_$2770_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 352)\n        abi_encode_t_address(mload(value0), headStart)\n        let memberValue0 := mload(add(value0, 0x20))\n        abi_encode_t_address(memberValue0, add(headStart, 0x20))\n        let memberValue0_1 := mload(add(value0, 0x40))\n        abi_encode_t_uint24(memberValue0_1, add(headStart, 0x40))\n        let memberValue0_2 := mload(add(value0, 0x60))\n        abi_encode_t_int24(memberValue0_2, add(headStart, 0x60))\n        let memberValue0_3 := mload(add(value0, 0x80))\n        abi_encode_t_int24(memberValue0_3, add(headStart, 0x80))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        mstore(add(headStart, 0xe0), mload(add(value0, 0xe0)))\n        let _1 := 0x0100\n        mstore(add(headStart, _1), mload(add(value0, _1)))\n        let _2 := 0x0120\n        let memberValue0_4 := mload(add(value0, _2))\n        abi_encode_t_address(memberValue0_4, add(headStart, _2))\n        let _3 := 0x0140\n        mstore(add(headStart, _3), mload(add(value0, _3)))\n    }\n    function abi_encode_tuple_t_struct$_SwapCallbackData_$6193_memory_ptr__to_t_struct$_SwapCallbackData_$6193_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let memberValue0 := mload(value0)\n        mstore(add(headStart, 32), 0x40)\n        let tail_1 := abi_encode_t_bytes(memberValue0, add(headStart, 96))\n        mstore(add(headStart, 0x40), and(mload(add(value0, 32)), 0xffffffffffffffffffffffffffffffffffffffff))\n        tail := tail_1\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_t_bytes(value3, add(headStart, 128))\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1))) { revert(addr, addr) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(addr, addr) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function allocateMemory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, size)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_t_array$_t_bytes_$dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { invalid() }\n        size := add(mul(length, 0x20), 0x20)\n    }\n    function array_allocation_size_t_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { invalid() }\n        size := add(and(add(length, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function validator_revert_t_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function validator_revert_t_int24(value)\n    {\n        if iszero(eq(value, signextend(2, value))) { revert(0, 0) }\n    }\n    function validator_revert_t_uint32(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function validator_revert_t_uint8(value)\n    {\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "2013": [
                  {
                    "length": 32,
                    "start": 2401
                  },
                  {
                    "length": 32,
                    "start": 7944
                  },
                  {
                    "length": 32,
                    "start": 15573
                  }
                ],
                "2017": [
                  {
                    "length": 32,
                    "start": 705
                  },
                  {
                    "length": 32,
                    "start": 5453
                  },
                  {
                    "length": 32,
                    "start": 5517
                  },
                  {
                    "length": 32,
                    "start": 5815
                  },
                  {
                    "length": 32,
                    "start": 6240
                  },
                  {
                    "length": 32,
                    "start": 6538
                  },
                  {
                    "length": 32,
                    "start": 9064
                  },
                  {
                    "length": 32,
                    "start": 10681
                  },
                  {
                    "length": 32,
                    "start": 10777
                  },
                  {
                    "length": 32,
                    "start": 10906
                  }
                ],
                "7689": [
                  {
                    "length": 32,
                    "start": 3356
                  },
                  {
                    "length": 32,
                    "start": 3568
                  },
                  {
                    "length": 32,
                    "start": 4240
                  },
                  {
                    "length": 32,
                    "start": 4953
                  },
                  {
                    "length": 32,
                    "start": 12018
                  },
                  {
                    "length": 32,
                    "start": 12469
                  }
                ],
                "7693": [
                  {
                    "length": 32,
                    "start": 5417
                  },
                  {
                    "length": 32,
                    "start": 7114
                  },
                  {
                    "length": 32,
                    "start": 8030
                  },
                  {
                    "length": 32,
                    "start": 12758
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052600436106102a45760003560e01c8063ab3fdd501161016e578063dee00f35116100cb578063efdeed8e1161007f578063f25801a711610064578063f25801a71461066e578063f2d5d56b1461068e578063f3995c67146106a15761034f565b8063efdeed8e1461063b578063f100b2051461065b5761034f565b8063e0e189a0116100b0578063e0e189a014610602578063e4a4054514610615578063e90a182f146106285761034f565b8063dee00f35146105c2578063df2ab5bb146105ef5761034f565b8063bc122a5411610122578063c45a015511610107578063c45a015514610592578063c53af304146105a7578063cab372ce146105af5761034f565b8063bc122a541461056c578063c2e3140a1461057f5761034f565b8063acf8a4ed11610153578063acf8a4ed14610533578063b3a2af1314610546578063b858183f146105595761034f565b8063ab3fdd501461050d578063ac9650d8146105205761034f565b80634f04a0db1161021c578063791b98bc116101d057806397e87d9d116101b557806397e87d9d146104d4578063a4a78f0c146104e7578063a98ce37f146104fa5761034f565b8063791b98bc146104aa57806390793ea8146104bf5761034f565b8063571ac8b011610201578063571ac8b0146104715780635ae401dc14610484578063639d71a9146104975761034f565b80634f04a0db1461043c5780635023b4df1461045e5761034f565b80631f0464d11161027357806342712a671161025857806342712a67146104035780634659a49414610416578063472b43f3146104295761034f565b80631f0464d1146103d05780633068c554146103f05761034f565b806304e45aaf1461035457806309b813461461037d57806311c178481461039057806311ed56c9146103b05761034f565b3661034f573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461034d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b61036761036236600461553d565b6106b4565b6040516103749190615df7565b60405180910390f35b61036761038b3660046155d8565b61083c565b34801561039c57600080fd5b5061034d6103ab3660046153b2565b61091c565b6103c36103be366004615632565b610a6c565b6040516103749190615b74565b6103e36103de3660046152a1565b610c78565b6040516103749190615af6565b61034d6103fe3660046150d2565b610d02565b61036761041136600461587f565b610d15565b61034d61042436600461511b565b610eef565b61036761043736600461587f565b610fa3565b34801561044857600080fd5b50610451611357565b6040516103749190615a36565b61036761046c366004615610565b61137b565b61034d61047f366004614fe5565b611464565b6103e36104923660046152a1565b61149a565b61034d6104a5366004614fe5565b611513565b3480156104b657600080fd5b50610451611527565b3480156104cb57600080fd5b5061045161154b565b61034d6104e2366004615814565b61156f565b61034d6104f536600461511b565b611787565b61034d6105083660046157e5565b61185c565b61034d61051b366004614fe5565b611a22565b6103e361052e366004615176565b611a60565b61034d6105413660046157b5565b611bba565b6103c36105543660046152eb565b611bc4565b610367610567366004615497565b611c82565b61034d61057a366004615852565b611e45565b61034d61058d36600461511b565b611e51565b34801561059e57600080fd5b50610451611f06565b61034d611f2a565b61034d6105bd366004614fe5565b611a36565b3480156105ce57600080fd5b506105e26105dd366004615008565b611f3c565b6040516103749190615b87565b61034d6105fd366004615033565b6120e9565b61034d610610366004615074565b612200565b61034d6106233660046157b5565b612366565b61034d610636366004615008565b6123e2565b34801561064757600080fd5b5061034d6106563660046151b6565b6123f1565b6103c3610669366004615621565b612443565b34801561067a57600080fd5b5061034d61068936600461531e565b6124e3565b61034d61069c366004615008565b612534565b61034d6106af36600461511b565b612540565b600080600083608001511415610771575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a082319061071b903090600401615a36565b60206040518083038186803b15801561073357600080fd5b505afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906157cd565b60808401525b6107ed836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107af939291906159a4565b6040516020818303038152906040528152602001866107ce57336107d0565b305b73ffffffffffffffffffffffffffffffffffffffff1690526125d8565b91508260a00151821015610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b60405180910390fd5b50919050565b60006108b0604083018035906108559060208601614fe5565b604080518082019091526000908061086d8880615e3b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152612789565b505060005460608201358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b600084138061092b5750600083135b61093457600080fd5b600061094282840184615644565b905060008060006109568460000151612970565b9250925092506109887f00000000000000000000000000000000000000000000000000000000000000008484846129a1565b5060008060008a136109c9578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896109fa565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115610a1957610a1485876020015133846129b7565b610a60565b8551610a2490612b95565b15610a49578551610a3490612b9d565b8652610a438133600089612789565b50610a60565b80600081905550610a6084876020015133846129b7565b50505050505050505050565b604080516101608101909152606090610c70907f88316456000000000000000000000000000000000000000000000000000000009080610aaf6020870187614fe5565b73ffffffffffffffffffffffffffffffffffffffff168152602001856020016020810190610add9190614fe5565b73ffffffffffffffffffffffffffffffffffffffff168152602001610b08606087016040880161579b565b62ffffff168152602001610b226080870160608801615373565b60020b8152602001610b3a60a0870160808801615373565b60020b8152602090810190610b5a90610b5590880188614fe5565b612bd2565b8152602001610b75866020016020810190610b559190614fe5565b815260a0860135602082015260c08601356040820152606001610b9f610100870160e08801614fe5565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610bee9190615cf2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611bc4565b90505b919050565b60608380600143034014610ced57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610cf78484611a60565b91505b509392505050565b610d0f8484338585612200565b50505050565b6000610d757f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c7792505050565b600081518110610d8157fe5b6020026020010151905084811115610dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b610e5e84846000818110610dd557fe5b9050602002016020810190610dea9190614fe5565b33610e587f000000000000000000000000000000000000000000000000000000000000000088886000818110610e1c57fe5b9050602002016020810190610e319190614fe5565b89896001818110610e3e57fe5b9050602002016020810190610e539190614fe5565b612db0565b846129b7565b73ffffffffffffffffffffffffffffffffffffffff821660011415610e8557339150610ea8565b73ffffffffffffffffffffffffffffffffffffffff821660021415610ea8573091505b610ee6848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612e9b915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610f8f57600080fd5b505af1158015610a60573d6000803e3d6000fd5b60008086611059575060018484600081610fb957fe5b9050602002016020810190610fce9190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110069190615a36565b60206040518083038186803b15801561101e57600080fd5b505afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105691906157cd565b96505b6110e48585600081811061106957fe5b905060200201602081019061107e9190614fe5565b82611089573361108b565b305b6110de7f0000000000000000000000000000000000000000000000000000000000000000898960008181106110bc57fe5b90506020020160208101906110d19190614fe5565b8a8a6001818110610e3e57fe5b8a6129b7565b73ffffffffffffffffffffffffffffffffffffffff83166001141561110b5733925061112e565b73ffffffffffffffffffffffffffffffffffffffff83166002141561112e573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061115e57fe5b90506020020160208101906111739190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111ab9190615a36565b60206040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fb91906157cd565b905061123b868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612e9b915050565b6113108187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061126d57fe5b90506020020160208101906112829190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016112ba9190615a36565b60206040518083038186803b1580156112d257600080fd5b505afa1580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a91906157cd565b906131a0565b92508683101561134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b505095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611424608083018035906113949060608601614fe5565b6113a460e0860160c08701614fe5565b60405180604001604052808760200160208101906113c29190614fe5565b6113d260608a0160408b0161579b565b6113df60208b018b614fe5565b6040516020016113f1939291906159a4565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250612789565b90508160a001358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b61148e817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b61149757600080fd5b50565b606083806114a66132fc565b1115610ced57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61151e8160006131b0565b61146457600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600082118015611580575060648211155b61158957600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561161257600080fd5b505afa158015611626573d6000803e3d6000fd5b505050506040513d602081101561163c57600080fd5b50519050848110156116af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611780577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561172857600080fd5b505af115801561173c573d6000803e3d6000fd5b505050506000612710611758858461330090919063ffffffff16565b8161175f57fe5b0490508015611772576117728382613324565b61177e85828403613324565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b5051101561177e5761177e868686868686610eef565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118e557600080fd5b505afa1580156118f9573d6000803e3d6000fd5b505050506040513d602081101561190f57600080fd5b505190508281101561198257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611a1d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156119fb57600080fd5b505af1158015611a0f573d6000803e3d6000fd5b50505050611a1d8282613324565b505050565b611a2d8160006131b0565b611a3657600080fd5b61148e817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b60608167ffffffffffffffff81118015611a7957600080fd5b50604051908082528060200260200182016040528015611aad57816020015b6060815260200190600190039081611a985790505b50905060005b82811015611bb35760008030868685818110611acb57fe5b9050602002810190611add9190615e3b565b604051611aeb929190615a0a565b600060405180830381855af49150503d8060008114611b26576040519150601f19603f3d011682016040523d82523d6000602084013e611b2b565b606091505b509150915081611b9157604481511015611b4457600080fd5b60048101905080806020019051810190611b5e919061542d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d9190615b74565b80848481518110611b9e57fe5b60209081029190910101525050600101611ab3565b5092915050565b611497813361185c565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611c0d9190615a1a565b6000604051808303816000865af19150503d8060008114611c4a576040519150601f19603f3d011682016040523d82523d6000602084013e611c4f565b606091505b50925090508061083657604482511015611c6857600080fd5b60048201915081806020019051810190611b5e919061542d565b600080600083604001511415611d5357600190506000611ca58460000151612970565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611cfc903090600401615a36565b60206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4c91906157cd565b6040850152505b600081611d605733611d62565b305b90505b6000611d748560000151612b95565b9050611dcd856040015182611d8d578660200151611d8f565b305b60006040518060400160405280611da98b60000151613472565b81526020018773ffffffffffffffffffffffffffffffffffffffff168152506125d8565b60408601528015611ded578451309250611de690612b9d565b8552611dfa565b8460400151935050611e00565b50611d65565b8360600151831015611e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b5050919050565b611a1d8333848461156f565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611ec657600080fd5b505afa158015611eda573d6000803e3d6000fd5b505050506040513d6020811015611ef057600080fd5b5051101561177e5761177e868686868686612540565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715611f3a57611f3a3347613324565b565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611f9a929190615a57565b60206040518083038186803b158015611fb257600080fd5b505afa158015611fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fea91906157cd565b10611ff7575060006120e3565b612021837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b1561202e575060016120e3565b612058837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b15612065575060026120e3565b6120708360006131b0565b61207957600080fd5b6120a3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b156120b0575060036120e3565b6120da837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b1561034f575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d602081101561217c57600080fd5b50519050828110156121ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610d0f57610d0f848383613481565b600082118015612211575060648211155b61221a57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561228357600080fd5b505afa158015612297573d6000803e3d6000fd5b505050506040513d60208110156122ad57600080fd5b505190508481101561232057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561177e5760006127106123358386613300565b8161233c57fe5b049050801561235057612350878483613481565b61235d8786838503613481565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123ce57600080fd5b505af115801561177e573d6000803e3d6000fd5b6123ed8282336120e9565b5050565b6000806123ff868685613656565b915091508362ffffff168183031261177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c40565b6060610c7063219f5d1760e01b6040518060c001604052808560400135815260200161247b866000016020810190610b559190614fe5565b8152602001612496866020016020810190610b559190614fe5565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610bee9190615cae565b6000806124f08584613869565b915091508362ffffff1681830312611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c40565b6123ed82333084613af1565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610f8f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff84166001141561260157339350612624565b73ffffffffffffffffffffffffffffffffffffffff841660021415612624573093505b60008060006126368560000151612970565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80831690841610600080612667868686613cce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561268d8f613d0c565b73ffffffffffffffffffffffffffffffffffffffff8e16156126af578d6126d5565b876126ce5773fffd8963efd1fc6a506488495d951d5263988d256126d5565b6401000276a45b8d6040516020016126e69190615da0565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612715959493929190615a7e565b6040805180830381600087803b15801561272e57600080fd5b505af1158015612742573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612766919061538f565b91509150826127755781612777565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127b2573393506127d5565b73ffffffffffffffffffffffffffffffffffffffff8416600214156127d5573093505b60008060006127e78560000151612970565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80841690831610600080612818858786613cce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561283e8f613d0c565b60000373ffffffffffffffffffffffffffffffffffffffff8e1615612863578d612889565b876128825773fffd8963efd1fc6a506488495d951d5263988d25612889565b6401000276a45b8d60405160200161289a9190615da0565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016128c9959493929190615a7e565b6040805180830381600087803b1580156128e257600080fd5b505af11580156128f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291a919061538f565b9150915060008361292f578183600003612935565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16612961578b811461296157600080fd5b50505050505050949350505050565b6000808061297e8482613d3e565b925061298b846014613e3e565b9050612998846017613d3e565b91509193909250565b6000610ee6856129b2868686613f2e565b613fab565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a125750804710155b15612b5b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a7f57600080fd5b505af1158015612a93573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b505050506040513d6020811015612b5357600080fd5b50610d0f9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612b8957612b84848383613481565b610d0f565b610d0f84848484613af1565b516042111590565b8051606090610c709083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901613fdb565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190612c27903090600401615a36565b60206040518083038186803b158015612c3f57600080fd5b505afa158015612c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7091906157cd565b6060600282511015612c8857600080fd5b815167ffffffffffffffff81118015612ca057600080fd5b50604051908082528060200260200182016040528015612cca578160200160208202803683370190505b5090508281600183510381518110612cde57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610cfa57600080612d4b87866001860381518110612d2a57fe5b6020026020010151878681518110612d3e57fe5b60200260200101516141c2565b91509150612d6d848481518110612d5e57fe5b602002602001015183836142aa565b846001850381518110612d7c57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612d0e565b6000806000612dbf8585614380565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60005b6001835103811015611a1d57600080848381518110612eb957fe5b6020026020010151858460010181518110612ed057fe5b6020026020010151915091506000612ee88383614380565b5090506000612f187f00000000000000000000000000000000000000000000000000000000000000008585612db0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612f6657600080fd5b505afa158015612f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9e91906156d4565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614613000578284613003565b83835b91509150613044828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016112ba9190615a36565b9550613051868383614425565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461309557826000613099565b6000835b91509150600060028c51038a106130b0578a6130f1565b6130f17f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106130e457fe5b6020026020010151612db0565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906131599086908690869060248101615e00565b600060405180830381600087803b15801561317357600080fd5b505af1158015613187573d6000803e3d6000fd5b50506001909b019a50612e9e9950505050505050505050565b808203828111156120e357600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f000000000000000000000000000000000000000000000000000000000000000086604051602401613207929190615ad0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516132909190615a1a565b6000604051808303816000865af19150503d80600081146132cd576040519150601f19603f3d011682016040523d82523d6000602084013e6132d2565b606091505b5091509150818015610ee6575080511580610ee6575080806020019051810190610ee69190615287565b4290565b600082158061331b5750508181028183828161331857fe5b04145b6120e357600080fd5b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061339b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161335e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146133fd576040519150601f19603f3d011682016040523d82523d6000602084013e613402565b606091505b5050905080611a1d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060610c70826000602b613fdb565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061355657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613519565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135b8576040519150601f19603f3d011682016040523d82523d6000602084013e6135bd565b606091505b50915091508180156135eb5750805115806135eb57508080602001905160208110156135e857600080fd5b50515b61178057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080835185511461366757600080fd5b6000855167ffffffffffffffff8111801561368157600080fd5b506040519080825280602002602001820160405280156136bb57816020015b6136a8614e2e565b8152602001906001900390816136a05790505b5090506000865167ffffffffffffffff811180156136d857600080fd5b5060405190808252806020026020018201604052801561371257816020015b6136ff614e2e565b8152602001906001900390816136f75790505b50905060005b8751811015613842576000806137418a848151811061373357fe5b602002602001015189613869565b9150915061374e826144fb565b85848151811061375a57fe5b60200260200101516000019060020b908160020b8152505061377b816144fb565b84848151811061378757fe5b60200260200101516000019060020b908160020b815250508883815181106137ab57fe5b60200260200101518584815181106137bf57fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505088838151811061380157fe5b602002602001015184848151811061381557fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff9092169101525050600101613718565b5061384c8261450c565b60020b935061385a8161450c565b60020b92505050935093915050565b600080600080613878866145f4565b90506000805b82811015613a965760008060006138948b612970565b92509250925060006138a7848484613cce565b905060008063ffffffff8d166138d0576138c08361461f565b600291820b9350900b9050613972565b6138da838e6148b7565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561392b57600080fd5b505afa15801561393f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613963919061570f565b50505060029290920b93505050505b600189038714156139b3578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161099506139c2565b6139bc8e612b9d565b9d508597505b6000871580613a6357508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a33578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613a63565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613a78579b82019b9a81019a613a83565b828d039c50818c039b505b50506001909501945061387e9350505050565b5082613ae7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613bce57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b91565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c30576040519150601f19603f3d011682016040523d82523d6000602084013e613c35565b606091505b5091509150818015613c63575080511580613c635750808060200190516020811015613c6057600080fd5b50515b61177e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000613d047f0000000000000000000000000000000000000000000000000000000000000000613cff868686613f2e565b614ce8565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d3a57600080fd5b5090565b600081826014011015613db257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015613e2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015613eb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015613f2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b613f36614e45565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115613f6e579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000613fb78383614ce8565b90503373ffffffffffffffffffffffffffffffffffffffff8216146120e357600080fd5b60608182601f01101561404f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8282840110156140c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561413257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561415157604051915060008252602082016040526141b9565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561418a578051835260209283019201614172565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60008060006141d18585614380565b5090506000806141e2888888612db0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561422757600080fd5b505afa15801561423b573d6000803e3d6000fd5b505050506040513d606081101561425157600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461429857808261429b565b81815b90999098509650505050505050565b600080841161431a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b60008311801561432a5750600082115b61433357600080fd5b600061434b6103e86143458688613300565b90613300565b9050600061435f6103e561434586896131a0565b9050614376600182848161436f57fe5b0490614e1e565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156143bc57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106143f65782846143f9565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661441e57600080fd5b9250929050565b600080841161449557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156144a55750600082115b6144ae57600080fd5b60006144bc856103e5613300565b905060006144ca8285613300565b905060006144e4836144de886103e8613300565b90614e1e565b90508082816144ef57fe5b04979650505050505050565b80600281900b8114610c7357600080fd5b6000806000805b84518110156145a15784818151811061452857fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1685828151811061455257fe5b60200260200101516000015160020b028301925084818151811061457257fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16820191508080600101915050614513565b508082816145ab57fe5b0592506000821280156145c657508082816145c257fe5b0715155b15611e3e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561466b57600080fd5b505afa15801561467f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146a3919061570f565b50939750919550935050600161ffff84161191506146ef9050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615bd2565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b815260040161472b9190615de8565b60806040518083038186803b15801561474357600080fd5b505afa158015614757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477b91906158da565b5050915091506147896132fc565b63ffffffff168263ffffffff16146147a3578495506148ae565b60008361ffff1660018561ffff168761ffff160103816147bf57fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016148009190615df7565b60806040518083038186803b15801561481857600080fd5b505afa15801561482c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061485091906158da565b935050925092508061488e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615b9b565b82860363ffffffff811683870360060b816148a557fe5b059a5050505050505b50505050915091565b60008063ffffffff831661492c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061495b57fe5b602002602001019063ffffffff16908163ffffffff168152505060008160018151811061498457fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614a1f578181015183820152602001614a07565b505050509050019250505060006040518083038186803b158015614a4257600080fd5b505afa158015614a56573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040908152811015614a9d57600080fd5b8101908080516040519392919084640100000000821115614abd57600080fd5b908301906020820185811115614ad257600080fd5b8251866020820283011164010000000082111715614aef57600080fd5b82525081516020918201928201910280838360005b83811015614b1c578181015183820152602001614b04565b5050505090500160405260200180516040519392919084640100000000821115614b4557600080fd5b908301906020820185811115614b5a57600080fd5b8251866020820283011164010000000082111715614b7757600080fd5b82525081516020918201928201910280838360005b83811015614ba4578181015183820152602001614b8c565b5050505090500160405250505091509150600082600081518110614bc457fe5b602002602001015183600181518110614bd957fe5b6020026020010151039050600082600081518110614bf357fe5b602002602001015183600181518110614c0857fe5b60200260200101510390508763ffffffff168260060b81614c2557fe5b05965060008260060b128015614c4f57508763ffffffff168260060b81614c4857fe5b0760060b15155b15614c7a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614cd857fe5b0496505050505050509250929050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d2a57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b808201828110156120e357600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610c7381615f4c565b60008083601f840112614e81578182fd5b50813567ffffffffffffffff811115614e98578182fd5b602083019150836020808302850101111561441e57600080fd5b600082601f830112614ec2578081fd5b81356020614ed7614ed283615ec2565b615e9e565b8281528181019085830183850287018401881015614ef3578586fd5b855b85811015614f2e5781356fffffffffffffffffffffffffffffffff81168114614f1c578788fd5b84529284019290840190600101614ef5565b5090979650505050505050565b80518015158114610c7357600080fd5b600082601f830112614f5b578081fd5b8135614f69614ed282615ee0565b818152846020838601011115614f7d578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610c7357600080fd5b805161ffff81168114610c7357600080fd5b803562ffffff81168114610c7357600080fd5b8035610c7381615f7d565b600060208284031215614ff6578081fd5b813561500181615f4c565b9392505050565b6000806040838503121561501a578081fd5b823561502581615f4c565b946020939093013593505050565b600080600060608486031215615047578081fd5b833561505281615f4c565b925060208401359150604084013561506981615f4c565b809150509250925092565b600080600080600060a0868803121561508b578283fd5b853561509681615f4c565b94506020860135935060408601356150ad81615f4c565b92506060860135915060808601356150c481615f4c565b809150509295509295909350565b600080600080608085870312156150e7578182fd5b84356150f281615f4c565b93506020850135925060408501359150606085013561511081615f4c565b939692955090935050565b60008060008060008060c08789031215615133578384fd5b863561513e81615f4c565b95506020870135945060408701359350606087013561515c81615f8f565b9598949750929560808101359460a0909101359350915050565b60008060208385031215615188578182fd5b823567ffffffffffffffff81111561519e578283fd5b6151aa85828601614e70565b90969095509350505050565b600080600080608085870312156151cb578182fd5b843567ffffffffffffffff808211156151e2578384fd5b818701915087601f8301126151f5578384fd5b81356020615205614ed283615ec2565b82815281810190858301885b8581101561523a576152288e8684358b0101614f4b565b84529284019290840190600101615211565b50909950505088013592505080821115615252578384fd5b5061525f87828801614eb2565b93505061526e60408601614fc7565b915061527c60608601614fda565b905092959194509250565b600060208284031215615298578081fd5b61500182614f3b565b6000806000604084860312156152b5578081fd5b83359250602084013567ffffffffffffffff8111156152d2578182fd5b6152de86828701614e70565b9497909650939450505050565b6000602082840312156152fc578081fd5b813567ffffffffffffffff811115615312578182fd5b613d0484828501614f4b565b600080600060608486031215615332578081fd5b833567ffffffffffffffff811115615348578182fd5b61535486828701614f4b565b93505061536360208501614fc7565b9150604084013561506981615f7d565b600060208284031215615384578081fd5b813561500181615f6e565b600080604083850312156153a1578182fd5b505080516020909101519092909150565b600080600080606085870312156153c7578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156153ec578384fd5b818701915087601f8301126153ff578384fd5b81358181111561540d578485fd5b88602082850101111561541e578485fd5b95989497505060200194505050565b60006020828403121561543e578081fd5b815167ffffffffffffffff811115615454578182fd5b8201601f81018413615464578182fd5b8051615472614ed282615ee0565b818152856020838501011115615486578384fd5b610ee6826020830160208601615f20565b6000602082840312156154a8578081fd5b813567ffffffffffffffff808211156154bf578283fd5b90830190608082860312156154d2578283fd5b6040516080810181811083821117156154e757fe5b6040528235828111156154f8578485fd5b61550487828601614f4b565b8252506020830135915061551782615f4c565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e0828403121561554e578081fd5b60405160e0810181811067ffffffffffffffff8211171561556b57fe5b60405261557783614e65565b815261558560208401614e65565b602082015261559660408401614fc7565b60408201526155a760608401614e65565b60608201526080830135608082015260a083013560a08201526155cc60c08401614e65565b60c08201529392505050565b6000602082840312156155e9578081fd5b813567ffffffffffffffff8111156155ff578182fd5b820160808185031215615001578182fd5b600060e08284031215610836578081fd5b600060a08284031215610836578081fd5b60006101008284031215610836578081fd5b600060208284031215615655578081fd5b813567ffffffffffffffff8082111561566c578283fd5b908301906040828603121561567f578283fd5b60405160408101818110838211171561569457fe5b6040528235828111156156a5578485fd5b6156b187828601614f4b565b825250602083013592506156c483615f4c565b6020810192909252509392505050565b6000806000606084860312156156e8578081fd5b6156f184614f97565b92506156ff60208501614f97565b9150604084015161506981615f7d565b600080600080600080600060e0888a031215615729578485fd5b875161573481615f4c565b602089015190975061574581615f6e565b955061575360408901614fb5565b945061576160608901614fb5565b935061576f60808901614fb5565b925060a088015161577f81615f8f565b915061578d60c08901614f3b565b905092959891949750929550565b6000602082840312156157ac578081fd5b61500182614fc7565b6000602082840312156157c6578081fd5b5035919050565b6000602082840312156157de578081fd5b5051919050565b600080604083850312156157f7578182fd5b82359150602083013561580981615f4c565b809150509250929050565b60008060008060808587031215615829578182fd5b84359350602085013561583b81615f4c565b925060408501359150606085013561511081615f4c565b600080600060608486031215615866578081fd5b8335925060208401359150604084013561506981615f4c565b600080600080600060808688031215615896578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158ba578384fd5b6158c688828901614e70565b90945092505060608601356150c481615f4c565b600080600080608085870312156158ef578182fd5b84516158fa81615f7d565b8094505060208501518060060b8114615911578283fd5b604086015190935061592281615f4c565b915061527c60608601614f3b565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452615962816020860160208601615f20565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a2c818460208701615f20565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615ac560a083018461594a565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615b67577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b5585835161594a565b94509285019290850190600101615b1b565b5092979650505050505050565b600060208252615001602083018461594a565b6020810160058310615b9557fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d06828451615930565b6020830151615d186020840182615930565b506040830151615d2b604084018261599b565b506060830151615d3e6060840182615994565b506080830151615d516080840182615994565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615d8f82850182615930565b505061014092830151919092015290565b600060208252825160406020840152615dbc606084018261594a565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152614376608083018461594a565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615e6f578283fd5b83018035915067ffffffffffffffff821115615e89578283fd5b60200191503681900382131561441e57600080fd5b60405181810167ffffffffffffffff81118282101715615eba57fe5b604052919050565b600067ffffffffffffffff821115615ed657fe5b5060209081020190565b600067ffffffffffffffff821115615ef457fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f3b578181015183820152602001615f23565b83811115610d0f5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461149757600080fd5b8060020b811461149757600080fd5b63ffffffff8116811461149757600080fd5b60ff8116811461149757600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2A4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB3FDD50 GT PUSH2 0x16E JUMPI DUP1 PUSH4 0xDEE00F35 GT PUSH2 0xCB JUMPI DUP1 PUSH4 0xEFDEED8E GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xF25801A7 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xF25801A7 EQ PUSH2 0x66E JUMPI DUP1 PUSH4 0xF2D5D56B EQ PUSH2 0x68E JUMPI DUP1 PUSH4 0xF3995C67 EQ PUSH2 0x6A1 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xEFDEED8E EQ PUSH2 0x63B JUMPI DUP1 PUSH4 0xF100B205 EQ PUSH2 0x65B JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xE0E189A0 GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0xE0E189A0 EQ PUSH2 0x602 JUMPI DUP1 PUSH4 0xE4A40545 EQ PUSH2 0x615 JUMPI DUP1 PUSH4 0xE90A182F EQ PUSH2 0x628 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xDEE00F35 EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0xDF2AB5BB EQ PUSH2 0x5EF JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xBC122A54 GT PUSH2 0x122 JUMPI DUP1 PUSH4 0xC45A0155 GT PUSH2 0x107 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x592 JUMPI DUP1 PUSH4 0xC53AF304 EQ PUSH2 0x5A7 JUMPI DUP1 PUSH4 0xCAB372CE EQ PUSH2 0x5AF JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xBC122A54 EQ PUSH2 0x56C JUMPI DUP1 PUSH4 0xC2E3140A EQ PUSH2 0x57F JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xACF8A4ED GT PUSH2 0x153 JUMPI DUP1 PUSH4 0xACF8A4ED EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xB3A2AF13 EQ PUSH2 0x546 JUMPI DUP1 PUSH4 0xB858183F EQ PUSH2 0x559 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0xAB3FDD50 EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x520 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x4F04A0DB GT PUSH2 0x21C JUMPI DUP1 PUSH4 0x791B98BC GT PUSH2 0x1D0 JUMPI DUP1 PUSH4 0x97E87D9D GT PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x97E87D9D EQ PUSH2 0x4D4 JUMPI DUP1 PUSH4 0xA4A78F0C EQ PUSH2 0x4E7 JUMPI DUP1 PUSH4 0xA98CE37F EQ PUSH2 0x4FA JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x791B98BC EQ PUSH2 0x4AA JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0x4BF JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x571AC8B0 GT PUSH2 0x201 JUMPI DUP1 PUSH4 0x571AC8B0 EQ PUSH2 0x471 JUMPI DUP1 PUSH4 0x5AE401DC EQ PUSH2 0x484 JUMPI DUP1 PUSH4 0x639D71A9 EQ PUSH2 0x497 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x4F04A0DB EQ PUSH2 0x43C JUMPI DUP1 PUSH4 0x5023B4DF EQ PUSH2 0x45E JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x1F0464D1 GT PUSH2 0x273 JUMPI DUP1 PUSH4 0x42712A67 GT PUSH2 0x258 JUMPI DUP1 PUSH4 0x42712A67 EQ PUSH2 0x403 JUMPI DUP1 PUSH4 0x4659A494 EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0x472B43F3 EQ PUSH2 0x429 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x1F0464D1 EQ PUSH2 0x3D0 JUMPI DUP1 PUSH4 0x3068C554 EQ PUSH2 0x3F0 JUMPI PUSH2 0x34F JUMP JUMPDEST DUP1 PUSH4 0x4E45AAF EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0x9B81346 EQ PUSH2 0x37D JUMPI DUP1 PUSH4 0x11C17848 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0x11ED56C9 EQ PUSH2 0x3B0 JUMPI PUSH2 0x34F JUMP JUMPDEST CALLDATASIZE PUSH2 0x34F JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x34D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F742053414D42000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x367 PUSH2 0x362 CALLDATASIZE PUSH1 0x4 PUSH2 0x553D JUMP JUMPDEST PUSH2 0x6B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x374 SWAP2 SWAP1 PUSH2 0x5DF7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x367 PUSH2 0x38B CALLDATASIZE PUSH1 0x4 PUSH2 0x55D8 JUMP JUMPDEST PUSH2 0x83C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH2 0x3AB CALLDATASIZE PUSH1 0x4 PUSH2 0x53B2 JUMP JUMPDEST PUSH2 0x91C JUMP JUMPDEST PUSH2 0x3C3 PUSH2 0x3BE CALLDATASIZE PUSH1 0x4 PUSH2 0x5632 JUMP JUMPDEST PUSH2 0xA6C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x374 SWAP2 SWAP1 PUSH2 0x5B74 JUMP JUMPDEST PUSH2 0x3E3 PUSH2 0x3DE CALLDATASIZE PUSH1 0x4 PUSH2 0x52A1 JUMP JUMPDEST PUSH2 0xC78 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x374 SWAP2 SWAP1 PUSH2 0x5AF6 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x3FE CALLDATASIZE PUSH1 0x4 PUSH2 0x50D2 JUMP JUMPDEST PUSH2 0xD02 JUMP JUMPDEST PUSH2 0x367 PUSH2 0x411 CALLDATASIZE PUSH1 0x4 PUSH2 0x587F JUMP JUMPDEST PUSH2 0xD15 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x424 CALLDATASIZE PUSH1 0x4 PUSH2 0x511B JUMP JUMPDEST PUSH2 0xEEF JUMP JUMPDEST PUSH2 0x367 PUSH2 0x437 CALLDATASIZE PUSH1 0x4 PUSH2 0x587F JUMP JUMPDEST PUSH2 0xFA3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x448 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x451 PUSH2 0x1357 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x374 SWAP2 SWAP1 PUSH2 0x5A36 JUMP JUMPDEST PUSH2 0x367 PUSH2 0x46C CALLDATASIZE PUSH1 0x4 PUSH2 0x5610 JUMP JUMPDEST PUSH2 0x137B JUMP JUMPDEST PUSH2 0x34D PUSH2 0x47F CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x1464 JUMP JUMPDEST PUSH2 0x3E3 PUSH2 0x492 CALLDATASIZE PUSH1 0x4 PUSH2 0x52A1 JUMP JUMPDEST PUSH2 0x149A JUMP JUMPDEST PUSH2 0x34D PUSH2 0x4A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x1513 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x451 PUSH2 0x1527 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x451 PUSH2 0x154B JUMP JUMPDEST PUSH2 0x34D PUSH2 0x4E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x5814 JUMP JUMPDEST PUSH2 0x156F JUMP JUMPDEST PUSH2 0x34D PUSH2 0x4F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x511B JUMP JUMPDEST PUSH2 0x1787 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x57E5 JUMP JUMPDEST PUSH2 0x185C JUMP JUMPDEST PUSH2 0x34D PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x1A22 JUMP JUMPDEST PUSH2 0x3E3 PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x5176 JUMP JUMPDEST PUSH2 0x1A60 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x57B5 JUMP JUMPDEST PUSH2 0x1BBA JUMP JUMPDEST PUSH2 0x3C3 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x52EB JUMP JUMPDEST PUSH2 0x1BC4 JUMP JUMPDEST PUSH2 0x367 PUSH2 0x567 CALLDATASIZE PUSH1 0x4 PUSH2 0x5497 JUMP JUMPDEST PUSH2 0x1C82 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x57A CALLDATASIZE PUSH1 0x4 PUSH2 0x5852 JUMP JUMPDEST PUSH2 0x1E45 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x511B JUMP JUMPDEST PUSH2 0x1E51 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x59E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x451 PUSH2 0x1F06 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x1F2A JUMP JUMPDEST PUSH2 0x34D PUSH2 0x5BD CALLDATASIZE PUSH1 0x4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x1A36 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E2 PUSH2 0x5DD CALLDATASIZE PUSH1 0x4 PUSH2 0x5008 JUMP JUMPDEST PUSH2 0x1F3C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x374 SWAP2 SWAP1 PUSH2 0x5B87 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x5FD CALLDATASIZE PUSH1 0x4 PUSH2 0x5033 JUMP JUMPDEST PUSH2 0x20E9 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x610 CALLDATASIZE PUSH1 0x4 PUSH2 0x5074 JUMP JUMPDEST PUSH2 0x2200 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x623 CALLDATASIZE PUSH1 0x4 PUSH2 0x57B5 JUMP JUMPDEST PUSH2 0x2366 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x636 CALLDATASIZE PUSH1 0x4 PUSH2 0x5008 JUMP JUMPDEST PUSH2 0x23E2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH2 0x656 CALLDATASIZE PUSH1 0x4 PUSH2 0x51B6 JUMP JUMPDEST PUSH2 0x23F1 JUMP JUMPDEST PUSH2 0x3C3 PUSH2 0x669 CALLDATASIZE PUSH1 0x4 PUSH2 0x5621 JUMP JUMPDEST PUSH2 0x2443 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH2 0x689 CALLDATASIZE PUSH1 0x4 PUSH2 0x531E JUMP JUMPDEST PUSH2 0x24E3 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x69C CALLDATASIZE PUSH1 0x4 PUSH2 0x5008 JUMP JUMPDEST PUSH2 0x2534 JUMP JUMPDEST PUSH2 0x34D PUSH2 0x6AF CALLDATASIZE PUSH1 0x4 PUSH2 0x511B JUMP JUMPDEST PUSH2 0x2540 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x80 ADD MLOAD EQ ISZERO PUSH2 0x771 JUMPI POP DUP2 MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x71B SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x733 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x747 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x76B SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE JUMPDEST PUSH2 0x7ED DUP4 PUSH1 0x80 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x40 ADD MLOAD DUP11 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x7AF SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH2 0x7CE JUMPI CALLER PUSH2 0x7D0 JUMP JUMPDEST ADDRESS JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE PUSH2 0x25D8 JUMP JUMPDEST SWAP2 POP DUP3 PUSH1 0xA0 ADD MLOAD DUP3 LT ISZERO PUSH2 0x836 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C77 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B0 PUSH1 0x40 DUP4 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0x855 SWAP1 PUSH1 0x20 DUP7 ADD PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SWAP1 DUP1 PUSH2 0x86D DUP9 DUP1 PUSH2 0x5E3B JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP CALLER PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE PUSH2 0x2789 JUMP JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH1 0x60 DUP3 ADD CALLDATALOAD DUP2 GT ISZERO PUSH2 0x8F3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C09 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 SGT DUP1 PUSH2 0x92B JUMPI POP PUSH1 0x0 DUP4 SGT JUMPDEST PUSH2 0x934 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x942 DUP3 DUP5 ADD DUP5 PUSH2 0x5644 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x956 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2970 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x988 PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x29A1 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 SGT PUSH2 0x9C9 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 PUSH2 0x9FA JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP11 JUMPDEST SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0xA19 JUMPI PUSH2 0xA14 DUP6 DUP8 PUSH1 0x20 ADD MLOAD CALLER DUP5 PUSH2 0x29B7 JUMP JUMPDEST PUSH2 0xA60 JUMP JUMPDEST DUP6 MLOAD PUSH2 0xA24 SWAP1 PUSH2 0x2B95 JUMP JUMPDEST ISZERO PUSH2 0xA49 JUMPI DUP6 MLOAD PUSH2 0xA34 SWAP1 PUSH2 0x2B9D JUMP JUMPDEST DUP7 MSTORE PUSH2 0xA43 DUP2 CALLER PUSH1 0x0 DUP10 PUSH2 0x2789 JUMP JUMPDEST POP PUSH2 0xA60 JUMP JUMPDEST DUP1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0xA60 DUP5 DUP8 PUSH1 0x20 ADD MLOAD CALLER DUP5 PUSH2 0x29B7 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x160 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP1 PUSH2 0xC70 SWAP1 PUSH32 0x8831645600000000000000000000000000000000000000000000000000000000 SWAP1 DUP1 PUSH2 0xAAF PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xADD SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB08 PUSH1 0x60 DUP8 ADD PUSH1 0x40 DUP9 ADD PUSH2 0x579B JUMP JUMPDEST PUSH3 0xFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB22 PUSH1 0x80 DUP8 ADD PUSH1 0x60 DUP9 ADD PUSH2 0x5373 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB3A PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x5373 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD SWAP1 PUSH2 0xB5A SWAP1 PUSH2 0xB55 SWAP1 DUP9 ADD DUP9 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x2BD2 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB75 DUP7 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB55 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0xA0 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC0 DUP7 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0xB9F PUSH2 0x100 DUP8 ADD PUSH1 0xE0 DUP9 ADD PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xBEE SWAP2 SWAP1 PUSH2 0x5CF2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x1BC4 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH1 0x1 NUMBER SUB BLOCKHASH EQ PUSH2 0xCED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426C6F636B686173680000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xCF7 DUP5 DUP5 PUSH2 0x1A60 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD0F DUP5 DUP5 CALLER DUP6 DUP6 PUSH2 0x2200 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD75 PUSH32 0x0 DUP8 DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2C77 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xD81 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP5 DUP2 GT ISZERO PUSH2 0xDC5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C09 JUMP JUMPDEST PUSH2 0xE5E DUP5 DUP5 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDD5 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xDEA SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST CALLER PUSH2 0xE58 PUSH32 0x0 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE1C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE31 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP10 DUP10 PUSH1 0x1 DUP2 DUP2 LT PUSH2 0xE3E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE53 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x2DB0 JUMP JUMPDEST DUP5 PUSH2 0x29B7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x1 EQ ISZERO PUSH2 0xE85 JUMPI CALLER SWAP2 POP PUSH2 0xEA8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x2 EQ ISZERO PUSH2 0xEA8 JUMPI ADDRESS SWAP2 POP JUMPDEST PUSH2 0xEE6 DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP3 POP PUSH2 0x2E9B SWAP2 POP POP JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8FCBAF0C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xFF DUP6 AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xE4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0x8FCBAF0C SWAP2 PUSH2 0x104 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA60 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH2 0x1059 JUMPI POP PUSH1 0x1 DUP5 DUP5 PUSH1 0x0 DUP2 PUSH2 0xFB9 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xFCE SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1006 SWAP2 SWAP1 PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x101E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1032 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1056 SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST SWAP7 POP JUMPDEST PUSH2 0x10E4 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x1069 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x107E SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP3 PUSH2 0x1089 JUMPI CALLER PUSH2 0x108B JUMP JUMPDEST ADDRESS JUMPDEST PUSH2 0x10DE PUSH32 0x0 DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x10BC JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x10D1 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP11 DUP11 PUSH1 0x1 DUP2 DUP2 LT PUSH2 0xE3E JUMPI INVALID JUMPDEST DUP11 PUSH2 0x29B7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x1 EQ ISZERO PUSH2 0x110B JUMPI CALLER SWAP3 POP PUSH2 0x112E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x2 EQ ISZERO PUSH2 0x112E JUMPI ADDRESS SWAP3 POP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD DUP2 DUP2 LT PUSH2 0x115E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1173 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11AB SWAP2 SWAP1 PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11FB SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST SWAP1 POP PUSH2 0x123B DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 SWAP3 POP PUSH2 0x2E9B SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1310 DUP2 DUP8 DUP8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD DUP2 DUP2 LT PUSH2 0x126D JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1282 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12BA SWAP2 SWAP1 PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x130A SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST SWAP1 PUSH2 0x31A0 JUMP JUMPDEST SWAP3 POP DUP7 DUP4 LT ISZERO PUSH2 0x134C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C77 JUMP JUMPDEST POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1424 PUSH1 0x80 DUP4 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0x1394 SWAP1 PUSH1 0x60 DUP7 ADD PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x13A4 PUSH1 0xE0 DUP7 ADD PUSH1 0xC0 DUP8 ADD PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x13C2 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST PUSH2 0x13D2 PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x579B JUMP JUMPDEST PUSH2 0x13DF PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x13F1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x2789 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0xA0 ADD CALLDATALOAD DUP2 GT ISZERO PUSH2 0x8F3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C09 JUMP JUMPDEST PUSH2 0x148E DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31B0 JUMP JUMPDEST PUSH2 0x1497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH2 0x14A6 PUSH2 0x32FC JUMP JUMPDEST GT ISZERO PUSH2 0xCED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73616374696F6E20746F6F206F6C6400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x151E DUP2 PUSH1 0x0 PUSH2 0x31B0 JUMP JUMPDEST PUSH2 0x1464 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x1580 JUMPI POP PUSH1 0x64 DUP3 GT ISZERO JUMPDEST PUSH2 0x1589 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1612 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1626 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x163C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP2 LT ISZERO PUSH2 0x16AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E742053414D42000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1780 JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2E1A7D4D DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1728 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x173C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x2710 PUSH2 0x1758 DUP6 DUP5 PUSH2 0x3300 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x175F JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x1772 JUMPI PUSH2 0x1772 DUP4 DUP3 PUSH2 0x3324 JUMP JUMPDEST PUSH2 0x177E DUP6 DUP3 DUP5 SUB PUSH2 0x3324 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 PUSH4 0xDD62ED3E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x181C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1846 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD LT ISZERO PUSH2 0x177E JUMPI PUSH2 0x177E DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0xEEF JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x190F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x1982 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E742053414D42000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1A1D JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2E1A7D4D DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A0F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1A1D DUP3 DUP3 PUSH2 0x3324 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1A2D DUP2 PUSH1 0x0 PUSH2 0x31B0 JUMP JUMPDEST PUSH2 0x1A36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x148E DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31B0 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1A79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1AAD JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1A98 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1BB3 JUMPI PUSH1 0x0 DUP1 ADDRESS DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x1ACB JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x1ADD SWAP2 SWAP1 PUSH2 0x5E3B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1AEB SWAP3 SWAP2 SWAP1 PUSH2 0x5A0A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B26 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B2B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x1B91 JUMPI PUSH1 0x44 DUP2 MLOAD LT ISZERO PUSH2 0x1B44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD SWAP1 POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1B5E SWAP2 SWAP1 PUSH2 0x542D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP2 SWAP1 PUSH2 0x5B74 JUMP JUMPDEST DUP1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1B9E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x1AB3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1497 DUP2 CALLER PUSH2 0x185C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x1C0D SWAP2 SWAP1 PUSH2 0x5A1A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1C4A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1C4F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP3 POP SWAP1 POP DUP1 PUSH2 0x836 JUMPI PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x1C68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1B5E SWAP2 SWAP1 PUSH2 0x542D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD EQ ISZERO PUSH2 0x1D53 JUMPI PUSH1 0x1 SWAP1 POP PUSH1 0x0 PUSH2 0x1CA5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2970 JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1CFC SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D28 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D4C SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE POP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1D60 JUMPI CALLER PUSH2 0x1D62 JUMP JUMPDEST ADDRESS JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x0 PUSH2 0x1D74 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x2B95 JUMP JUMPDEST SWAP1 POP PUSH2 0x1DCD DUP6 PUSH1 0x40 ADD MLOAD DUP3 PUSH2 0x1D8D JUMPI DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x1D8F JUMP JUMPDEST ADDRESS JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1DA9 DUP12 PUSH1 0x0 ADD MLOAD PUSH2 0x3472 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x25D8 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE DUP1 ISZERO PUSH2 0x1DED JUMPI DUP5 MLOAD ADDRESS SWAP3 POP PUSH2 0x1DE6 SWAP1 PUSH2 0x2B9D JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1DFA JUMP JUMPDEST DUP5 PUSH1 0x40 ADD MLOAD SWAP4 POP POP PUSH2 0x1E00 JUMP JUMPDEST POP PUSH2 0x1D65 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD DUP4 LT ISZERO PUSH2 0x1E3E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C77 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A1D DUP4 CALLER DUP5 DUP5 PUSH2 0x156F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD DUP7 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 PUSH4 0xDD62ED3E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1EF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD LT ISZERO PUSH2 0x177E JUMPI PUSH2 0x177E DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x2540 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST SELFBALANCE ISZERO PUSH2 0x1F3A JUMPI PUSH2 0x1F3A CALLER SELFBALANCE PUSH2 0x3324 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E ADDRESS PUSH32 0x0 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F9A SWAP3 SWAP2 SWAP1 PUSH2 0x5A57 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FEA SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST LT PUSH2 0x1FF7 JUMPI POP PUSH1 0x0 PUSH2 0x20E3 JUMP JUMPDEST PUSH2 0x2021 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31B0 JUMP JUMPDEST ISZERO PUSH2 0x202E JUMPI POP PUSH1 0x1 PUSH2 0x20E3 JUMP JUMPDEST PUSH2 0x2058 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31B0 JUMP JUMPDEST ISZERO PUSH2 0x2065 JUMPI POP PUSH1 0x2 PUSH2 0x20E3 JUMP JUMPDEST PUSH2 0x2070 DUP4 PUSH1 0x0 PUSH2 0x31B0 JUMP JUMPDEST PUSH2 0x2079 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x20A3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31B0 JUMP JUMPDEST ISZERO PUSH2 0x20B0 JUMPI POP PUSH1 0x3 PUSH2 0x20E3 JUMP JUMPDEST PUSH2 0x20DA DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31B0 JUMP JUMPDEST ISZERO PUSH2 0x34F JUMPI POP PUSH1 0x4 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2166 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x217C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x21EF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420746F6B656E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0xD0F JUMPI PUSH2 0xD0F DUP5 DUP4 DUP4 PUSH2 0x3481 JUMP JUMPDEST PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x2211 JUMPI POP PUSH1 0x64 DUP3 GT ISZERO JUMPDEST PUSH2 0x221A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2297 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP2 LT ISZERO PUSH2 0x2320 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420746F6B656E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x177E JUMPI PUSH1 0x0 PUSH2 0x2710 PUSH2 0x2335 DUP4 DUP7 PUSH2 0x3300 JUMP JUMPDEST DUP2 PUSH2 0x233C JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2350 JUMPI PUSH2 0x2350 DUP8 DUP5 DUP4 PUSH2 0x3481 JUMP JUMPDEST PUSH2 0x235D DUP8 DUP7 DUP4 DUP6 SUB PUSH2 0x3481 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x177E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x23ED DUP3 DUP3 CALLER PUSH2 0x20E9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x23FF DUP7 DUP7 DUP6 PUSH2 0x3656 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x177E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C40 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC70 PUSH4 0x219F5D17 PUSH1 0xE0 SHL PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH1 0x40 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x247B DUP7 PUSH1 0x0 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB55 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2496 DUP7 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB55 SWAP2 SWAP1 PUSH2 0x4FE5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x60 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x80 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xBEE SWAP2 SWAP1 PUSH2 0x5CAE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x24F0 DUP6 DUP5 PUSH2 0x3869 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x1780 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5C40 JUMP JUMPDEST PUSH2 0x23ED DUP3 CALLER ADDRESS DUP5 PUSH2 0x3AF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xFF DUP6 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0xD505ACCF SWAP2 PUSH1 0xE4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x1 EQ ISZERO PUSH2 0x2601 JUMPI CALLER SWAP4 POP PUSH2 0x2624 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x2 EQ ISZERO PUSH2 0x2624 JUMPI ADDRESS SWAP4 POP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2636 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x2970 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP1 DUP5 AND LT PUSH1 0x0 DUP1 PUSH2 0x2667 DUP7 DUP7 DUP7 PUSH2 0x3CCE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP12 DUP6 PUSH2 0x268D DUP16 PUSH2 0x3D0C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND ISZERO PUSH2 0x26AF JUMPI DUP14 PUSH2 0x26D5 JUMP JUMPDEST DUP8 PUSH2 0x26CE JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x26D5 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x26E6 SWAP2 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2715 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5A7E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x272E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2742 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2766 SWAP2 SWAP1 PUSH2 0x538F JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP3 PUSH2 0x2775 JUMPI DUP2 PUSH2 0x2777 JUMP JUMPDEST DUP1 JUMPDEST PUSH1 0x0 SUB SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x1 EQ ISZERO PUSH2 0x27B2 JUMPI CALLER SWAP4 POP PUSH2 0x27D5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x2 EQ ISZERO PUSH2 0x27D5 JUMPI ADDRESS SWAP4 POP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x27E7 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x2970 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP1 DUP4 AND LT PUSH1 0x0 DUP1 PUSH2 0x2818 DUP6 DUP8 DUP7 PUSH2 0x3CCE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP12 DUP6 PUSH2 0x283E DUP16 PUSH2 0x3D0C JUMP JUMPDEST PUSH1 0x0 SUB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND ISZERO PUSH2 0x2863 JUMPI DUP14 PUSH2 0x2889 JUMP JUMPDEST DUP8 PUSH2 0x2882 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x2889 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x289A SWAP2 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x28C9 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5A7E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x28F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x291A SWAP2 SWAP1 PUSH2 0x538F JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP4 PUSH2 0x292F JUMPI DUP2 DUP4 PUSH1 0x0 SUB PUSH2 0x2935 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x0 SUB JUMPDEST SWAP1 SWAP9 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH2 0x2961 JUMPI DUP12 DUP2 EQ PUSH2 0x2961 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x297E DUP5 DUP3 PUSH2 0x3D3E JUMP JUMPDEST SWAP3 POP PUSH2 0x298B DUP5 PUSH1 0x14 PUSH2 0x3E3E JUMP JUMPDEST SWAP1 POP PUSH2 0x2998 DUP5 PUSH1 0x17 PUSH2 0x3D3E JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEE6 DUP6 PUSH2 0x29B2 DUP7 DUP7 DUP7 PUSH2 0x3F2E JUMP JUMPDEST PUSH2 0x3FAB JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 ISZERO PUSH2 0x2A12 JUMPI POP DUP1 SELFBALANCE LT ISZERO JUMPDEST ISZERO PUSH2 0x2B5B JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2B29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2B3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD0F SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ ISZERO PUSH2 0x2B89 JUMPI PUSH2 0x2B84 DUP5 DUP4 DUP4 PUSH2 0x3481 JUMP JUMPDEST PUSH2 0xD0F JUMP JUMPDEST PUSH2 0xD0F DUP5 DUP5 DUP5 DUP5 PUSH2 0x3AF1 JUMP JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0xC70 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x3FDB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2C27 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A36 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC70 SWAP2 SWAP1 PUSH2 0x57CD JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP3 MLOAD LT ISZERO PUSH2 0x2C88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2CA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2CCA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 DUP2 PUSH1 0x1 DUP4 MLOAD SUB DUP2 MLOAD DUP2 LT PUSH2 0x2CDE JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD JUMPDEST DUP1 ISZERO PUSH2 0xCFA JUMPI PUSH1 0x0 DUP1 PUSH2 0x2D4B DUP8 DUP7 PUSH1 0x1 DUP7 SUB DUP2 MLOAD DUP2 LT PUSH2 0x2D2A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x2D3E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x41C2 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x2D6D DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2D5E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 PUSH2 0x42AA JUMP JUMPDEST DUP5 PUSH1 0x1 DUP6 SUB DUP2 MLOAD DUP2 LT PUSH2 0x2D7C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD PUSH2 0x2D0E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2DBF DUP6 DUP6 PUSH2 0x4380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 DUP6 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP6 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP11 SWAP1 SWAP5 SHL SWAP1 SWAP4 AND PUSH1 0x69 DUP5 ADD MSTORE PUSH1 0x7D DUP4 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH32 0x400E13FC6C59224F20228F0C0561806856AC34B7318F337F8012707C880C351F PUSH1 0x9D DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP3 ADD SWAP1 SWAP8 MSTORE DUP1 MLOAD SWAP7 ADD SWAP6 SWAP1 SWAP6 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP4 MLOAD SUB DUP2 LT ISZERO PUSH2 0x1A1D JUMPI PUSH1 0x0 DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2EB9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x2ED0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x2EE8 DUP4 DUP4 PUSH2 0x4380 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x2F18 PUSH32 0x0 DUP6 DUP6 PUSH2 0x2DB0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F7A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F9E SWAP2 SWAP1 PUSH2 0x56D4 JUMP JUMPDEST POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3000 JUMPI DUP3 DUP5 PUSH2 0x3003 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3044 DUP3 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12BA SWAP2 SWAP1 PUSH2 0x5A36 JUMP JUMPDEST SWAP6 POP PUSH2 0x3051 DUP7 DUP4 DUP4 PUSH2 0x4425 JUMP JUMPDEST SWAP5 POP POP POP POP POP PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3095 JUMPI DUP3 PUSH1 0x0 PUSH2 0x3099 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x2 DUP13 MLOAD SUB DUP11 LT PUSH2 0x30B0 JUMPI DUP11 PUSH2 0x30F1 JUMP JUMPDEST PUSH2 0x30F1 PUSH32 0x0 DUP10 DUP15 DUP14 PUSH1 0x2 ADD DUP2 MLOAD DUP2 LT PUSH2 0x30E4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2DB0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH32 0x22C0D9F00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 PUSH4 0x22C0D9F SWAP1 PUSH2 0x3159 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x24 DUP2 ADD PUSH2 0x5E00 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3187 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP12 ADD SWAP11 POP PUSH2 0x2E9E SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x20E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH32 0x0 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x3207 SWAP3 SWAP2 SWAP1 PUSH2 0x5AD0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE SWAP1 MLOAD PUSH2 0x3290 SWAP2 SWAP1 PUSH2 0x5A1A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x32CD JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x32D2 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xEE6 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xEE6 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xEE6 SWAP2 SWAP1 PUSH2 0x5287 JUMP JUMPDEST TIMESTAMP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x331B JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x3318 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x20E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x339B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x335E JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x33FD JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3402 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x1A1D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354450000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0xC70 DUP3 PUSH1 0x0 PUSH1 0x2B PUSH2 0x3FDB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 DUP6 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3556 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3519 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x35B8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x35BD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x35EB JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x35EB JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x35E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1780 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 MLOAD DUP6 MLOAD EQ PUSH2 0x3667 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3681 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x36BB JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x36A8 PUSH2 0x4E2E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x36A0 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x36D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3712 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x36FF PUSH2 0x4E2E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x36F7 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x3842 JUMPI PUSH1 0x0 DUP1 PUSH2 0x3741 DUP11 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3733 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH2 0x3869 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x374E DUP3 PUSH2 0x44FB JUMP JUMPDEST DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x375A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP PUSH2 0x377B DUP2 PUSH2 0x44FB JUMP JUMPDEST DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3787 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x37AB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x37BF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3801 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3815 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x3718 JUMP JUMPDEST POP PUSH2 0x384C DUP3 PUSH2 0x450C JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP4 POP PUSH2 0x385A DUP2 PUSH2 0x450C JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP3 POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3878 DUP7 PUSH2 0x45F4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3A96 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3894 DUP12 PUSH2 0x2970 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x38A7 DUP5 DUP5 DUP5 PUSH2 0x3CCE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP14 AND PUSH2 0x38D0 JUMPI PUSH2 0x38C0 DUP4 PUSH2 0x461F JUMP JUMPDEST PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND SWAP4 POP SWAP1 SIGNEXTEND SWAP1 POP PUSH2 0x3972 JUMP JUMPDEST PUSH2 0x38DA DUP4 DUP15 PUSH2 0x48B7 JUMP JUMPDEST DUP2 PUSH1 0x2 SIGNEXTEND SWAP2 POP POP DUP1 SWAP3 POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x392B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x393F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3963 SWAP2 SWAP1 PUSH2 0x570F JUMP JUMPDEST POP POP POP PUSH1 0x2 SWAP3 SWAP1 SWAP3 SIGNEXTEND SWAP4 POP POP POP POP JUMPDEST PUSH1 0x1 DUP10 SUB DUP8 EQ ISZERO PUSH2 0x39B3 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT SWAP10 POP PUSH2 0x39C2 JUMP JUMPDEST PUSH2 0x39BC DUP15 PUSH2 0x2B9D JUMP JUMPDEST SWAP14 POP DUP6 SWAP8 POP JUMPDEST PUSH1 0x0 DUP8 ISZERO DUP1 PUSH2 0x3A63 JUMPI POP DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x3A33 JUMPI DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x3A63 JUMP JUMPDEST DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3A78 JUMPI SWAP12 DUP3 ADD SWAP12 SWAP11 DUP2 ADD SWAP11 PUSH2 0x3A83 JUMP JUMPDEST DUP3 DUP14 SUB SWAP13 POP DUP2 DUP13 SUB SWAP12 POP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 POP PUSH2 0x387E SWAP4 POP POP POP POP JUMP JUMPDEST POP DUP3 PUSH2 0x3AE7 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MUL SWAP5 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 MUL SWAP4 POP JUMPDEST POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 DUP6 SWAP5 SWAP4 DUP11 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3BCE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3B91 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3C30 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3C35 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x3C63 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x3C63 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x177E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354460000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3D04 PUSH32 0x0 PUSH2 0x3CFF DUP7 DUP7 DUP7 PUSH2 0x3F2E JUMP JUMPDEST PUSH2 0x4CE8 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x3D3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x3DB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x3E25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x3EB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x3F25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3F36 PUSH2 0x4E45 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0x3F6E JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FB7 DUP4 DUP4 PUSH2 0x4CE8 JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x20E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0x404F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0x40C0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0x4132 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x4151 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x41B9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x418A JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x4172 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x41D1 DUP6 DUP6 PUSH2 0x4380 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x41E2 DUP9 DUP9 DUP9 PUSH2 0x2DB0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x423B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x4298 JUMPI DUP1 DUP3 PUSH2 0x429B JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x431A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F4F55545055545F414D4F554E54000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x432A JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x4333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x434B PUSH2 0x3E8 PUSH2 0x4345 DUP7 DUP9 PUSH2 0x3300 JUMP JUMPDEST SWAP1 PUSH2 0x3300 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x435F PUSH2 0x3E5 PUSH2 0x4345 DUP7 DUP10 PUSH2 0x31A0 JUMP JUMPDEST SWAP1 POP PUSH2 0x4376 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0x436F JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0x4E1E JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x43BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x43F6 JUMPI DUP3 DUP5 PUSH2 0x43F9 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x441E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x4495 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F494E5055545F414D4F554E5400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x44A5 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x44AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x44BC DUP6 PUSH2 0x3E5 PUSH2 0x3300 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x44CA DUP3 DUP6 PUSH2 0x3300 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x44E4 DUP4 PUSH2 0x44DE DUP9 PUSH2 0x3E8 PUSH2 0x3300 JUMP JUMPDEST SWAP1 PUSH2 0x4E1E JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0x44EF JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x45A1 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x4528 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4552 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH1 0x2 SIGNEXTEND MUL DUP4 ADD SWAP3 POP DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x4572 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 ADD SWAP2 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x4513 JUMP JUMPDEST POP DUP1 DUP3 DUP2 PUSH2 0x45AB JUMPI INVALID JUMPDEST SDIV SWAP3 POP PUSH1 0x0 DUP3 SLT DUP1 ISZERO PUSH2 0x45C6 JUMPI POP DUP1 DUP3 DUP2 PUSH2 0x45C2 JUMPI INVALID JUMPDEST SMOD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1E3E JUMPI POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP2 SWAP1 POP JUMP JUMPDEST MLOAD PUSH1 0x17 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC SWAP1 SWAP2 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x466B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x467F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x46A3 SWAP2 SWAP1 PUSH2 0x570F JUMP JUMPDEST POP SWAP4 SWAP8 POP SWAP2 SWAP6 POP SWAP4 POP POP PUSH1 0x1 PUSH2 0xFFFF DUP5 AND GT SWAP2 POP PUSH2 0x46EF SWAP1 POP JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5BD2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x472B SWAP2 SWAP1 PUSH2 0x5DE8 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4743 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4757 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x477B SWAP2 SWAP1 PUSH2 0x58DA JUMP JUMPDEST POP POP SWAP2 POP SWAP2 POP PUSH2 0x4789 PUSH2 0x32FC JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP3 PUSH4 0xFFFFFFFF AND EQ PUSH2 0x47A3 JUMPI DUP5 SWAP6 POP PUSH2 0x48AE JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0xFFFF AND PUSH1 0x1 DUP6 PUSH2 0xFFFF AND DUP8 PUSH2 0xFFFF AND ADD SUB DUP2 PUSH2 0x47BF JUMPI INVALID JUMPDEST MOD SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4800 SWAP2 SWAP1 PUSH2 0x5DF7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x482C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4850 SWAP2 SWAP1 PUSH2 0x58DA JUMP JUMPDEST SWAP4 POP POP SWAP3 POP SWAP3 POP DUP1 PUSH2 0x488E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x82D SWAP1 PUSH2 0x5B9B JUMP JUMPDEST DUP3 DUP7 SUB PUSH4 0xFFFFFFFF DUP2 AND DUP4 DUP8 SUB PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x48A5 JUMPI INVALID JUMPDEST SDIV SWAP11 POP POP POP POP POP POP JUMPDEST POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP4 AND PUSH2 0x492C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4250000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x495B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4984 JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH32 0x883BDBFD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP4 PUSH4 0x883BDBFD SWAP4 DUP9 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 DUP6 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP12 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4A1F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4A07 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A56 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 LT ISZERO PUSH2 0x4A9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x4ABD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x4AD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x4AEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B1C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B04 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x4B45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x4B5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x4B77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4BA4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B8C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4BC4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4BD9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4BF3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4C08 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x4C25 JUMPI INVALID JUMPDEST SDIV SWAP7 POP PUSH1 0x0 DUP3 PUSH1 0x6 SIGNEXTEND SLT DUP1 ISZERO PUSH2 0x4C4F JUMPI POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x4C48 JUMPI INVALID JUMPDEST SMOD PUSH1 0x6 SIGNEXTEND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x4C7A JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 ADD SWAP6 JUMPDEST PUSH4 0xFFFFFFFF DUP9 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 PUSH1 0x20 DUP4 SWAP1 SHL AND PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP2 PUSH2 0x4CD8 JUMPI INVALID JUMPDEST DIV SWAP7 POP POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x4D2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x203C8EC649B23B7FAF9B73CCADFB1A67AF52A097119C82801F4947EC5DEB6C04 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x20E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xC73 DUP2 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4E81 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4E98 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x441E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4EC2 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x4ED7 PUSH2 0x4ED2 DUP4 PUSH2 0x5EC2 JUMP JUMPDEST PUSH2 0x5E9E JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP4 DUP6 MUL DUP8 ADD DUP5 ADD DUP9 LT ISZERO PUSH2 0x4EF3 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x4F2E JUMPI DUP2 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4F1C JUMPI DUP8 DUP9 REVERT JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4EF5 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4F5B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4F69 PUSH2 0x4ED2 DUP3 PUSH2 0x5EE0 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x4F7D JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xC73 DUP2 PUSH2 0x5F7D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4FF6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5001 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x501A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5025 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5047 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5052 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x5069 DUP2 PUSH2 0x5F4C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x508B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x5096 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x50AD DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x50C4 DUP2 PUSH2 0x5F4C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x50E7 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x50F2 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5110 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x5133 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x513E DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x515C DUP2 PUSH2 0x5F8F JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5188 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x519E JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x51AA DUP6 DUP3 DUP7 ADD PUSH2 0x4E70 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x51CB JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x51E2 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x51F5 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x5205 PUSH2 0x4ED2 DUP4 PUSH2 0x5EC2 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP9 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x523A JUMPI PUSH2 0x5228 DUP15 DUP7 DUP5 CALLDATALOAD DUP12 ADD ADD PUSH2 0x4F4B JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5211 JUMP JUMPDEST POP SWAP1 SWAP10 POP POP POP DUP9 ADD CALLDATALOAD SWAP3 POP POP DUP1 DUP3 GT ISZERO PUSH2 0x5252 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x525F DUP8 DUP3 DUP9 ADD PUSH2 0x4EB2 JUMP JUMPDEST SWAP4 POP POP PUSH2 0x526E PUSH1 0x40 DUP7 ADD PUSH2 0x4FC7 JUMP JUMPDEST SWAP2 POP PUSH2 0x527C PUSH1 0x60 DUP7 ADD PUSH2 0x4FDA JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5298 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5001 DUP3 PUSH2 0x4F3B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x52B5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x52D2 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x52DE DUP7 DUP3 DUP8 ADD PUSH2 0x4E70 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52FC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5312 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x3D04 DUP5 DUP3 DUP6 ADD PUSH2 0x4F4B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5332 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5348 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5354 DUP7 DUP3 DUP8 ADD PUSH2 0x4F4B JUMP JUMPDEST SWAP4 POP POP PUSH2 0x5363 PUSH1 0x20 DUP6 ADD PUSH2 0x4FC7 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x5069 DUP2 PUSH2 0x5F7D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5384 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5001 DUP2 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x53A1 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x53C7 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x53EC JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x53FF JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x540D JUMPI DUP5 DUP6 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x541E JUMPI DUP5 DUP6 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x543E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5454 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x5464 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x5472 PUSH2 0x4ED2 DUP3 PUSH2 0x5EE0 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x5486 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xEE6 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x5F20 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x54A8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x54BF JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x80 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x54D2 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT DUP4 DUP3 GT OR ISZERO PUSH2 0x54E7 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x54F8 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x5504 DUP8 DUP3 DUP7 ADD PUSH2 0x4F4B JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP2 POP PUSH2 0x5517 DUP3 PUSH2 0x5F4C JUMP JUMPDEST DUP2 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x554E JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x556B JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE PUSH2 0x5577 DUP4 PUSH2 0x4E65 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5585 PUSH1 0x20 DUP5 ADD PUSH2 0x4E65 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x5596 PUSH1 0x40 DUP5 ADD PUSH2 0x4FC7 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x55A7 PUSH1 0x60 DUP5 ADD PUSH2 0x4E65 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x55CC PUSH1 0xC0 DUP5 ADD PUSH2 0x4E65 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x55E9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x55FF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x80 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x5001 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x836 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x836 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x836 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5655 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x566C JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x40 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x567F JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT DUP4 DUP3 GT OR ISZERO PUSH2 0x5694 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x56A5 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x56B1 DUP8 DUP3 DUP7 ADD PUSH2 0x4F4B JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP3 POP PUSH2 0x56C4 DUP4 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x56E8 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x56F1 DUP5 PUSH2 0x4F97 JUMP JUMPDEST SWAP3 POP PUSH2 0x56FF PUSH1 0x20 DUP6 ADD PUSH2 0x4F97 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x5069 DUP2 PUSH2 0x5F7D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x5729 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x5734 DUP2 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD SWAP1 SWAP8 POP PUSH2 0x5745 DUP2 PUSH2 0x5F6E JUMP JUMPDEST SWAP6 POP PUSH2 0x5753 PUSH1 0x40 DUP10 ADD PUSH2 0x4FB5 JUMP JUMPDEST SWAP5 POP PUSH2 0x5761 PUSH1 0x60 DUP10 ADD PUSH2 0x4FB5 JUMP JUMPDEST SWAP4 POP PUSH2 0x576F PUSH1 0x80 DUP10 ADD PUSH2 0x4FB5 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH2 0x577F DUP2 PUSH2 0x5F8F JUMP JUMPDEST SWAP2 POP PUSH2 0x578D PUSH1 0xC0 DUP10 ADD PUSH2 0x4F3B JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x57AC JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5001 DUP3 PUSH2 0x4FC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x57C6 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x57DE JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x57F7 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x5809 DUP2 PUSH2 0x5F4C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5829 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x583B DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5110 DUP2 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5866 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x5069 DUP2 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x5896 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x58BA JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x58C6 DUP9 DUP3 DUP10 ADD PUSH2 0x4E70 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x50C4 DUP2 PUSH2 0x5F4C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x58EF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD PUSH2 0x58FA DUP2 PUSH2 0x5F7D JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x20 DUP6 ADD MLOAD DUP1 PUSH1 0x6 SIGNEXTEND DUP2 EQ PUSH2 0x5911 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x5922 DUP2 PUSH2 0x5F4C JUMP JUMPDEST SWAP2 POP PUSH2 0x527C PUSH1 0x60 DUP7 ADD PUSH2 0x4F3B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x5962 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x5F20 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP1 MSTORE JUMP JUMPDEST PUSH3 0xFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5A2C DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x5F20 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x5AC5 PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x594A JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x5B67 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x5B55 DUP6 DUP4 MLOAD PUSH2 0x594A JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5B1B JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x5001 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x594A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x5 DUP4 LT PUSH2 0x5B95 JUMPI INVALID JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F4E490000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4E454F0000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6F206D756368207265717565737465640000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH32 0x5444000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x13 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6F206C6974746C6520726563656976656400000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 ADD SWAP1 POP PUSH2 0x5D06 DUP3 DUP5 MLOAD PUSH2 0x5930 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x5D18 PUSH1 0x20 DUP5 ADD DUP3 PUSH2 0x5930 JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5D2B PUSH1 0x40 DUP5 ADD DUP3 PUSH2 0x599B JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x5D3E PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x5994 JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x5D51 PUSH1 0x80 DUP5 ADD DUP3 PUSH2 0x5994 JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD DUP2 DUP5 ADD MSTORE POP PUSH2 0x120 DUP1 DUP5 ADD MLOAD PUSH2 0x5D8F DUP3 DUP6 ADD DUP3 PUSH2 0x5930 JUMP JUMPDEST POP POP PUSH2 0x140 SWAP3 DUP4 ADD MLOAD SWAP2 SWAP1 SWAP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x5DBC PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x594A JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x4376 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x594A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x5E6F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5E89 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x441E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5EBA JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5ED6 JUMPI INVALID JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5EF4 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5F3B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5F23 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD0F JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x1497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1497 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "462:356:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;438:10:17;:18;452:4;438:18;;430:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;462:356:54;;;;;4303:907:52;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9025:462;;;;;;:::i;:::-;;:::i;1883:1319::-;;;;;;;;;;-1:-1:-1;1883:1319:52;;;;;:::i;:::-;;:::i;3197:1005:55:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;760:245:57:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:259:60:-;;;;;;:::i;:::-;;:::i;3317:662:53:-;;;;;;:::i;:::-;;:::i;1325:289:20:-;;;;;;:::i;:::-;;:::i;2141:1131:53:-;;;;;;:::i;:::-;;:::i;288:48:56:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8292:693:52:-;;;;;;:::i;:::-;;:::i;1769:123:55:-;;;;;;:::i;:::-;;:::i;497:218:57:-;;;;;;:::i;:::-;;:::i;2111:170:55:-;;;;;;:::i;:::-;;:::i;378:49:56:-;;;;;;;;;;;;;:::i;420:38:16:-;;;;;;;;;;;;;:::i;610:686:18:-;;;;;;:::i;:::-;;:::i;1652:348:20:-;;;;;;:::i;:::-;;:::i;521:386:17:-;;;;;;:::i;:::-;;:::i;2323:182:55:-;;;;;;:::i;:::-;;:::i;308:653:15:-;;;;;;:::i;:::-;;:::i;424:123:59:-;;;;;;:::i;:::-;;:::i;2547:475:55:-;;;;;;:::i;:::-;;:::i;5250:1540:52:-;;;;;;:::i;:::-;;:::i;471:229:60:-;;;;;;:::i;:::-;;:::i;973:314:20:-;;;;;;:::i;:::-;;:::i;328:41:16:-;;;;;;;;;;;;;:::i;1362:160:17:-;;;:::i;1934:135:55:-;;;;;;:::i;:::-;;:::i;908:819::-;;;;;;;;;;-1:-1:-1;908:819:55;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;952:365:17:-;;;;;;:::i;:::-;;:::i;1348:678:18:-;;;;;;:::i;:::-;;:::i;600:110:59:-;;;;;;:::i;:::-;;:::i;763:145::-;;;;;;:::i;:::-;;:::i;7824:442:58:-;;;;;;;;;;-1:-1:-1;7824:442:58;;;;;:::i;:::-;;:::i;4244:848:55:-;;;;;;:::i;:::-;;:::i;7427:355:58:-;;;;;;;;;;-1:-1:-1;7427:355:58;;;;;:::i;:::-;;:::i;961:159:59:-;;;;;;:::i;:::-;;:::i;662:273:20:-;;;;;;:::i;:::-;;:::i;4303:907:52:-;4434:17;4574:19;310:1:80;4607:6:52;:15;;;:45;4603:176;;;-1:-1:-1;4728:14:52;;4721:47;;;;;4685:4;;4721:32;;;;;:47;;4762:4;;4721:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4703:15;;;:65;4603:176;4801:324;4833:6;:15;;;4862:6;:16;;;4892:6;:24;;;4930:185;;;;;;;;4988:6;:14;;;5004:6;:10;;;5016:6;:15;;;4971:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4930:185;;;;5057:14;:43;;5090:10;5057:43;;;5082:4;5057:43;4930:185;;;;4801:18;:324::i;:::-;4789:336;;5156:6;:23;;;5143:9;:36;;5135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4303:907;;;;:::o;9025:462::-;9116:16;9144:174;9177:16;;;;;;9207;;;;;;:::i;:::-;9252:56;;;;;;;;;9237:1;;9252:56;9276:11;:6;;:11;:::i;:::-;9252:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9252:56:52;;;-1:-1:-1;9296:10:52;9252:56;;;;;9144:19;:174::i;:::-;-1:-1:-1;;9340:14:52;;9384:22;;;;9372:34;;;9364:65;;;;;;;;;;;;:::i;:::-;1211:17;9439:14;:41;9025:462;;-1:-1:-1;9025:462:52:o;1883:1319::-;2057:1;2042:12;:16;:36;;;;2077:1;2062:12;:16;2042:36;2034:45;;;;;;2152:28;2183:37;;;;2194:5;2183:37;:::i;:::-;2152:68;;2231:15;2248:16;2266:10;2280:27;:4;:9;;;:25;:27::i;:::-;2230:77;;;;;;2317:66;2351:7;2360;2369:8;2379:3;2317:33;:66::i;:::-;;2395:17;2414:19;2464:1;2449:12;:16;:140;;2558:7;2547:18;;:8;:18;;;2575:12;2449:140;;;2495:8;2485:18;;:7;:18;;;2513:12;2449:140;2394:195;;;;2604:12;2600:596;;;2632:49;2636:7;2645:4;:10;;;2657;2669:11;2632:3;:49::i;:::-;2600:596;;;2768:9;;:28;;:26;:28::i;:::-;2764:422;;;2828:9;;:21;;:19;:21::i;:::-;2816:33;;2867:53;2887:11;2900:10;2816:9;:4;2867:19;:53::i;:::-;;2764:422;;;2976:11;2959:14;:28;;;;3121:50;3125:8;3135:4;:10;;;3147;3159:11;3121:3;:50::i;:::-;1883:1319;;;;;;;;;;:::o;3197:1005:55:-;3468:695;;;;;;;;;3274:19;;3324:871;;3405:41;;3468:695;3541:13;;;;:6;:13;:::i;:::-;3468:695;;;;;;3588:6;:13;;;;;;;;;;:::i;:::-;3468:695;;;;;;3632:10;;;;;;;;:::i;:::-;3468:695;;;;;;3679:16;;;;;;;;:::i;:::-;3468:695;;;;;;3732:16;;;;;;;;:::i;:::-;3468:695;;;;;;;;;3790:24;;3800:13;;;;:6;:13;:::i;:::-;3790:9;:24::i;:::-;3468:695;;;;3856:24;3866:6;:13;;;;;;;;;;:::i;3856:24::-;3468:695;;3918:17;;;;3468:695;;;;3973:17;;;;3468:695;;;;;;4027:16;;;;;;;;:::i;:::-;3468:695;;;;;;4079:17;3468:695;;;3361:820;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3324:19;:871::i;:::-;3305:890;;3197:1005;;;;:::o;760:245:57:-;946:14;910:17;330::61;324:1;309:12;:16;299:27;:48;291:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;983:15:57::1;993:4;;983:9;:15::i;:::-;976:22;;371:1:61;760:245:57::0;;;;;;:::o;:259:60:-;938:74;956:5;963:13;978:10;990:7;999:12;938:17;:74::i;:::-;760:259;;;;:::o;3317:662:53:-;3501:16;3540:65;3573:14;3589:9;3600:4;;3540:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3540:32:53;;-1:-1:-1;;;3540:65:53:i;:::-;3606:1;3540:68;;;;;;;;;;;;;;3529:79;;3638:11;3626:8;:23;;3618:54;;;;;;;;;;;;:::i;:::-;3683:97;3687:4;;3692:1;3687:7;;;;;;;;;;;;;;;;;;;;:::i;:::-;3696:10;3708:61;3736:14;3752:4;;3757:1;3752:7;;;;;;;;;;;;;;;;;;;;:::i;:::-;3761:4;;3766:1;3761:7;;;;;;;;;;;;;;;;;;;;:::i;:::-;3708:27;:61::i;:::-;3771:8;3683:3;:97::i;:::-;3836:26;;;455:1:80;3836:26:53;3832:114;;;3869:10;3864:15;;3832:114;;;3898:28;;;606:1:80;3898:28:53;3894:52;;;3941:4;3928:18;;3894:52;3957:15;3963:4;;3957:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3969:2:53;;-1:-1:-1;3957:5:53;;-1:-1:-1;;3957:15:53:i;:::-;3317:662;;;;;;;:::o;1325:289:20:-;1517:90;;;;;;1551:10;1517:90;;;;1571:4;1517:90;;;;;;;;;;;;;;;;1593:4;1517:90;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;;:90;;;;;-1:-1:-1;;1517:90:20;;;;;;;-1:-1:-1;1517:33:20;:90;;;;;;;;;;;;;;;;;;;;;;;;;;2141:1131:53;2325:17;;2494:38;2490:155;;-1:-1:-1;2565:4:53;2601;;2606:1;2601:7;;;;;;;;;;;;;;;;;;:::i;:::-;2594:25;;;2628:4;2594:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2583:51;;2490:155;2655:188;2672:4;;2677:1;2672:7;;;;;;;;;;;;;;;;;;;;:::i;:::-;2693:14;:43;;2726:10;2693:43;;;2718:4;2693:43;2750:61;2778:14;2794:4;;2799:1;2794:7;;;;;;;;;;;;;;;;;;;;:::i;:::-;2803:4;;2808:1;2803:7;;;;;;2750:61;2825:8;2655:3;:188::i;:::-;2899:26;;;455:1:80;2899:26:53;2895:114;;;2932:10;2927:15;;2895:114;;;2961:28;;;606:1:80;2961:28:53;2957:52;;;3004:4;2991:18;;2957:52;3020:21;3051:4;;3056:15;;;3051:21;;;;;;;;;;;;;;;;;;;;:::i;:::-;3044:39;;;3084:2;3044:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3020:67;;3098:15;3104:4;;3098:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3110:2:53;;-1:-1:-1;3098:5:53;;-1:-1:-1;;3098:15:53:i;:::-;3136:62;3184:13;3143:4;;3148:15;;;3143:21;;;;;;;;;;;;;;;;;;;;:::i;:::-;3136:39;;;3176:2;3136:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;:62::i;:::-;3124:74;;3229:12;3216:9;:25;;3208:57;;;;;;;;;;;;:::i;:::-;2141:1131;;;;;;;;;:::o;288:48:56:-;;;:::o;8292:693:52:-;8427:16;8526:247;8559:16;;;;;;8589;;;;;;:::i;:::-;8619:24;;;;;;;;:::i;:::-;8657:106;;;;;;;;8698:6;:15;;;;;;;;;;:::i;:::-;8715:10;;;;;;;;:::i;:::-;8727:14;;;;:6;:14;:::i;:::-;8681:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8657:106;;;;8751:10;8657:106;;;;;8526:19;:247::i;:::-;8515:258;;8804:6;:22;;;8792:8;:34;;8784:65;;;;;;;;;;;;:::i;1769:123:55:-;1848:36;1859:5;1866:17;1848:10;:36::i;:::-;1840:45;;;;;;1769:123;:::o;497:218:57:-;656:14;629:8;244::19;223:17;:15;:17::i;:::-;:29;;215:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2111:170:55;2198:20;2209:5;2216:1;2198:10;:20::i;:::-;2190:29;;;;;378:49:56;;;:::o;420:38:16:-;;;:::o;610:686:18:-;808:1;798:7;:11;:29;;;;;824:3;813:7;:14;;798:29;790:38;;;;;;839:19;867:4;861:21;;;891:4;861:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;861:36:18;;-1:-1:-1;915:28:18;;;;907:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;980:15;;976:314;;1017:4;1011:20;;;1032:11;1011:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1058:17;1105:6;1078:24;1094:7;1078:11;:15;;:24;;;;:::i;:::-;:33;;;;;;;-1:-1:-1;1129:13:18;;1125:74;;1144:55;1175:12;1189:9;1144:30;:55::i;:::-;1213:66;1244:9;1269;1255:11;:23;1213:30;:66::i;:::-;976:314;;610:686;;;;;:::o;1652:348:20:-;1861:50;;;;;;1885:10;1861:50;;;;1905:4;1861:50;;;;;;1914:17;;1861:23;;;;;;:50;;;;;;;;;;;;;;;:23;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1861:50:20;:70;1857:136;;;1945:48;1963:5;1970;1977:6;1985:1;1988;1991;1945:17;:48::i;521:386:17:-;617:19;645:4;639:21;;;669:4;639:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:36:17;;-1:-1:-1;693:28:17;;;;685:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;758:15;;754:147;;795:4;789:20;;;810:11;789:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;836:54;867:9;878:11;836:30;:54::i;:::-;521:386;;;:::o;2323:182:55:-;2418:20;2429:5;2436:1;2418:10;:20::i;:::-;2410:29;;;;;;2457:40;2468:5;2475:21;2457:10;:40::i;308:653:15:-;383:22;439:4;427:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;417:34;;466:9;461:494;481:15;;;461:494;;;518:12;;563:4;582;;587:1;582:7;;;;;;;;;;;;;;;;;;:::i;:::-;555:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;517:73;;;;610:7;605:306;;737:2;721:6;:13;:18;717:32;;;741:8;;;717:32;820:4;812:6;808:17;798:27;;878:6;867:28;;;;;;;;;;;;:::i;:::-;860:36;;;;;;;;;;;:::i;605:306::-;938:6;925:7;933:1;925:10;;;;;;;;;;;;;;;;;:19;-1:-1:-1;;498:3:15;;461:494;;;;308:653;;;;:::o;424:123:59:-;503:37;514:13;529:10;503;:37::i;2547:475:55:-;2628:19;2659:12;2701:15;:20;;2722:4;2701:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2681:46:55;-1:-1:-1;2681:46:55;-1:-1:-1;2681:46:55;2738:278;;2862:2;2846:6;:13;:18;2842:32;;;2866:8;;;2842:32;2937:4;2929:6;2925:17;2915:27;;2987:6;2976:28;;;;;;;;;;;;:::i;5250:1540:52:-;5337:17;5473:19;310:1:80;5506:6:52;:15;;;:45;5502:236;;;5584:4;5567:21;;5603:15;5626:29;:6;:11;;;:27;:29::i;:::-;-1:-1:-1;;5687:40:52;;;;;5602:53;;-1:-1:-1;5687:25:52;;;;;;:40;;5721:4;;5687:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5669:15;;;:58;-1:-1:-1;5502:236:52;5748:13;5764:14;:43;;5797:10;5764:43;;;5789:4;5764:43;5748:59;;5818:887;5845:21;5869:30;:6;:11;;;:28;:30::i;:::-;5845:54;;6011:394;6047:6;:15;;;6080:16;:51;;6115:6;:16;;;6080:51;;;6107:4;6080:51;6200:1;6219:172;;;;;;;;6264:26;:6;:11;;;:24;:26::i;:::-;6219:172;;;;6367:5;6219:172;;;;;6011:18;:394::i;:::-;5993:15;;;:412;6475:220;;;;6568:11;;6531:4;;-1:-1:-1;6568:23:52;;:21;:23::i;:::-;6554:37;;6475:220;;;6642:6;:15;;;6630:27;;6675:5;;;6475:220;5818:887;;;;6736:6;:23;;;6723:9;:36;;6715:68;;;;;;;;;;;;:::i;:::-;5250:1540;;;;;:::o;471:229:60:-;626:67;644:13;659:10;671:7;680:12;626:17;:67::i;973:314:20:-;1177:50;;;;;;1201:10;1177:50;;;;1221:4;1177:50;;;;;;1230:5;;1177:23;;;;;;:50;;;;;;;;;;;;;;;:23;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1177:50:20;:58;1173:107;;;1237:43;1248:5;1255;1262:8;1272:1;1275;1278;1237:10;:43::i;328:41:16:-;;;:::o;1362:160:17:-;1423:21;:25;1419:96;;1450:65;1481:10;1493:21;1450:30;:65::i;:::-;1362:160::o;908:819:55:-;991:12;1113:6;1061:5;1054:23;;;1086:4;1093:15;1054:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;1050:103;;-1:-1:-1;1128:25:55;1121:32;;1050:103;1225:36;1236:5;1243:17;1225:10;:36::i;:::-;1221:65;;;-1:-1:-1;1270:16:55;1263:23;;1221:65;1300:40;1311:5;1318:21;1300:10;:40::i;:::-;1296:79;;;-1:-1:-1;1349:26:55;1342:33;;1296:79;1438:20;1449:5;1456:1;1438:10;:20::i;:::-;1430:29;;;;;;1531:36;1542:5;1549:17;1531:10;:36::i;:::-;1527:75;;;-1:-1:-1;1576:26:55;1569:33;;1527:75;1616:40;1627:5;1634:21;1616:10;:40::i;:::-;1612:89;;;-1:-1:-1;1665:36:55;908:819;;;;;:::o;952:365:17:-;1063:20;1093:5;1086:23;;;1118:4;1086:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1086:38:17;;-1:-1:-1;1142:29:17;;;;1134:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1209:16;;1205:106;;1241:59;1269:5;1276:9;1287:12;1241:27;:59::i;1348:678:18:-;1569:1;1559:7;:11;:29;;;;;1585:3;1574:7;:14;;1559:29;1551:38;;;;;;1600:20;1630:5;1623:23;;;1655:4;1623:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1623:38:18;;-1:-1:-1;1679:29:18;;;;1671:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1746:16;;1742:278;;1778:17;1826:6;1798:25;:12;1815:7;1798:16;:25::i;:::-;:34;;;;;;;-1:-1:-1;1850:13:18;;1846:78;;1865:59;1893:5;1900:12;1914:9;1865:27;:59::i;:::-;1938:71;1966:5;1973:9;1999;1984:12;:24;1938:27;:71::i;:::-;1742:278;1348:678;;;;;;:::o;600:110:59:-;674:4;668:19;;;695:5;668:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;763:145;857:44;868:5;875:13;890:10;857;:44::i;:::-;763:145;;:::o;7824:442:58:-;8022:34;8058;8108:45;8126:5;8133:7;8142:10;8108:17;:45::i;:::-;8021:132;;;;8231:21;8171:81;;8201:27;8171;:57;:81;8163:96;;;;;;;;;;;;:::i;4244:848:55:-;4379:19;4433:652;4514:54;;;4590:463;;;;;;;;4677:6;:14;;;4590:463;;;;4733:24;4743:6;:13;;;;;;;;;;:::i;4733:24::-;4590:463;;;;4799:24;4809:6;:13;;;;;;;;;;:::i;4799:24::-;4590:463;;;;4861:6;:17;;;4590:463;;;;4916:6;:17;;;4590:463;;;;4969:17;4590:463;;;4470:601;;;;;;;;:::i;7427:355:58:-;7588:27;7617;7648:35;7666:4;7672:10;7648:17;:35::i;:::-;7587:96;;;;7747:21;7701:67;;7724:20;7701;:43;:67;7693:82;;;;;;;;;;;;:::i;961:159:59:-;1041:72;1073:5;1080:10;1100:4;1107:5;1041:31;:72::i;662:273:20:-;849:79;;;;;;876:10;849:79;;;;896:4;849:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;;;:79;;;;;-1:-1:-1;;849:79:20;;;;;;;-1:-1:-1;849:26:20;:79;;;;;;;;;;3256:1007:52;3433:17;3514:33;;;455:1:80;3514:33:52;3510:142;;;3561:10;3549:22;;3510:142;;;3590:35;;;606:1:80;3590:35:52;3586:66;;;3647:4;3627:25;;3586:66;3664:15;3681:16;3699:10;3713:27;:4;:9;;;:25;:27::i;:::-;3663:77;;-1:-1:-1;3663:77:52;-1:-1:-1;3663:77:52;-1:-1:-1;3769:18:52;;;;;;;;3751:15;;3845:31;3663:77;;;3845:7;:31::i;:::-;:36;;;3899:9;3926:10;3954:19;:8;:17;:19::i;:::-;3991:22;;;;:157;;4131:17;3991:157;;;4037:10;:70;;4080:27;4037:70;;;4050:27;4037:70;4177:4;4166:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;3845:351;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3798:398;;;;4224:10;:30;;4247:7;4224:30;;;4237:7;4224:30;4222:33;;;3256:1007;-1:-1:-1;;;;;;;;;;;3256:1007:52:o;6845:1407::-;7024:16;7104:33;;;455:1:80;7104:33:52;7100:142;;;7151:10;7139:22;;7100:142;;;7180:35;;;606:1:80;7180:35:52;7176:66;;;7237:4;7217:25;;7176:66;7254:16;7272:15;7289:10;7303:27;:4;:9;;;:25;:27::i;:::-;7253:77;;-1:-1:-1;7253:77:52;-1:-1:-1;7253:77:52;-1:-1:-1;7359:18:52;;;;;;;;7341:15;;7445:31;7253:77;;;7445:7;:31::i;:::-;:36;;;7499:9;7526:10;7555:20;:9;:18;:20::i;:::-;7554:21;;7593:22;;;;:157;;7733:17;7593:157;;;7639:10;:70;;7682:27;7639:70;;;7652:27;7639:70;7779:4;7768:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;7445:353;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7388:410;;;;7809:25;7876:10;:134;;7972:12;7996;7995:13;;7876:134;;;7910:12;7934;7933:13;;7876:134;7844:166;;-1:-1:-1;7844:166:52;-1:-1:-1;8182:22:52;;;8178:67;;8235:9;8214:17;:30;8206:39;;;;;;6845:1407;;;;;;;;;;;;;:::o;1779:240:34:-;1846:14;;;1909:17;:4;1846:14;1909;:17::i;:::-;1900:26;-1:-1:-1;1942:24:34;:4;304:2;1942:13;:24::i;:::-;1936:30;-1:-1:-1;1985:27:34;:4;507:20;1985:14;:27::i;:::-;1976:36;;1779:240;;;;;:::o;742:257:32:-;888:17;924:68;939:7;948:43;971:6;979;987:3;948:22;:43::i;:::-;924:14;:68::i;1713:655:17:-;1822:4;1813:13;;:5;:13;;;:47;;;;;1855:5;1830:21;:30;;1813:47;1809:553;;;1911:4;1905:19;;;1932:5;1905:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1995:4;1989:20;;;2010:9;2021:5;1989:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1809:553:17;;-1:-1:-1;1809:553:17;;2048:22;;;2065:4;2048:22;2044:318;;;2177:52;2205:5;2212:9;2223:5;2177:27;:52::i;:::-;2044:318;;;2288:63;2320:5;2327;2334:9;2345:5;2288:31;:63::i;992:138:34:-;1083:11;777:24;-1:-1:-1;1083:40:34;;992:138::o;2561:149::-;2677:11;;2622:12;;2653:50;;2677:4;;507:20;;2677:25;;2653:10;:50::i;3028:127:55:-;3110:38;;;;;3084:7;;3110:23;;;;;;:38;;3142:4;;3110:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3131:538:79:-;3265:24;3324:1;3309:4;:11;:16;;3301:25;;;;;;3360:4;:11;3346:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3346:26:79;;3336:36;;3412:9;3382:7;3407:1;3390:7;:14;:18;3382:27;;;;;;;;;;;;;;;;;:39;3448:11;;:15;;3431:232;3465:5;;3431:232;;3492:17;3511:18;3533:42;3545:7;3554:4;3563:1;3559;:5;3554:11;;;;;;;;;;;;;;3567:4;3572:1;3567:7;;;;;;;;;;;;;;3533:11;:42::i;:::-;3491:84;;;;3606:46;3618:7;3626:1;3618:10;;;;;;;;;;;;;;3630:9;3641:10;3606:11;:46::i;:::-;3589:7;3601:1;3597;:5;3589:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;3472:3:79;;3431:232;;750:633;869:12;894:14;910;928:26;939:6;947;928:10;:26::i;:::-;1166:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:43;;;;;;1048:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1017:335;;;;;;;;;750:633;-1:-1:-1;;;;;750:633:79:o;820:1276:53:-;894:9;889:1201;923:1;909:4;:11;:15;905:1;:19;889:1201;;;946:13;961:14;980:4;985:1;980:7;;;;;;;;;;;;;;989:4;994:1;998;994:5;989:11;;;;;;;;;;;;;;945:56;;;;1016:14;1036:45;1067:5;1074:6;1036:30;:45::i;:::-;1015:66;;;1095:15;1124:58;1152:14;1168:5;1175:6;1124:27;:58::i;:::-;1095:88;;1197:19;1230:20;1335:16;1353;1375:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1334:59;;;;;;;;;1412:20;1434:21;1488:6;1479:15;;:5;:15;;;:61;;1521:8;1531;1479:61;;;1498:8;1508;1479:61;1411:129;;;;1572:56;1615:12;1579:5;1572:23;;;1604:4;1572:38;;;;;;;;;;;;;;;:::i;:56::-;1558:70;;1661:74;1694:11;1707:12;1721:13;1661:32;:74::i;:::-;1646:89;;889:1201;;;;1764:18;1784;1831:6;1822:15;;:5;:15;;;:73;;1870:12;1892:1;1822:73;;;1849:1;1853:12;1822:73;1763:132;;;;1909:10;1940:1;1926:4;:11;:15;1922:1;:19;:92;;2011:3;1922:92;;;1944:64;1972:14;1988:6;1996:4;2001:1;2005;2001:5;1996:11;;;;;;;;;;;;;;1944:27;:64::i;:::-;2066:12;;;2076:1;2066:12;;;;;;;;;2028:51;;;;1909:105;;-1:-1:-1;2028:9:53;;;;;;:51;;2038:10;;2050;;1909:105;;2028:51;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;926:3:53;;;;;-1:-1:-1;889:1201:53;;-1:-1:-1;;;;;;;;;;889:1201:53;710:111:10;802:5;;;797:16;;;;789:25;;;;;569:297:55;637:4;654:12;668:17;701:5;:10;;735:23;;;760:15;777:6;712:72;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;701:84;;;;712:72;701:84;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;653:132;;;;802:7;:57;;;;-1:-1:-1;814:11:55;;:16;;:44;;;845:4;834:24;;;;;;;;;;;;:::i;319:106:14:-;403:15;319:106;:::o;986:125:10:-;1044:9;1073:6;;;:30;;-1:-1:-1;;1088:5:10;;;1102:1;1097;1088:5;1097:1;1083:15;;;;;:20;1073:30;1065:39;;;;;2282:165:36;2394:12;;;2354;2394;;;;;;;;;2372:7;;;;2387:5;;2372:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2353:54;;;2425:7;2417:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2245:127:34;2309:12;2340:25;:4;2351:1;618:23;2340:10;:25::i;1183:279:36:-;1313:59;;;1302:10;1313:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1336:24;1313:59;;;1302:71;;;;1267:12;;;;1302:10;;;;1313:59;1302:71;;;1313:59;1302:71;;1313:59;1302:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1266:107;;;;1391:7;:57;;;;-1:-1:-1;1403:11:36;;:16;;:44;;;1434:4;1423:24;;;;;;;;;;;;;;;-1:-1:-1;1423:24:36;1403:44;1383:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6116:1269:58;6263:34;6299;6369:7;:14;6353:5;:12;:30;6345:39;;;;;;6395:69;6516:5;:12;6479:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6395:134;;6539:69;6660:5;:12;6623:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6539:134;;6689:9;6684:466;6708:5;:12;6704:1;:16;6684:466;;;6742:27;6771;6802:39;6820:5;6826:1;6820:8;;;;;;;;;;;;;;6830:10;6802:17;:39::i;:::-;6741:100;;;;6895:29;6903:20;6895:7;:29::i;:::-;6855;6885:1;6855:32;;;;;;;;;;;;;;:37;;:69;;;;;;;;;;;6978:29;6986:20;6978:7;:29::i;:::-;6938;6968:1;6938:32;;;;;;;;;;;;;;:37;;:69;;;;;;;;;;;7063:7;7071:1;7063:10;;;;;;;;;;;;;;7021:29;7051:1;7021:32;;;;;;;;;;;;;;:39;;:52;;;;;;;;;;;7129:7;7137:1;7129:10;;;;;;;;;;;;;;7087:29;7117:1;7087:32;;;;;;;;;;;;;;;;;;;:52;;;;:39;;:52;-1:-1:-1;;6722:3:58;;6684:466;;;;7190:74;7234:29;7190:43;:74::i;:::-;7160:104;;;;7304:74;7348:29;7304:43;:74::i;:::-;7274:104;;;;6116:1269;;;;;;;;:::o;2888:2574::-;3000:27;3029;3072:23;3106:16;3125:15;:4;:13;:15::i;:::-;3106:34;-1:-1:-1;3150:23:58;;3183:2047;3207:8;3203:1;:12;3183:2047;;;3298:15;3315:16;3333:10;3347:22;:4;:20;:22::i;:::-;3297:72;;;;;;3383:17;3403:38;3418:7;3427:8;3437:3;3403:14;:38::i;:::-;3383:58;-1:-1:-1;3526:18:58;;3594:15;;;3590:395;;3757:36;3788:4;3757:30;:36::i;:::-;3728:65;;;;;-1:-1:-1;3728:65:58;;;-1:-1:-1;3590:395:58;;;3850:48;3880:4;3887:10;3850:21;:48::i;:::-;3832:66;;;;;;;;;;3957:4;3944:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;3916:54:58;;;;;;-1:-1:-1;;;;3590:395:58;4019:1;4008:8;:12;4003:1;:17;3999:682;;;4469:8;4459:18;;:7;:18;;;4438:39;;3999:682;;;4607:16;:4;:14;:16::i;:::-;4600:23;;4659:7;4641:25;;3999:682;4857:8;4869:6;;;4868:81;;;4899:7;4881:25;;:15;:25;;;:67;;4941:7;4930:18;;:8;:18;;;4881:67;;;4919:8;4909:18;;:7;:18;;;4881:67;4857:92;;4967:3;4963:257;;;4990:35;;;;5043;;;;4963:257;;;5141:11;5117:35;;;;5194:11;5170:35;;;;4963:257;-1:-1:-1;;3217:3:58;;;;;-1:-1:-1;3183:2047:58;;-1:-1:-1;;;;3183:2047:58;;;5345:18;5340:116;;5403:2;5379:26;;;;5443:2;5419:26;;;;5340:116;2888:2574;;;;;;;;:::o;561:330:36:-;722:69;;;698:10;722:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;745:28;722:69;;;698:103;;;;663:12;;;;698:10;;;;722:69;698:103;;;722:69;698:103;;722:69;698:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;662:139;;;;819:7;:57;;;;-1:-1:-1;831:11:36;;:16;;:44;;;862:4;851:24;;;;;;;;;;;;;;;-1:-1:-1;851:24:36;831:44;811:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1511:245:52;1624:12;1668:80;1695:7;1704:43;1727:6;1735;1743:3;1704:22;:43::i;:::-;1668:26;:80::i;:::-;1648:101;1511:245;-1:-1:-1;;;;1511:245:52:o;924:123:11:-;976:8;1008;1004:1;:12;996:21;;;;;;-1:-1:-1;1038:1:11;924:123::o;3214:416:31:-;3293:7;3335:6;3320;3329:2;3320:11;:21;;3312:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3399:6;3408:2;3399:11;3382:6;:13;:28;;3374:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3524:30:31;3540:4;3524:30;3518:37;3557:27;3514:71;;;3214:416::o;3636:365::-;3714:6;3754;3740;3749:1;3740:10;:20;;3732:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3817:6;3826:1;3817:10;3800:6;:13;:27;;3792:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3929:29:31;3945:3;3929:29;3923:36;;3636:365::o;784:244:35:-;871:14;;:::i;:::-;910:6;901:15;;:6;:15;;;897:56;;;938:6;;946;897:56;-1:-1:-1;970:51:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;784:244::o;1248:269:32:-;1370:17;1419:44;1446:7;1455;1419:26;:44::i;:::-;1399:65;-1:-1:-1;1482:10:32;:27;;;;1474:36;;;;;399:2809:31;491:12;539:7;523;533:2;523:12;:23;;515:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;603:6;592:7;583:6;:16;:26;;575:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;672:7;663:6;:16;646:6;:13;:33;;638:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;712:22;775:15;;803:1967;;;;2911:4;2905:11;2892:24;;3097:1;3086:9;3079:20;3145:4;3134:9;3130:20;3124:4;3117:34;768:2397;;803:1967;985:4;979:11;966:24;;1644:2;1635:7;1631:16;2026:9;2019:17;2013:4;2009:28;1997:9;1986;1982:25;1978:60;2074:7;2070:2;2066:16;2326:6;2312:9;2305:17;2299:4;2295:28;2283:9;2275:6;2271:22;2267:57;2263:70;2100:425;2359:3;2355:2;2352:11;2100:425;;;2497:9;;2486:21;;2400:4;2392:13;;;;2432;2100:425;;;-1:-1:-1;;2543:26:31;;;2751:2;2734:11;2747:7;2730:25;2724:4;2717:39;-1:-1:-1;768:2397:31;-1:-1:-1;3192:9:31;399:2809;-1:-1:-1;;;;399:2809:31:o;1438:427:79:-;1561:16;1579;1608:14;1628:26;1639:6;1647;1628:10;:26::i;:::-;1607:47;;;1665:16;1683;1716:32;1724:7;1733:6;1741;1716:7;:32::i;:::-;1705:56;;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1705:58:79;;;;;;;1664:99;;;;;-1:-1:-1;1664:99:79;;-1:-1:-1;1796:16:79;;;;;;;;:62;;1839:8;1849;1796:62;;;1816:8;1826;1796:62;1773:85;;;;-1:-1:-1;1438:427:79;-1:-1:-1;;;;;;;1438:427:79:o;2601:452::-;2733:16;2781:1;2769:9;:13;2761:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2843:1;2831:9;:13;:31;;;;;2861:1;2848:10;:14;2831:31;2823:40;;;;;;2873:17;2893:34;2922:4;2893:24;:9;2907;2893:13;:24::i;:::-;:28;;:34::i;:::-;2873:54;-1:-1:-1;2937:19:79;2959:34;2989:3;2959:25;:10;2974:9;2959:14;:25::i;:34::-;2937:56;;3014:32;3044:1;3027:11;3015:9;:23;;;;;;;3014:29;:32::i;:::-;3003:43;2601:452;-1:-1:-1;;;;;;2601:452:79:o;391:270::-;466:14;482;526:6;516:16;;:6;:16;;;;508:25;;;;;;571:6;562:15;;:6;:15;;;:53;;600:6;608;562:53;;;581:6;589;562:53;543:72;;-1:-1:-1;543:72:79;-1:-1:-1;633:20:79;;;625:29;;;;;;391:270;;;;;:::o;1984:499::-;2116:17;2164:1;2153:8;:12;2145:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2225:1;2213:9;:13;:31;;;;;2243:1;2230:10;:14;2213:31;2205:40;;;;;;2255:23;2281:17;:8;2294:3;2281:12;:17::i;:::-;2255:43;-1:-1:-1;2308:17:79;2328:31;2255:43;2348:10;2328:19;:31::i;:::-;2308:51;-1:-1:-1;2369:19:79;2391:40;2415:15;2391:19;:9;2405:4;2391:13;:19::i;:::-;:23;;:40::i;:::-;2369:62;;2465:11;2453:9;:23;;;;;;;1984:499;-1:-1:-1;;;;;;;1984:499:79:o;5539:103:58:-;5633:1;5615:19;;;;;;5607:28;;;;;7520:879:33;7640:32;7760:16;7833:19;7972:9;7967:204;7987:16;:23;7983:1;:27;7967:204;;;8078:16;8095:1;8078:19;;;;;;;;;;;;;;:26;;;8071:34;;8044:16;8061:1;8044:19;;;;;;;;;;;;;;:24;;;:61;;;8031:74;;;;8134:16;8151:1;8134:19;;;;;;;;;;;;;;:26;;;8119:41;;;;;;8012:3;;;;;;;7967:204;;;;8235:11;8216:9;:31;;;;;;8181:67;;8319:1;8307:9;:13;:55;;;;;8344:11;8325:9;:31;;;;;;:36;;8307:55;8303:89;;;-1:-1:-1;;8364:28:33;;;7520:879;-1:-1:-1;7520:879:33:o;1282:235:34:-;1471:11;507:20;1471:23;;;;1470:39;;1282:235::o;810:1472:58:-;916:23;941:17;974:23;1007:29;1112:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1046:78:58;;-1:-1:-1;1046:78:58;;-1:-1:-1;1046:78:58;-1:-1:-1;;1251:1:58;1226:26;;;;;-1:-1:-1;1218:42:58;;-1:-1:-1;1218:42:58;;;;;;;;;;;:::i;:::-;1578:27;1607:20;1635:4;:17;;;1653:16;1635:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1577:93;;;;;;1715:17;:15;:17::i;:::-;1684:49;;:20;:49;;;1680:596;;1769:11;1749:31;;1680:596;;;1811:17;1890:22;1831:81;;1885:1;1860:22;1832:50;;1840:16;1832:25;;:50;:54;1831:81;;;;;;1811:101;;1927:31;1960:24;1988:20;2028:4;:17;;;2046:9;2028:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1926:130;;;;;;;2079:15;2071:31;;;;;;;;;;;;:::i;:::-;2132:47;;;2219:45;;;2220:35;;;2219:45;;;;;;;;2193:72;;1680:596;;;;;;810:1472;;;;;;;:::o;1058:1220:33:-;1153:24;;1228:15;;;1220:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1291:15;;;1304:1;1291:15;;;;;;;;1261:27;;1291:15;;;;;;;;;;-1:-1:-1;1291:15:33;1261:45;;1333:10;1316:11;1328:1;1316:14;;;;;;;;;;;;;:27;;;;;;;;;;;1370:1;1353:11;1365:1;1353:14;;;;;;;;:18;;;;:14;;;;;;;;;;:18;1470:52;;;;;;;;;;;;;;;;;;;1383:30;;;;1470:39;;;;;;1510:11;;1470:52;;;;;;;;;;;;;;;;;1383:30;1470:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1470:52:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1470:52:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1382:140;;;;1533:26;1583:15;1599:1;1583:18;;;;;;;;;;;;;;1562:15;1578:1;1562:18;;;;;;;;;;;;;;:39;1533:68;;1611:43;1709:34;1744:1;1709:37;;;;;;;;;;;;;;1657:34;1692:1;1657:37;;;;;;;;;;;;;;:89;1611:135;;1807:10;1784:33;;:20;:33;;;;;;;;1757:61;;1900:1;1877:20;:24;;;:68;;;;;1929:10;1906:33;;:20;:33;;;;;;;;:38;;;;1877:68;1873:94;;;1947:20;;;;;1873:94;2120:19;;;2142:17;2120:39;2219:50;2267:2;2219:50;;;;;2201:69;;2219:50;2201:69;;;;;2169:102;;1058:1220;;;;;;;;;;;:::o;1276:512:35:-;1360:12;1405:3;:10;;;1392:23;;:3;:10;;;:23;;;1384:32;;;;;;-1:-1:-1;1639:10:35;;1651;;;;;1663:7;;;;;1628:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1618:54;;;;;;1510:229;;;;;;;;;;;;;;;;;;;;;241:66;1510:229;;;;;;;;;;;;;;;;;;;;;;;;;1479:278;;;;;;1276:512::o;435:111:10:-;527:5;;;522:16;;;;514:25;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:138:89:-;84:20;;113:33;84:20;113:33;:::i;157:404::-;;;290:3;283:4;275:6;271:17;267:27;257:2;;315:8;305;298:26;257:2;-1:-1:-1;345:20:89;;388:18;377:30;;374:2;;;427:8;417;410:26;374:2;471:4;463:6;459:17;447:29;;534:3;527:4;519;511:6;507:17;499:6;495:30;491:41;488:50;485:2;;;551:1;548;541:12;566:840;;679:3;672:4;664:6;660:17;656:27;646:2;;701:5;694;687:20;646:2;741:6;728:20;767:4;791:63;806:47;850:2;806:47;:::i;:::-;791:63;:::i;:::-;888:15;;;919:12;;;;951:15;;;997:11;;;985:24;;981:33;;978:42;-1:-1:-1;975:2:89;;;1037:5;1030;1023:20;975:2;1063:5;1077:300;1091:2;1088:1;1085:9;1077:300;;;1162:3;1149:17;1210:34;1203:5;1199:46;1192:5;1189:57;1179:2;;1264:5;1257;1250:20;1179:2;1285:18;;1323:12;;;;1355;;;;1109:1;1102:9;1077:300;;;-1:-1:-1;1395:5:89;;636:770;-1:-1:-1;;;;;;;636:770:89:o;1411:166::-;1489:13;;1538;;1531:21;1521:32;;1511:2;;1567:1;1564;1557:12;1582:485;;1679:3;1672:4;1664:6;1660:17;1656:27;1646:2;;1701:5;1694;1687:20;1646:2;1741:6;1728:20;1772:49;1787:33;1817:2;1787:33;:::i;1772:49::-;1846:2;1837:7;1830:19;1892:3;1885:4;1880:2;1872:6;1868:15;1864:26;1861:35;1858:2;;;1913:5;1906;1899:20;1858:2;1982;1975:4;1967:6;1963:17;1956:4;1947:7;1943:18;1930:55;2005:16;;;2023:4;2001:27;1994:42;;;;2009:7;1636:431;-1:-1:-1;;1636:431:89:o;2072:190::-;2153:13;;2206:30;2195:42;;2185:53;;2175:2;;2252:1;2249;2242:12;2267:165;2347:13;;2400:6;2389:18;;2379:29;;2369:2;;2422:1;2419;2412:12;2437:163;2506:20;;2566:8;2555:20;;2545:31;;2535:2;;2590:1;2587;2580:12;2605:136;2674:20;;2703:32;2674:20;2703:32;:::i;2746:259::-;;2858:2;2846:9;2837:7;2833:23;2829:32;2826:2;;;2879:6;2871;2864:22;2826:2;2923:9;2910:23;2942:33;2969:5;2942:33;:::i;:::-;2994:5;2816:189;-1:-1:-1;;;2816:189:89:o;3010:327::-;;;3139:2;3127:9;3118:7;3114:23;3110:32;3107:2;;;3160:6;3152;3145:22;3107:2;3204:9;3191:23;3223:33;3250:5;3223:33;:::i;:::-;3275:5;3327:2;3312:18;;;;3299:32;;-1:-1:-1;;;3097:240:89:o;3342:470::-;;;;3488:2;3476:9;3467:7;3463:23;3459:32;3456:2;;;3509:6;3501;3494:22;3456:2;3553:9;3540:23;3572:33;3599:5;3572:33;:::i;:::-;3624:5;-1:-1:-1;3676:2:89;3661:18;;3648:32;;-1:-1:-1;3732:2:89;3717:18;;3704:32;3745:35;3704:32;3745:35;:::i;:::-;3799:7;3789:17;;;3446:366;;;;;:::o;3817:683::-;;;;;;3997:3;3985:9;3976:7;3972:23;3968:33;3965:2;;;4019:6;4011;4004:22;3965:2;4063:9;4050:23;4082:33;4109:5;4082:33;:::i;:::-;4134:5;-1:-1:-1;4186:2:89;4171:18;;4158:32;;-1:-1:-1;4242:2:89;4227:18;;4214:32;4255:35;4214:32;4255:35;:::i;:::-;4309:7;-1:-1:-1;4363:2:89;4348:18;;4335:32;;-1:-1:-1;4419:3:89;4404:19;;4391:33;4433:35;4391:33;4433:35;:::i;:::-;4487:7;4477:17;;;3955:545;;;;;;;;:::o;4505:539::-;;;;;4668:3;4656:9;4647:7;4643:23;4639:33;4636:2;;;4690:6;4682;4675:22;4636:2;4734:9;4721:23;4753:33;4780:5;4753:33;:::i;:::-;4805:5;-1:-1:-1;4857:2:89;4842:18;;4829:32;;-1:-1:-1;4908:2:89;4893:18;;4880:32;;-1:-1:-1;4964:2:89;4949:18;;4936:32;4977:35;4936:32;4977:35;:::i;:::-;4626:418;;;;-1:-1:-1;4626:418:89;;-1:-1:-1;;4626:418:89:o;5049:673::-;;;;;;;5244:3;5232:9;5223:7;5219:23;5215:33;5212:2;;;5266:6;5258;5251:22;5212:2;5310:9;5297:23;5329:33;5356:5;5329:33;:::i;:::-;5381:5;-1:-1:-1;5433:2:89;5418:18;;5405:32;;-1:-1:-1;5484:2:89;5469:18;;5456:32;;-1:-1:-1;5540:2:89;5525:18;;5512:32;5553:33;5512:32;5553:33;:::i;:::-;5202:520;;;;-1:-1:-1;5202:520:89;;5659:3;5644:19;;5631:33;;5711:3;5696:19;;;5683:33;;-1:-1:-1;5202:520:89;-1:-1:-1;;5202:520:89:o;5727:474::-;;;5885:2;5873:9;5864:7;5860:23;5856:32;5853:2;;;5906:6;5898;5891:22;5853:2;5951:9;5938:23;5984:18;5976:6;5973:30;5970:2;;;6021:6;6013;6006:22;5970:2;6065:76;6133:7;6124:6;6113:9;6109:22;6065:76;:::i;:::-;6160:8;;6039:102;;-1:-1:-1;5843:358:89;-1:-1:-1;;;;5843:358:89:o;6206:1340::-;;;;;6426:3;6414:9;6405:7;6401:23;6397:33;6394:2;;;6448:6;6440;6433:22;6394:2;6493:9;6480:23;6522:18;6563:2;6555:6;6552:14;6549:2;;;6584:6;6576;6569:22;6549:2;6627:6;6616:9;6612:22;6602:32;;6672:7;6665:4;6661:2;6657:13;6653:27;6643:2;;6699:6;6691;6684:22;6643:2;6740;6727:16;6762:4;6786:63;6801:47;6845:2;6801:47;:::i;6786:63::-;6883:15;;;6914:12;;;;6946:11;;;6975:6;6990:210;7004:2;7001:1;6998:9;6990:210;;;7061:64;7117:7;7112:2;7105:3;7092:17;7088:2;7084:26;7080:35;7061:64;:::i;:::-;7049:77;;7146:12;;;;7178;;;;7022:1;7015:9;6990:210;;;-1:-1:-1;7219:5:89;;-1:-1:-1;;;7262:18:89;;7249:32;;-1:-1:-1;;7293:16:89;;;7290:2;;;7327:6;7319;7312:22;7290:2;;7355:69;7416:7;7405:8;7394:9;7390:24;7355:69;:::i;:::-;7345:79;;;7443:39;7478:2;7467:9;7463:18;7443:39;:::i;:::-;7433:49;;7501:39;7536:2;7525:9;7521:18;7501:39;:::i;:::-;7491:49;;6384:1162;;;;;;;:::o;7551:214::-;;7671:2;7659:9;7650:7;7646:23;7642:32;7639:2;;;7692:6;7684;7677:22;7639:2;7720:39;7749:9;7720:39;:::i;7770:542::-;;;;7945:2;7933:9;7924:7;7920:23;7916:32;7913:2;;;7966:6;7958;7951:22;7913:2;8007:9;7994:23;7984:33;;8068:2;8057:9;8053:18;8040:32;8095:18;8087:6;8084:30;8081:2;;;8132:6;8124;8117:22;8081:2;8176:76;8244:7;8235:6;8224:9;8220:22;8176:76;:::i;:::-;7903:409;;8271:8;;-1:-1:-1;8150:102:89;;-1:-1:-1;;;;7903:409:89:o;8317:342::-;;8438:2;8426:9;8417:7;8413:23;8409:32;8406:2;;;8459:6;8451;8444:22;8406:2;8504:9;8491:23;8537:18;8529:6;8526:30;8523:2;;;8574:6;8566;8559:22;8523:2;8602:51;8645:7;8636:6;8625:9;8621:22;8602:51;:::i;8664:551::-;;;;8817:2;8805:9;8796:7;8792:23;8788:32;8785:2;;;8838:6;8830;8823:22;8785:2;8883:9;8870:23;8916:18;8908:6;8905:30;8902:2;;;8953:6;8945;8938:22;8902:2;8981:51;9024:7;9015:6;9004:9;9000:22;8981:51;:::i;:::-;8971:61;;;9051:39;9086:2;9075:9;9071:18;9051:39;:::i;:::-;9041:49;;9140:2;9129:9;9125:18;9112:32;9153;9179:5;9153:32;:::i;9220:255::-;;9330:2;9318:9;9309:7;9305:23;9301:32;9298:2;;;9351:6;9343;9336:22;9298:2;9395:9;9382:23;9414:31;9439:5;9414:31;:::i;9480:253::-;;;9618:2;9606:9;9597:7;9593:23;9589:32;9586:2;;;9639:6;9631;9624:22;9586:2;-1:-1:-1;;9667:16:89;;9723:2;9708:18;;;9702:25;9667:16;;9702:25;;-1:-1:-1;9576:157:89:o;9738:775::-;;;;;9901:2;9889:9;9880:7;9876:23;9872:32;9869:2;;;9922:6;9914;9907:22;9869:2;9963:9;9950:23;9940:33;;10020:2;10009:9;10005:18;9992:32;9982:42;;10075:2;10064:9;10060:18;10047:32;10098:18;10139:2;10131:6;10128:14;10125:2;;;10160:6;10152;10145:22;10125:2;10203:6;10192:9;10188:22;10178:32;;10248:7;10241:4;10237:2;10233:13;10229:27;10219:2;;10275:6;10267;10260:22;10219:2;10320;10307:16;10346:2;10338:6;10335:14;10332:2;;;10367:6;10359;10352:22;10332:2;10417:7;10412:2;10403:6;10399:2;10395:15;10391:24;10388:37;10385:2;;;10443:6;10435;10428:22;10385:2;9859:654;;;;-1:-1:-1;;10479:2:89;10471:11;;-1:-1:-1;;;9859:654:89:o;10518:676::-;;10651:2;10639:9;10630:7;10626:23;10622:32;10619:2;;;10672:6;10664;10657:22;10619:2;10710:9;10704:16;10743:18;10735:6;10732:30;10729:2;;;10780:6;10772;10765:22;10729:2;10808:22;;10861:4;10853:13;;10849:27;-1:-1:-1;10839:2:89;;10895:6;10887;10880:22;10839:2;10929;10923:9;10954:49;10969:33;10999:2;10969:33;:::i;10954:49::-;11026:2;11019:5;11012:17;11066:7;11061:2;11056;11052;11048:11;11044:20;11041:33;11038:2;;;11092:6;11084;11077:22;11038:2;11110:54;11161:2;11156;11149:5;11145:14;11140:2;11136;11132:11;11110:54;:::i;11199:1042::-;;11345:2;11333:9;11324:7;11320:23;11316:32;11313:2;;;11366:6;11358;11351:22;11313:2;11411:9;11398:23;11440:18;11481:2;11473:6;11470:14;11467:2;;;11502:6;11494;11487:22;11467:2;11530:22;;;;11586:4;11568:16;;;11564:27;11561:2;;;11609:6;11601;11594:22;11561:2;11647;11641:9;11689:4;11681:6;11677:17;11744:6;11732:10;11729:22;11724:2;11712:10;11709:18;11706:46;11703:2;;;11755:9;11703:2;11782;11775:22;11822:16;;11850;;;11847:2;;;11884:6;11876;11869:22;11847:2;11917:46;11955:7;11944:8;11940:2;11936:17;11917:46;:::i;:::-;11909:6;11902:62;;12007:2;12003;11999:11;11986:25;11973:38;;12020:33;12047:5;12020:33;:::i;:::-;12086:5;12081:2;12073:6;12069:15;12062:30;12146:2;12142;12138:11;12125:25;12120:2;12112:6;12108:15;12101:50;12205:2;12201;12197:11;12184:25;12179:2;12171:6;12167:15;12160:50;12229:6;12219:16;;;;;11303:938;;;;:::o;12246:897::-;;12398:3;12386:9;12377:7;12373:23;12369:33;12366:2;;;12420:6;12412;12405:22;12366:2;12458;12452:9;12500:3;12492:6;12488:16;12570:6;12558:10;12555:22;12534:18;12522:10;12519:34;12516:62;12513:2;;;12581:9;12513:2;12608;12601:22;12647:31;12668:9;12647:31;:::i;:::-;12639:6;12632:47;12712:40;12748:2;12737:9;12733:18;12712:40;:::i;:::-;12707:2;12699:6;12695:15;12688:65;12786:39;12821:2;12810:9;12806:18;12786:39;:::i;:::-;12781:2;12773:6;12769:15;12762:64;12859:40;12895:2;12884:9;12880:18;12859:40;:::i;:::-;12854:2;12846:6;12842:15;12835:65;12962:3;12951:9;12947:19;12934:33;12928:3;12920:6;12916:16;12909:59;13030:3;13019:9;13015:19;13002:33;12996:3;12988:6;12984:16;12977:59;13070:41;13106:3;13095:9;13091:19;13070:41;:::i;:::-;13064:3;13052:16;;13045:67;13056:6;12356:787;-1:-1:-1;;;12356:787:89:o;13148:427::-;;13297:2;13285:9;13276:7;13272:23;13268:32;13265:2;;;13318:6;13310;13303:22;13265:2;13363:9;13350:23;13396:18;13388:6;13385:30;13382:2;;;13433:6;13425;13418:22;13382:2;13461:22;;13517:3;13499:16;;;13495:26;13492:2;;;13539:6;13531;13524:22;13580:220;;13735:3;13723:9;13714:7;13710:23;13706:33;13703:2;;;13757:6;13749;13742:22;13805:220;;13960:3;13948:9;13939:7;13935:23;13931:33;13928:2;;;13982:6;13974;13967:22;14030:207;;14172:3;14160:9;14151:7;14147:23;14143:33;14140:2;;;14194:6;14186;14179:22;14242:928;;14388:2;14376:9;14367:7;14363:23;14359:32;14356:2;;;14409:6;14401;14394:22;14356:2;14454:9;14441:23;14483:18;14524:2;14516:6;14513:14;14510:2;;;14545:6;14537;14530:22;14510:2;14573:22;;;;14629:4;14611:16;;;14607:27;14604:2;;;14652:6;14644;14637:22;14604:2;14690:4;14684:11;14734:4;14726:6;14722:17;14789:6;14777:10;14774:22;14769:2;14757:10;14754:18;14751:46;14748:2;;;14800:9;14748:2;14827:4;14820:24;14869:16;;14897;;;14894:2;;;14931:6;14923;14916:22;14894:2;14964:46;15002:7;14991:8;14987:2;14983:17;14964:46;:::i;:::-;14956:6;14949:62;;15054:2;15050;15046:11;15033:25;15020:38;;15067:33;15094:5;15067:33;:::i;:::-;15128:2;15116:15;;15109:30;;;;-1:-1:-1;15120:6:89;14346:824;-1:-1:-1;;;14346:824:89:o;15175:435::-;;;;15331:2;15319:9;15310:7;15306:23;15302:32;15299:2;;;15352:6;15344;15337:22;15299:2;15380:42;15412:9;15380:42;:::i;:::-;15370:52;;15441:51;15488:2;15477:9;15473:18;15441:51;:::i;:::-;15431:61;;15535:2;15524:9;15520:18;15514:25;15548:32;15574:5;15548:32;:::i;15879:867::-;;;;;;;;16094:3;16082:9;16073:7;16069:23;16065:33;16062:2;;;16116:6;16108;16101:22;16062:2;16153:9;16147:16;16172:33;16199:5;16172:33;:::i;:::-;16274:2;16259:18;;16253:25;16224:5;;-1:-1:-1;16287:33:89;16253:25;16287:33;:::i;:::-;16339:7;-1:-1:-1;16365:50:89;16411:2;16396:18;;16365:50;:::i;:::-;16355:60;;16434:50;16480:2;16469:9;16465:18;16434:50;:::i;:::-;16424:60;;16503:51;16549:3;16538:9;16534:19;16503:51;:::i;:::-;16493:61;;16599:3;16588:9;16584:19;16578:26;16613:33;16638:7;16613:33;:::i;:::-;16665:7;-1:-1:-1;16691:49:89;16735:3;16720:19;;16691:49;:::i;:::-;16681:59;;16052:694;;;;;;;;;;:::o;16751:196::-;;16862:2;16850:9;16841:7;16837:23;16833:32;16830:2;;;16883:6;16875;16868:22;16830:2;16911:30;16931:9;16911:30;:::i;16952:190::-;;17064:2;17052:9;17043:7;17039:23;17035:32;17032:2;;;17085:6;17077;17070:22;17032:2;-1:-1:-1;17113:23:89;;17022:120;-1:-1:-1;17022:120:89:o;17147:194::-;;17270:2;17258:9;17249:7;17245:23;17241:32;17238:2;;;17291:6;17283;17276:22;17238:2;-1:-1:-1;17319:16:89;;17228:113;-1:-1:-1;17228:113:89:o;17346:327::-;;;17475:2;17463:9;17454:7;17450:23;17446:32;17443:2;;;17496:6;17488;17481:22;17443:2;17537:9;17524:23;17514:33;;17597:2;17586:9;17582:18;17569:32;17610:33;17637:5;17610:33;:::i;:::-;17662:5;17652:15;;;17433:240;;;;;:::o;17678:539::-;;;;;17841:3;17829:9;17820:7;17816:23;17812:33;17809:2;;;17863:6;17855;17848:22;17809:2;17904:9;17891:23;17881:33;;17964:2;17953:9;17949:18;17936:32;17977:33;18004:5;17977:33;:::i;:::-;18029:5;-1:-1:-1;18081:2:89;18066:18;;18053:32;;-1:-1:-1;18137:2:89;18122:18;;18109:32;18150:35;18109:32;18150:35;:::i;18769:395::-;;;;18915:2;18903:9;18894:7;18890:23;18886:32;18883:2;;;18936:6;18928;18921:22;18883:2;18977:9;18964:23;18954:33;;19034:2;19023:9;19019:18;19006:32;18996:42;;19088:2;19077:9;19073:18;19060:32;19101:33;19128:5;19101:33;:::i;19169:737::-;;;;;;19367:3;19355:9;19346:7;19342:23;19338:33;19335:2;;;19389:6;19381;19374:22;19335:2;19430:9;19417:23;19407:33;;19487:2;19476:9;19472:18;19459:32;19449:42;;19542:2;19531:9;19527:18;19514:32;19569:18;19561:6;19558:30;19555:2;;;19606:6;19598;19591:22;19555:2;19650:76;19718:7;19709:6;19698:9;19694:22;19650:76;:::i;:::-;19745:8;;-1:-1:-1;19624:102:89;-1:-1:-1;;19830:2:89;19815:18;;19802:32;19843:33;19802:32;19843:33;:::i;19911:651::-;;;;;20079:3;20067:9;20058:7;20054:23;20050:33;20047:2;;;20101:6;20093;20086:22;20047:2;20138:9;20132:16;20157:32;20183:5;20157:32;:::i;:::-;20208:5;20198:15;;;20258:2;20247:9;20243:18;20237:25;20307:7;20304:1;20293:22;20284:7;20281:35;20271:2;;20335:6;20327;20320:22;20271:2;20415;20400:18;;20394:25;20363:7;;-1:-1:-1;20428:35:89;20394:25;20428:35;:::i;:::-;20482:7;-1:-1:-1;20508:48:89;20552:2;20537:18;;20508:48;:::i;20567:129::-;20646:42;20635:54;20623:67;;20613:83::o;20701:318::-;;20782:5;20776:12;20809:6;20804:3;20797:19;20825:63;20881:6;20874:4;20869:3;20865:14;20858:4;20851:5;20847:16;20825:63;:::i;:::-;20933:2;20921:15;20938:66;20917:88;20908:98;;;;21008:4;20904:109;;20752:267;-1:-1:-1;;20752:267:89:o;21024:93::-;21101:1;21090:20;21078:33;;21068:49::o;21122:94::-;21200:8;21189:20;21177:33;;21167:49::o;21221:514::-;21509:2;21505:15;;;21414:66;21501:24;;;21489:37;;21564:3;21560:16;;;;21578:66;21556:89;21551:2;21542:12;;21535:111;21680:15;;21676:24;21671:2;21662:12;;21655:46;21726:2;21717:12;;21394:341::o;21740:273::-;;21923:6;21915;21910:3;21897:33;21949:16;;21974:15;;;21949:16;21887:126;-1:-1:-1;21887:126:89:o;22018:274::-;;22185:6;22179:13;22201:53;22247:6;22242:3;22235:4;22227:6;22223:17;22201:53;:::i;:::-;22270:16;;;;;22155:137;-1:-1:-1;;22155:137:89:o;22297:226::-;22473:42;22461:55;;;;22443:74;;22431:2;22416:18;;22398:125::o;22767:327::-;22951:42;23020:15;;;23002:34;;23072:15;;23067:2;23052:18;;23045:43;22929:2;22914:18;;22896:198::o;23099:593::-;;23342:42;23423:2;23415:6;23411:15;23400:9;23393:34;23477:6;23470:14;23463:22;23458:2;23447:9;23443:18;23436:50;23522:6;23517:2;23506:9;23502:18;23495:34;23577:2;23569:6;23565:15;23560:2;23549:9;23545:18;23538:43;;23618:3;23612;23601:9;23597:19;23590:32;23639:47;23681:3;23670:9;23666:19;23658:6;23639:47;:::i;:::-;23631:55;23322:370;-1:-1:-1;;;;;;;23322:370:89:o;23697:297::-;23901:42;23889:55;;;;23871:74;;23976:2;23961:18;;23954:34;23859:2;23844:18;;23826:168::o;23999:865::-;;24188:2;24228;24217:9;24213:18;24258:2;24247:9;24240:21;24281:6;24316;24310:13;24347:6;24339;24332:22;24385:2;24374:9;24370:18;24363:25;;24448:2;24442;24434:6;24430:15;24419:9;24415:31;24411:40;24397:54;;24486:2;24478:6;24474:15;24507:4;24520:315;24534:6;24531:1;24528:13;24520:315;;;24623:66;24611:9;24603:6;24599:22;24595:95;24590:3;24583:108;24714:41;24748:6;24739;24733:13;24714:41;:::i;:::-;24704:51;-1:-1:-1;24813:12:89;;;;24778:15;;;;24556:1;24549:9;24520:315;;;-1:-1:-1;24852:6:89;;24168:696;-1:-1:-1;;;;;;;24168:696:89:o;24869:219::-;;25016:2;25005:9;24998:21;25036:46;25078:2;25067:9;25063:18;25055:6;25036:46;:::i;25093:239::-;25242:2;25227:18;;25275:1;25264:13;;25254:2;;25281:9;25254:2;25301:25;;;25209:123;:::o;25563:326::-;25765:2;25747:21;;;25804:1;25784:18;;;25777:29;25842:5;25837:2;25822:18;;25815:33;25880:2;25865:18;;25737:152::o;25894:326::-;26096:2;26078:21;;;26135:1;26115:18;;;26108:29;26173:5;26168:2;26153:18;;26146:33;26211:2;26196:18;;26068:152::o;26225:342::-;26427:2;26409:21;;;26466:2;26446:18;;;26439:30;26505:20;26500:2;26485:18;;26478:48;26558:2;26543:18;;26399:168::o;26572:325::-;26774:2;26756:21;;;26813:1;26793:18;;;26786:29;26851:4;26846:2;26831:18;;26824:32;26888:2;26873:18;;26746:151::o;26902:343::-;27104:2;27086:21;;;27143:2;27123:18;;;27116:30;27182:21;27177:2;27162:18;;27155:49;27236:2;27221:18;;27076:169::o;27250:582::-;;27466:3;27455:9;27451:19;27443:27;;27503:6;27497:13;27486:9;27479:32;27567:4;27559:6;27555:17;27549:24;27542:4;27531:9;27527:20;27520:54;27630:4;27622:6;27618:17;27612:24;27605:4;27594:9;27590:20;27583:54;27693:4;27685:6;27681:17;27675:24;27668:4;27657:9;27653:20;27646:54;27756:4;27748:6;27744:17;27738:24;27731:4;27720:9;27716:20;27709:54;27819:4;27811:6;27807:17;27801:24;27794:4;27783:9;27779:20;27772:54;27433:399;;;;:::o;27837:1234::-;;28027:3;28016:9;28012:19;28004:27;;28040:46;28076:9;28067:6;28061:13;28040:46;:::i;:::-;28133:4;28125:6;28121:17;28115:24;28148:56;28198:4;28187:9;28183:20;28169:12;28148:56;:::i;:::-;;28253:4;28245:6;28241:17;28235:24;28268:57;28319:4;28308:9;28304:20;28288:14;28268:57;:::i;:::-;;28374:4;28366:6;28362:17;28356:24;28389:56;28439:4;28428:9;28424:20;28408:14;28389:56;:::i;:::-;;28494:4;28486:6;28482:17;28476:24;28509:56;28559:4;28548:9;28544:20;28528:14;28509:56;:::i;:::-;;28621:4;28613:6;28609:17;28603:24;28596:4;28585:9;28581:20;28574:54;28684:4;28676:6;28672:17;28666:24;28659:4;28648:9;28644:20;28637:54;28747:4;28739:6;28735:17;28729:24;28722:4;28711:9;28707:20;28700:54;28773:6;28833:2;28825:6;28821:15;28815:22;28810:2;28799:9;28795:18;28788:50;;28857:6;28912:2;28904:6;28900:15;28894:22;28925:56;28977:2;28966:9;28962:18;28946:14;28925:56;:::i;:::-;-1:-1:-1;;29000:6:89;29048:15;;;29042:22;29022:18;;;;29015:50;27994:1077;:::o;29076:497::-;;29273:2;29262:9;29255:21;29311:6;29305:13;29354:4;29349:2;29338:9;29334:18;29327:32;29382:52;29430:2;29419:9;29415:18;29401:12;29382:52;:::i;:::-;29368:66;;29500:42;29494:2;29486:6;29482:15;29476:22;29472:71;29465:4;29454:9;29450:20;29443:101;29561:6;29553:14;;;29245:328;;;;:::o;29578:189::-;29753:6;29741:19;;;;29723:38;;29711:2;29696:18;;29678:89::o;29772:177::-;29918:25;;;29906:2;29891:18;;29873:76::o;29954:483::-;;30185:6;30174:9;30167:25;30228:6;30223:2;30212:9;30208:18;30201:34;30283:42;30275:6;30271:55;30266:2;30255:9;30251:18;30244:83;30363:3;30358:2;30347:9;30343:18;30336:31;30384:47;30426:3;30415:9;30411:19;30403:6;30384:47;:::i;30442:592::-;;;30585:11;30572:25;30675:66;30664:8;30648:14;30644:29;30640:102;30620:18;30616:127;30606:2;;30760:4;30754;30747:18;30606:2;30790:33;;30842:20;;;-1:-1:-1;30885:18:89;30874:30;;30871:2;;;30920:4;30914;30907:18;30871:2;30956:4;30944:17;;-1:-1:-1;30987:14:89;30983:27;;;30973:38;;30970:2;;;31024:1;31021;31014:12;31039:242;31109:2;31103:9;31139:17;;;31186:18;31171:34;;31207:22;;;31168:62;31165:2;;;31233:9;31165:2;31260;31253:22;31083:198;;-1:-1:-1;31083:198:89:o;31286:181::-;;31383:18;31375:6;31372:30;31369:2;;;31405:9;31369:2;-1:-1:-1;31456:4:89;31437:17;;;31433:28;;31359:108::o;31472:240::-;;31555:18;31547:6;31544:30;31541:2;;;31577:9;31541:2;-1:-1:-1;31625:4:89;31613:17;31632:66;31609:90;31701:4;31605:101;;31531:181::o;31717:258::-;31789:1;31799:113;31813:6;31810:1;31807:13;31799:113;;;31889:11;;;31883:18;31870:11;;;31863:39;31835:2;31828:10;31799:113;;;31930:6;31927:1;31924:13;31921:2;;;-1:-1:-1;;31965:1:89;31947:16;;31940:27;31770:205::o;31980:156::-;32068:42;32061:5;32057:54;32050:5;32047:65;32037:2;;32126:1;32123;32116:12;32141:120;32230:5;32227:1;32216:20;32209:5;32206:31;32196:2;;32251:1;32248;32241:12;32266:123;32353:10;32346:5;32342:22;32335:5;32332:33;32322:2;;32379:1;32376;32369:12;32394:116;32480:4;32473:5;32469:16;32462:5;32459:27;32449:2;;32500:1;32497;32490:12"
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "approveMax(address)": "571ac8b0",
              "approveMaxMinusOne(address)": "cab372ce",
              "approveZeroThenMax(address)": "639d71a9",
              "approveZeroThenMaxMinusOne(address)": "ab3fdd50",
              "astraCLSwapCallback(int256,int256,bytes)": "11c17848",
              "callPositionManager(bytes)": "b3a2af13",
              "checkOracleSlippage(bytes,uint24,uint32)": "f25801a7",
              "checkOracleSlippage(bytes[],uint128[],uint24,uint32)": "efdeed8e",
              "exactInput((bytes,address,uint256,uint256))": "b858183f",
              "exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))": "04e45aaf",
              "exactOutput((bytes,address,uint256,uint256))": "09b81346",
              "exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))": "5023b4df",
              "factory()": "c45a0155",
              "factoryClassic()": "4f04a0db",
              "getApprovalType(address,uint256)": "dee00f35",
              "increaseLiquidity((address,address,uint256,uint256,uint256))": "f100b205",
              "mint((address,address,uint24,int24,int24,uint256,uint256,address))": "11ed56c9",
              "multicall(bytes32,bytes[])": "1f0464d1",
              "multicall(bytes[])": "ac9650d8",
              "multicall(uint256,bytes[])": "5ae401dc",
              "positionManager()": "791b98bc",
              "pull(address,uint256)": "f2d5d56b",
              "refundAMB()": "c53af304",
              "selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)": "f3995c67",
              "selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)": "4659a494",
              "selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)": "a4a78f0c",
              "selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)": "c2e3140a",
              "swapExactTokensForTokens(uint256,uint256,address[],address)": "472b43f3",
              "swapTokensForExactTokens(uint256,uint256,address[],address)": "42712a67",
              "sweepToken(address,uint256)": "e90a182f",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "sweepTokenWithFee(address,uint256,address,uint256,address)": "e0e189a0",
              "sweepTokenWithFee(address,uint256,uint256,address)": "3068c554",
              "unwrapSAMB(uint256)": "acf8a4ed",
              "unwrapSAMB(uint256,address)": "a98ce37f",
              "unwrapSAMBWithFee(uint256,address,uint256,address)": "97e87d9d",
              "unwrapSAMBWithFee(uint256,uint256,address)": "bc122a54",
              "wrapAMB(uint256)": "e4a40545"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factoryClassic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factoryCL\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_positionManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_SAMB\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveMax\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveMaxMinusOne\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveZeroThenMax\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveZeroThenMaxMinusOne\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"astraCLSwapCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callPositionManager\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"paths\",\"type\":\"bytes[]\"},{\"internalType\":\"uint128[]\",\"name\":\"amounts\",\"type\":\"uint128[]\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"}],\"internalType\":\"struct ICLSwapRouter.ExactInputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ICLSwapRouter.ExactInputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"}],\"internalType\":\"struct ICLSwapRouter.ExactOutputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ICLSwapRouter.ExactOutputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factoryClassic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"getApprovalType\",\"outputs\":[{\"internalType\":\"enum IApproveAndCall.ApprovalType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"}],\"internalType\":\"struct IApproveAndCall.IncreaseLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"increaseLiquidity\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"internalType\":\"struct IApproveAndCall.MintParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"previousBlockhash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"positionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"pull\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitAllowed\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitAllowedIfNecessary\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitIfNecessary\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMin\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"swapExactTokensForTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMax\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"swapTokensForExactTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"wrapAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveMax(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveMaxMinusOne(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveZeroThenMax(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveZeroThenMaxMinusOne(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"astraCLSwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IAstraCLPoolActions#swap call\"}},\"callPositionManager(bytes)\":{\"params\":{\"data\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"checkOracleSlippage(bytes,uint24,uint32)\":{\"params\":{\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"path\":\"The path to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"params\":{\"amounts\":\"The weights for each entry in `paths`\",\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"paths\":\"The paths to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}},\"exactInput((bytes,address,uint256,uint256))\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactOutput((bytes,address,uint256,uint256))\":{\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}},\"getApprovalType(address,uint256)\":{\"details\":\"Lens to be called off-chain to determine which (if any) of the relevant approval functions should be called\",\"params\":{\"amount\":\"The amount to approve\",\"token\":\"The token to approve\"},\"returns\":{\"_0\":\"The required approval type\"}},\"increaseLiquidity((address,address,uint256,uint256,uint256))\":{\"params\":{\"params\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"mint((address,address,uint24,int24,int24,uint256,uint256,address))\":{\"params\":{\"params\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"multicall(bytes32,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"previousBlockhash\":\"The expected parent blockHash\"},\"returns\":{\"_0\":\"The results from each of the calls passed in via data\"}},\"multicall(bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"multicall(uint256,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"deadline\":\"The time by which this function must be called before failing\"},\"returns\":{\"_0\":\"The results from each of the calls passed in via data\"}},\"pull(address,uint256)\":{\"params\":{\"token\":\"The token to pull\",\"value\":\"The amount to pay\"}},\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this).\",\"params\":{\"deadline\":\"A timestamp, the current blocktime must be less than or equal to this timestamp\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\",\"value\":\"The amount that can be spent of token\"}},\"selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this)\",\"params\":{\"expiry\":\"The timestamp at which the permit is no longer valid\",\"nonce\":\"The current nonce of the owner\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this) Can be used instead of #selfPermitAllowed to prevent calls from failing due to a frontrun of a call to #selfPermitAllowed.\",\"params\":{\"expiry\":\"The timestamp at which the permit is no longer valid\",\"nonce\":\"The current nonce of the owner\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this). Can be used instead of #selfPermit to prevent calls from failing due to a frontrun of a call to #selfPermit\",\"params\":{\"deadline\":\"A timestamp, the current blocktime must be less than or equal to this timestamp\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\",\"value\":\"The amount that can be spent of token\"}},\"swapExactTokensForTokens(uint256,uint256,address[],address)\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"amountIn\":\"The amount of token to swap\",\"amountOutMin\":\"The minimum amount of output that must be received\",\"path\":\"The ordered list of tokens to swap through\",\"to\":\"The recipient address\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"swapTokensForExactTokens(uint256,uint256,address[],address)\":{\"params\":{\"amountInMax\":\"The maximum amount of input that the caller will pay\",\"amountOut\":\"The amount of token to swap for\",\"path\":\"The ordered list of tokens to swap through\",\"to\":\"The recipient address\"},\"returns\":{\"amountIn\":\"The amount of token to pay\"}},\"sweepToken(address,uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"token\":\"The contract address of the token which will be transferred to msg.sender\"}},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"unwrapSAMB(uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\"}},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"wrapAMB(uint256)\":{\"details\":\"The resulting SAMB is custodied by the router, thus will require further distribution\",\"params\":{\"value\":\"The amount of AMB to wrap\"}}},\"title\":\"Astra Classic and CL Swap Router\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveMax(address)\":{\"notice\":\"Approves a token for the maximum possible amount\"},\"approveMaxMinusOne(address)\":{\"notice\":\"Approves a token for the maximum possible amount minus one\"},\"approveZeroThenMax(address)\":{\"notice\":\"Approves a token for zero, then the maximum possible amount\"},\"approveZeroThenMaxMinusOne(address)\":{\"notice\":\"Approves a token for zero, then the maximum possible amount minus one\"},\"astraCLSwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\"},\"callPositionManager(bytes)\":{\"notice\":\"Calls the position manager with arbitrary calldata\"},\"checkOracleSlippage(bytes,uint24,uint32)\":{\"notice\":\"Ensures that the current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"notice\":\"Ensures that the weighted average current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"},\"exactInput((bytes,address,uint256,uint256))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another along the specified path\"},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another token\"},\"exactOutput((bytes,address,uint256,uint256))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed) that may remain in the router after the swap.\"},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another token that may remain in the router after the swap.\"},\"increaseLiquidity((address,address,uint256,uint256,uint256))\":{\"notice\":\"Calls the position manager's increaseLiquidity function\"},\"mint((address,address,uint24,int24,int24,uint256,uint256,address))\":{\"notice\":\"Calls the position manager's mint function\"},\"multicall(bytes32,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(uint256,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"pull(address,uint256)\":{\"notice\":\"Transfers the specified amount of a token from the msg.sender to address(this)\"},\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend a given token from `msg.sender`\"},\"selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\"},\"selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\"},\"selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend a given token from `msg.sender`\"},\"swapExactTokensForTokens(uint256,uint256,address[],address)\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another token\"},\"swapTokensForExactTokens(uint256,uint256,address[],address)\":{\"notice\":\"Swaps as little as possible of one token for an exact amount of another token\"},\"sweepToken(address,uint256)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMB(uint256)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB.\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"wrapAMB(uint256)\":{\"notice\":\"Wraps the contract's AMB balance into SAMB\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/SwapRouter02.sol\":\"SwapRouter02\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":{\"keccak256\":\"0xaa82f63f0c930e51d6aaae0d59e7bf3ef5b32371ac0549f6e07bfcab5b4dcb16\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73419af0b4f35f02c3b89d387d6ac46041637a7133e249de617103b7567bf4c4\",\"dweb:/ipfs/QmTfwEX1dCoUUUMaMFzDnqDcFXihHQnEG1fbkBFpidRs8o\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"@airdao/astra-cl-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x5340256039418f5d03512a44173d3dcf1da277a73a461e06fb5668f49cfc46f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75dee99795d1125875233a7f1d356935099cc97b4085c0e451060d77db85d144\",\"dweb:/ipfs/QmTGqyrxVLQd8TBaarqSQDiYvq1QFutCdmTyXk6JpxzKTN\"]},\"@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0x86715eb960f18e01ac94e3bba4614ed51a887fa3c5bd1c43bf80aa98e019cf2d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bfc1d5d58e59015086b0e65a6c3a2ddad312e2350480510f6c0c8167f3d71a37\",\"dweb:/ipfs/QmQndULYjFsHKHjMAKLMfc12vWbVB5FawtioHtvwcWRJZp\"]},\"@airdao/astra-cl-core/contracts/libraries/SafeCast.sol\":{\"keccak256\":\"0xd4c1c1b67f946b077d7c52a158113763a89a210fc2927b8491055a962ecd18c0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5344400c74320ca8dbe19241db7ff49babbd6c875c1b561c79d6e4315a9fb5f9\",\"dweb:/ipfs/QmRKCNTbkovxK1WvejXZr3iAHhGN97ZT1yWGsWCJFkrT5X\"]},\"@airdao/astra-cl-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xe22d07f1ebf9c8468c81cb6905bfc8f8a54fa2f9b4a50742202a47cdbcb5af80\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d4773ca5008d2a2f496370695942c8ba3d6e1d487adbf5cda1149da12e3a6268\",\"dweb:/ipfs/QmcPYTLpEWfU8e3KAYBfHH7uYR4tGAkvnWrWS1CG8EkyLC\"]},\"@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol\":{\"keccak256\":\"0x1aa66f71234064a0c0976f62233f2edbd69554e5ad817dc97f318bc8e11f4da6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b3a40450e9d6b0f9cb91b40ffd6215612505bd74e7d954529958f4edc6ee7b93\",\"dweb:/ipfs/QmewsUCHK5N5KhNtqEwK8JgsXFADyFBrQRS5HoDWM5gi3b\"]},\"@airdao/astra-cl-periphery/contracts/base/Multicall.sol\":{\"keccak256\":\"0xfcfd78c62d2145634a791d5680a1af7055fbd301c415d29c09333c99c37d9037\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0d1c8f4a18cec8ad49e5269c5b07c7f6fd497dfc1b7b777f8ddcfb8055efd803\",\"dweb:/ipfs/QmdeCTnfHM3RGtQuo3DMX9m7gPspGGwQp7ho6m9cJjjnER\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol\":{\"keccak256\":\"0x88e12ecce0236f43cac955dee8ae50e8ffba7d133625ba18b590d51b9e030098\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9f10d1317582a91e7842901c6888c4bb28939817cefa3d3f88458c2ec653b6ed\",\"dweb:/ipfs/QmP2qV22Uq6Pou1VkgNzRnXHzNJ71CBpVBYhYDnLccBx8U\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x93f6d5b75cb4e7204ae63f45722eb82ac62f732d56cbf31f3a65ce2ea262cc6d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a23090fa2e584774818eeb9e548086b8c383acd9d35830845191fd114bfbf03b\",\"dweb:/ipfs/QmXr9EGVoUMCGttgsDFJZ5UBrBjY42qBV2FRakCDi8aeTs\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol\":{\"keccak256\":\"0xc736bab599912d6212e8414ee4ba7af0c1e08ff6aa11caa85f5f6e07f7d421c3\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://06f6c13a86900c71fa486fc029a59d1b7eb96162bb42885b5f845d995294893e\",\"dweb:/ipfs/QmUcBxMsmncw9n6eXhzzwSasGBvBGKH5FT8HSrAxrsXV4A\"]},\"@airdao/astra-cl-periphery/contracts/base/SelfPermit.sol\":{\"keccak256\":\"0xe75aedfc1eff6c84adac82b2bc41d197127a74530f0c344a7a122a6c8ec186be\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://05150ae691e10f2c9c82ad46de86c8b6683d8eba995e6f9ff82eaefc064902e9\",\"dweb:/ipfs/QmdKxxmxCPxV7qe11MbRhpaQXDAnnKWH1BoTMmEXYPAA7g\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IERC721Permit.sol\":{\"keccak256\":\"0x383d39a13ce10019d4ebd27a694d085c03a1498a1cc31ec1511fac91b5296342\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3d22d9cc7a33829bd31da42d96bd75401a675ef32c8eb4d9e3074c21ec1241b6\",\"dweb:/ipfs/QmNrvD2T3k3wH5kWz6Kss9mSjxdJhXAA6NTH1Evj8j3k6A\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol\":{\"keccak256\":\"0xa8f9d0061ee730a522dc4bae6bd5cabb3e997e2c5983da183e912bdca93dfa7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://496b68d4f72d58cc83cf51bd9cc9c99aaa46dc3c3df7c951a9e50ba29ee33016\",\"dweb:/ipfs/Qmc3bkXwuRP8mDpcKgvLgbCKn8tD8PGCaBjnLHSPMJCRGD\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol\":{\"keccak256\":\"0x920448f826d2d8e40aae06ce855644abac394c085a769605399d80cb36bde27f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6b299cd039cf1fb92c9c58f666dfbb2753431f3904bed659ddd653ad9a503045\",\"dweb:/ipfs/QmZWb11WyJgGCW35e2opF3Ncstu59krJCDPAZpHWU9rqix\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x95eb2970f74b59074666d156779b7eeb1a34228476ac26f987f6f563b834098d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bd17994291ec4231d4fa66af52e0cfd4f7883365ecb41f534acf08afffa8806d\",\"dweb:/ipfs/QmUjst3v8zu8DE9Ue3YHJJoRLcZGd9CXP3jVoC2tSAUjs9\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPoolInitializer.sol\":{\"keccak256\":\"0x5d9b76c0eed9d836f8ab1d65a37921c56c46a69802f28c312f239ce159634473\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ab60ec035cd2f600d7e89828bcf1427a674defdcb4c511679144aae42273ba2d\",\"dweb:/ipfs/QmYWy2dAG2Mq4BUwybjVCbGtXYRG8Lz1jRfK6L924YuwRa\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol\":{\"keccak256\":\"0x402d04301ffd41853f4949a574b8853c46d076910ed734f5e4478bf64369a3ed\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6a5536d179ff3777920ff8ed60cfc457f7a4dda1373c8f0394b2a8e0fe537525\",\"dweb:/ipfs/QmdaYGikTmmi2vbECnoomZ8vS8PBiD4Bq8BoFCYqFZmKgR\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol\":{\"keccak256\":\"0x8c4c1b8e724e0a78cb691d703dd37cd91b8bd6600537fb227807a194025a792d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://783be851155842a02cdb0483c3a69ecc0e7ae8545f65cec1d4aeb355b2026a7d\",\"dweb:/ipfs/QmZNBQosTjpGNKB3Eo2K6Zzye7FYiLVoEki5iPB2Y69jz2\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol\":{\"keccak256\":\"0x5b5789677c6b7e447fd774a5c065d9547c85f22e950e18690f686a6b779d78dc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c2e45681c8d5c704fbfef7369ff7878e6af2d987ba564eb97148ee6e8db87e49\",\"dweb:/ipfs/Qmeg4ynPmWipSVb6BRj4o8uZRbE2bQk8nCwp9apMAEq8Xk\"]},\"@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol\":{\"keccak256\":\"0xed1b8acd0184eb321d5f4b5c2576608d1c12f5db1bb72d950054438f7f1946a6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f55d6aca86dcf1f1ab6413f48964f821306a29914c2117c16f20446faa5d6d0a\",\"dweb:/ipfs/QmWKbbg6kA9kkPVrCh6hJMnPhK1NhuVoHEd9s3vmYWsvTa\"]},\"@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol\":{\"keccak256\":\"0xf21a3d7e2bc14386ce7b072b124b580df53441a32591770845860e8947f942d0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6941e21d9bc52bddc65079c5e7bc9d6ffd6553f6ed7f3d3b340996a55115b46f\",\"dweb:/ipfs/QmaDJ9uafahho77WP5izBCRL4W3mVM7NFL5q5QR5YvAC3A\"]},\"@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol\":{\"keccak256\":\"0xf9dab1f6ac5c82c1a19688e900ab355a266e85af4f76346db925789352081c31\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1ba91097b8fdd8a46d9b837e7a80f8e3ccdaeb3d49870c6558b88d5064abdfce\",\"dweb:/ipfs/QmaocoW3nkgMSZjTLXm15ERTPN2yFLMAWE114s1R99hgrS\"]},\"@airdao/astra-cl-periphery/contracts/libraries/Path.sol\":{\"keccak256\":\"0x0a6928608f48763796089e22dfc02a462cce63bb7727663961b3ed8c4f3eb862\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73bb4f107faf873db8700ce8950d2c4c88d41e0e1716da599bb733ad884f95eb\",\"dweb:/ipfs/QmZXSaPVpgDXpkKqYRdByJ3UXaMV2ATkr7V72nRZij8wmB\"]},\"@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0xdd82100913bcb7c490e9e6912ab33994bd97d5a59e67209826ebf917bc8271c1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ecfc24c77d80aa718604d8a2c4d59460b76b5fd567d15206414e3838dd6698b7\",\"dweb:/ipfs/QmVtUC9dnade4RkzXaSqEFdAkiEftJ777jmT619LX2VLGv\"]},\"@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x0fef3409a5a161cd12b777fdfa86845d64b86f72c78b8312c9e3c92f9017e5c5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c9df2c76e4581a1d343ea1dd1d0478df7f1c1eef1b476ccea452367ef5b75e65\",\"dweb:/ipfs/QmWZVBRQcn4ekrmCDFkM4BSRAZ1m72GHzUnfzUn39PwQow\"]},\"@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol\":{\"keccak256\":\"0xd2259aac0746706697d6e8097a48b592308fb1e1e78077cc3e0540234dee6648\",\"urls\":[\"bzz-raw://525ef590cf7e5c54030527703a7409b74c70497715aebf8dae0b877ee136dac7\",\"dweb:/ipfs/QmVgR4Pk3i8X8oS8xxNnVsFkDXXGP2wu4YvhG23e3z5K9q\"]},\"@openzeppelin/contracts/drafts/IERC20Permit.sol\":{\"keccak256\":\"0x1aab7754719ba764a8a05bec47e975001400f62986474945eb3dbee6d871259f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c14e8ff1b384bdb68f262669364b1e79fbbd82b85938b7ce788a1395c40c6a2\",\"dweb:/ipfs/QmUKLXfSeEuRUXkeWLBhjHTKeSFoNBCS1RaMXv1AmHXYzn\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xd2f30fad5b24c4120f96dbac83aacdb7993ee610a9092bc23c44463da292bf8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3d4e72409e392c7694b6405a0136cf073d8da016df33ef8f9ad195f724ebfea\",\"dweb:/ipfs/QmPGcddKq6CgsiKnxUUif2q76wRqP3dmdQ6bKuHCLmb8Wa\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xb11597841d47f7a773bca63ca323c76f804cb5d944788de0327db5526319dc82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://930d2da1934886a1098753be4173dd89c45ca0b306a1930accd37e00b1af4aaf\",\"dweb:/ipfs/QmVSXnvEV41d43k8cfpANHoTYMKgBDBL8iCbxkLfEtQZBe\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol\":{\"keccak256\":\"0x2789dfea2d73182683d637db5729201f6730dae6113030a94c828f8688f38f2f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36374eaa68c0737bf7e1ae13d55327b4868fb0825e971ee729f4b8d355ededb4\",\"dweb:/ipfs/QmYN9yuzz4P5SumiT6rgYgTEY8MhnPQapMwx2LHxRKju7r\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0xc82c7d1d732081d9bd23f1555ebdf8f3bc1738bc42c2bfc4b9aa7564d9fa3573\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb07e4ff3352161510a0d1536fe93f3c62526358e073a8bab2a8abbb27d0da1\",\"dweb:/ipfs/QmX7K1JjnWKT1JzZT92Qx5zNJQYbssE533TLFHP88hj2fb\"]},\"contracts/CLSwapRouter.sol\":{\"keccak256\":\"0x030d790990bc095cf80ecb7d6b72cd3b04b0df1b6fcff874218d9e44f7dda6b8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://106cd65a78f0e3efd207074ff77e2959fe1273cb791dc6a3c8cfe2088c883b4a\",\"dweb:/ipfs/QmfKV4VMqshiJnaYbWAttPrZg1RUnq6qUNxJW9xQPpqNEb\"]},\"contracts/ClassicSwapRouter.sol\":{\"keccak256\":\"0xf9fb7f5d64b4f11e961de711759194b868544e3fb5784c743528e3b26a1e7e8d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://075bc67a2a15ca7e3708df20b351d763779a40b01ef22d6836aec827cc9b9eef\",\"dweb:/ipfs/QmeiSdGNmoAorUzhw91rzQwhmRvQ5JPCPNejeX6jk9w2ab\"]},\"contracts/SwapRouter02.sol\":{\"keccak256\":\"0xdc3533f16f44d2aa7c8f18ec85082e97ac6dc11193f3d010f8557138193e6367\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://99a12e004a3105ebde42f0fd6f84f40d54f1641e3cca3a83e271b5f5206c3363\",\"dweb:/ipfs/QmU9yty4rAja8ynQhQmVYguwa9y9ftXGAEyJRB1gmyJgom\"]},\"contracts/base/ApproveAndCall.sol\":{\"keccak256\":\"0x13063feddef07fea199a6a68e44f1966c6d5a68802671be8e2b1cd2d8100206d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://33a8388bd3661aec00be96f965aec095646179b34c53bea67a27130f5b7c3bbd\",\"dweb:/ipfs/QmaUvz1xAe2gjWiX7aZzxA36XSSXhYzChTGQZYYUbifQan\"]},\"contracts/base/ImmutableState.sol\":{\"keccak256\":\"0xa52c8265326bed23bab067cfaf4a260d12a1b653618920534bb3e6d65c51e047\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1579ffa9db15cb07f0dfc0947feaee663c992455ba719373ac358254aad879ca\",\"dweb:/ipfs/QmSyStKaiERPMswqVFsn37CAGanBoTYNA6FUVWyZr9xDtK\"]},\"contracts/base/MulticallExtended.sol\":{\"keccak256\":\"0xce6129abeea57b50dafe59cd055dc6fcc4f2b788bbbc28f4a1b3ae313cf5306e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e751053bdcedb9cbdb4ef995abf6e200a185372ac5bfe6217a5fcb92fec6d209\",\"dweb:/ipfs/QmeQgjAooNtBfN3jB696tyj3Aa5km6qvwFCij6s4nwbKRU\"]},\"contracts/base/OracleSlippage.sol\":{\"keccak256\":\"0x07ac427a696edbfd94c4bed8effc35b0cdd58e03ef686b90cdb53595c192c735\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bdf770fc6939af09a7a804446d1d6ab9e230ff0255bb2922ae88778677071ecc\",\"dweb:/ipfs/QmYRaL4z9KFDtDTkehTXmfNMntPLxsjtAUPp5GoNELvdiK\"]},\"contracts/base/PeripheryPaymentsExtended.sol\":{\"keccak256\":\"0xf2685da6776cf0dc988436351c93f23087320cad14f6a0ff8a8f5fc37847dd99\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a9514e43dcb646ca0e6ddb628d8371f875c843a46307eee68ecf5f89c8cb09fd\",\"dweb:/ipfs/QmeDK6SA7MoZ2VZ1t4e44DbzW1EX7WXjfeNVvaxpzZ8DMh\"]},\"contracts/base/PeripheryPaymentsWithFeeExtended.sol\":{\"keccak256\":\"0x1c57739b3cb14b514f418301c59eac6a385d5d12bd0d674172e37b45abd540d2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5381be26637b6c2b2b6418a2cab3fd66165b472182d2b17474c7ecb0eb034fec\",\"dweb:/ipfs/QmRuNHixFfkVtHSsBih9LSFrqn9XtsbaqM6yRXC1YoHJEn\"]},\"contracts/base/PeripheryValidationExtended.sol\":{\"keccak256\":\"0x9514e5bb1c2b3c8589c74ad4c0e3ac469355ad8a9828ce605d9453b24e186684\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b221acf356ba8fb1f8563a783064595a3e4c0e5afe8ed19ec9102d5b59f0e621\",\"dweb:/ipfs/QmSojhh19Kyci7eFByVXy2gi5rGHmzMeNDvmDszJkDLxLZ\"]},\"contracts/interfaces/IApproveAndCall.sol\":{\"keccak256\":\"0x7d3824ad9a4090e2f4bb98d844f6ceb720f8c2608a909e4c0d86584be32d7fce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8230cdc6fd9171081943821d71888cec07bf4bae0b5fb85fa7c450f3c2b1ad44\",\"dweb:/ipfs/QmXF9NtVtCjr92ngVwwDjSGpiktGz2BDPHsvVoFPgkSP4K\"]},\"contracts/interfaces/ICLSwapRouter.sol\":{\"keccak256\":\"0xf21791d14cb0fa67db54f04c322e294616240fef896fec0214be7aa196b767ad\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f3d1acf197037424a8e4901b64b4a35381d88ae361c09c5f3660ae59c5cac190\",\"dweb:/ipfs/QmaAHSbWfriiUsiiArgSiuJqw6s9BeP6Mfy3rZsoTzQoiL\"]},\"contracts/interfaces/IClassicSwapRouter.sol\":{\"keccak256\":\"0x5b35aa4bb97961db53c1f178c034c40a9ae4ce2606356b06620b918a5f91ae5a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8e63d5f61b1b28deddeddc89da42e85429966732a661bd53738ca6fb1a478d15\",\"dweb:/ipfs/QmVX5sjGijDfGFNP767L4rtsiL5DC84yJSfUpWiwJN84CP\"]},\"contracts/interfaces/IImmutableState.sol\":{\"keccak256\":\"0x25fee5bdbdbbb57ffb91c3ab66b9c2db351e7f6061ad2f98ef2991f6b27a15e0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7bf237158fbcfabf64bb0da5c7ff0b0161ed76c45c7197ecc5ac54b338786bfc\",\"dweb:/ipfs/QmT74A24bW9qu1dJUxPQLaqLBnSe57PVgfUJxpu3sEf9fg\"]},\"contracts/interfaces/IMulticallExtended.sol\":{\"keccak256\":\"0x0fee6c8fe77db406ea3a2c34767322d4170108596d877fcf9601315de8df502a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://32eb6261abd448977034e5ed22c7e1757f4fd1d667362bb1ad7a972169ce78b8\",\"dweb:/ipfs/QmazeBaXFvy3dTPsoaeuaEsxHEruikeSAXcXkFzyTUvmvQ\"]},\"contracts/interfaces/IOracleSlippage.sol\":{\"keccak256\":\"0xa9d1e4336b20fa992ab6b742f2750b3fb660e0d667eac304c5bbd8a8ea96edfc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://afe7afc18f293b6bc189550f20c318ecccda37241409a031bc94cf7412420dbd\",\"dweb:/ipfs/QmVuiKox1K4Df5QS6RLHQDprYaDMXRRvHW3ym3NDdi3vrq\"]},\"contracts/interfaces/IPeripheryPaymentsExtended.sol\":{\"keccak256\":\"0x373eb395bc1f5b9c92fbdbdf676d12784c907e7253ea9f262621e8ae812e0938\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5b41980a17c8fc46d28a1eca9462ad3b07c1c2b0c547f3cb7ee63b1ca126b96f\",\"dweb:/ipfs/QmcVfvRiaxDA3MBdZECouvChaMzuqgRuPQTnn3raLEukYb\"]},\"contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol\":{\"keccak256\":\"0xfab1e04cf78e4769a60ddff118648cf7a50cd874d500265c315ee6e2d0ac733c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://711d79e27131b59f79d0b7c94eed61b0b08d61bca9066a921a4f47ebc0f3c76f\",\"dweb:/ipfs/QmTw4pADZp6vqygUMVThgMYx7LtT1jwVLM4NcZvPhjSvpT\"]},\"contracts/interfaces/ISwapRouter02.sol\":{\"keccak256\":\"0x366b171042947689893be1ef6934e86a9a5739df07fad70ce3c53bd379435b82\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c707e5b60692f3214f02e1a30dce6215af9c5fcd8e9003f844a43f9ed348900b\",\"dweb:/ipfs/QmZZbwcZymjh34YXP1fEsQcFCZyGWGW8UAGdrkLM31EYFh\"]},\"contracts/libraries/AstraClassicLibrary.sol\":{\"keccak256\":\"0xa0206fe7bc64db0582ab194bf47755b617a204e7e7768593968f9c6e7e7e5d87\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://be4c4afea9bef22f244b7ed926651026515c385410fb469876eff92a21548036\",\"dweb:/ipfs/QmeqP6cPs2igCKpQsA7D8sUiniJtTGXRx5K3rc3XAbVWL3\"]},\"contracts/libraries/Constants.sol\":{\"keccak256\":\"0x6eeb0392bef0afeb03e18f0e2824a96e76e55282176ea8b64e14a0fba91c9bf2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7ed2216986be881a9924e6efb5f3848367d0fad8cc60c4eb1772791773fedc45\",\"dweb:/ipfs/QmemwuJYDGRheUQxtzxH6mV18xTBFYtVJK26DNtbSSaC9k\"]}},\"version\":1}"
        }
      },
      "contracts/base/ApproveAndCall.sol": {
        "ApproveAndCall": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveMax",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveMaxMinusOne",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveZeroThenMax",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveZeroThenMaxMinusOne",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "callPositionManager",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factoryClassic",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "getApprovalType",
              "outputs": [
                {
                  "internalType": "enum IApproveAndCall.ApprovalType",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token0",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "token1",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IApproveAndCall.IncreaseLiquidityParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "increaseLiquidity",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token0",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "token1",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickLower",
                      "type": "int24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickUpper",
                      "type": "int24"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct IApproveAndCall.MintParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "positionManager",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approveMax(address)": "571ac8b0",
              "approveMaxMinusOne(address)": "cab372ce",
              "approveZeroThenMax(address)": "639d71a9",
              "approveZeroThenMaxMinusOne(address)": "ab3fdd50",
              "callPositionManager(bytes)": "b3a2af13",
              "factoryClassic()": "4f04a0db",
              "getApprovalType(address,uint256)": "dee00f35",
              "increaseLiquidity((address,address,uint256,uint256,uint256))": "f100b205",
              "mint((address,address,uint24,int24,int24,uint256,uint256,address))": "11ed56c9",
              "positionManager()": "791b98bc"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveMax\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveMaxMinusOne\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveZeroThenMax\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveZeroThenMaxMinusOne\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callPositionManager\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factoryClassic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"getApprovalType\",\"outputs\":[{\"internalType\":\"enum IApproveAndCall.ApprovalType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"}],\"internalType\":\"struct IApproveAndCall.IncreaseLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"increaseLiquidity\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"internalType\":\"struct IApproveAndCall.MintParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"positionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveMax(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveMaxMinusOne(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveZeroThenMax(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveZeroThenMaxMinusOne(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"callPositionManager(bytes)\":{\"params\":{\"data\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"getApprovalType(address,uint256)\":{\"details\":\"Lens to be called off-chain to determine which (if any) of the relevant approval functions should be called\",\"params\":{\"amount\":\"The amount to approve\",\"token\":\"The token to approve\"},\"returns\":{\"_0\":\"The required approval type\"}},\"increaseLiquidity((address,address,uint256,uint256,uint256))\":{\"params\":{\"params\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"mint((address,address,uint24,int24,int24,uint256,uint256,address))\":{\"params\":{\"params\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}}},\"title\":\"Approve and Call\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveMax(address)\":{\"notice\":\"Approves a token for the maximum possible amount\"},\"approveMaxMinusOne(address)\":{\"notice\":\"Approves a token for the maximum possible amount minus one\"},\"approveZeroThenMax(address)\":{\"notice\":\"Approves a token for zero, then the maximum possible amount\"},\"approveZeroThenMaxMinusOne(address)\":{\"notice\":\"Approves a token for zero, then the maximum possible amount minus one\"},\"callPositionManager(bytes)\":{\"notice\":\"Calls the position manager with arbitrary calldata\"},\"increaseLiquidity((address,address,uint256,uint256,uint256))\":{\"notice\":\"Calls the position manager's increaseLiquidity function\"},\"mint((address,address,uint24,int24,int24,uint256,uint256,address))\":{\"notice\":\"Calls the position manager's mint function\"}},\"notice\":\"Allows callers to approve the Astra CL position manager from this contract, for any token, and then make calls into the position manager\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/ApproveAndCall.sol\":\"ApproveAndCall\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IERC721Permit.sol\":{\"keccak256\":\"0x383d39a13ce10019d4ebd27a694d085c03a1498a1cc31ec1511fac91b5296342\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3d22d9cc7a33829bd31da42d96bd75401a675ef32c8eb4d9e3074c21ec1241b6\",\"dweb:/ipfs/QmNrvD2T3k3wH5kWz6Kss9mSjxdJhXAA6NTH1Evj8j3k6A\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol\":{\"keccak256\":\"0x920448f826d2d8e40aae06ce855644abac394c085a769605399d80cb36bde27f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6b299cd039cf1fb92c9c58f666dfbb2753431f3904bed659ddd653ad9a503045\",\"dweb:/ipfs/QmZWb11WyJgGCW35e2opF3Ncstu59krJCDPAZpHWU9rqix\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPoolInitializer.sol\":{\"keccak256\":\"0x5d9b76c0eed9d836f8ab1d65a37921c56c46a69802f28c312f239ce159634473\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ab60ec035cd2f600d7e89828bcf1427a674defdcb4c511679144aae42273ba2d\",\"dweb:/ipfs/QmYWy2dAG2Mq4BUwybjVCbGtXYRG8Lz1jRfK6L924YuwRa\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xd2f30fad5b24c4120f96dbac83aacdb7993ee610a9092bc23c44463da292bf8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3d4e72409e392c7694b6405a0136cf073d8da016df33ef8f9ad195f724ebfea\",\"dweb:/ipfs/QmPGcddKq6CgsiKnxUUif2q76wRqP3dmdQ6bKuHCLmb8Wa\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xb11597841d47f7a773bca63ca323c76f804cb5d944788de0327db5526319dc82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://930d2da1934886a1098753be4173dd89c45ca0b306a1930accd37e00b1af4aaf\",\"dweb:/ipfs/QmVSXnvEV41d43k8cfpANHoTYMKgBDBL8iCbxkLfEtQZBe\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol\":{\"keccak256\":\"0x2789dfea2d73182683d637db5729201f6730dae6113030a94c828f8688f38f2f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36374eaa68c0737bf7e1ae13d55327b4868fb0825e971ee729f4b8d355ededb4\",\"dweb:/ipfs/QmYN9yuzz4P5SumiT6rgYgTEY8MhnPQapMwx2LHxRKju7r\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0xc82c7d1d732081d9bd23f1555ebdf8f3bc1738bc42c2bfc4b9aa7564d9fa3573\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb07e4ff3352161510a0d1536fe93f3c62526358e073a8bab2a8abbb27d0da1\",\"dweb:/ipfs/QmX7K1JjnWKT1JzZT92Qx5zNJQYbssE533TLFHP88hj2fb\"]},\"contracts/base/ApproveAndCall.sol\":{\"keccak256\":\"0x13063feddef07fea199a6a68e44f1966c6d5a68802671be8e2b1cd2d8100206d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://33a8388bd3661aec00be96f965aec095646179b34c53bea67a27130f5b7c3bbd\",\"dweb:/ipfs/QmaUvz1xAe2gjWiX7aZzxA36XSSXhYzChTGQZYYUbifQan\"]},\"contracts/base/ImmutableState.sol\":{\"keccak256\":\"0xa52c8265326bed23bab067cfaf4a260d12a1b653618920534bb3e6d65c51e047\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1579ffa9db15cb07f0dfc0947feaee663c992455ba719373ac358254aad879ca\",\"dweb:/ipfs/QmSyStKaiERPMswqVFsn37CAGanBoTYNA6FUVWyZr9xDtK\"]},\"contracts/interfaces/IApproveAndCall.sol\":{\"keccak256\":\"0x7d3824ad9a4090e2f4bb98d844f6ceb720f8c2608a909e4c0d86584be32d7fce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8230cdc6fd9171081943821d71888cec07bf4bae0b5fb85fa7c450f3c2b1ad44\",\"dweb:/ipfs/QmXF9NtVtCjr92ngVwwDjSGpiktGz2BDPHsvVoFPgkSP4K\"]},\"contracts/interfaces/IImmutableState.sol\":{\"keccak256\":\"0x25fee5bdbdbbb57ffb91c3ab66b9c2db351e7f6061ad2f98ef2991f6b27a15e0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7bf237158fbcfabf64bb0da5c7ff0b0161ed76c45c7197ecc5ac54b338786bfc\",\"dweb:/ipfs/QmT74A24bW9qu1dJUxPQLaqLBnSe57PVgfUJxpu3sEf9fg\"]}},\"version\":1}"
        }
      },
      "contracts/base/ImmutableState.sol": {
        "ImmutableState": {
          "abi": [
            {
              "inputs": [],
              "name": "factoryClassic",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "positionManager",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryClassic()": "4f04a0db",
              "positionManager()": "791b98bc"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"factoryClassic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"positionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"factoryClassic\":{\"return\":\"Returns the address of the Astra Classic factory\"},\"positionManager\":{\"return\":\"Returns the address of Astra CL NFT position manager\"}},\"title\":\"Immutable state\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Immutable state used by the swap router\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/ImmutableState.sol\":\"ImmutableState\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/base/ImmutableState.sol\":{\"keccak256\":\"0xa52c8265326bed23bab067cfaf4a260d12a1b653618920534bb3e6d65c51e047\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1579ffa9db15cb07f0dfc0947feaee663c992455ba719373ac358254aad879ca\",\"dweb:/ipfs/QmSyStKaiERPMswqVFsn37CAGanBoTYNA6FUVWyZr9xDtK\"]},\"contracts/interfaces/IImmutableState.sol\":{\"keccak256\":\"0x25fee5bdbdbbb57ffb91c3ab66b9c2db351e7f6061ad2f98ef2991f6b27a15e0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7bf237158fbcfabf64bb0da5c7ff0b0161ed76c45c7197ecc5ac54b338786bfc\",\"dweb:/ipfs/QmT74A24bW9qu1dJUxPQLaqLBnSe57PVgfUJxpu3sEf9fg\"]}},\"version\":1}"
        }
      },
      "contracts/base/MulticallExtended.sol": {
        "MulticallExtended": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "previousBlockhash",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "multicall(bytes32,bytes[])": "1f0464d1",
              "multicall(bytes[])": "ac9650d8",
              "multicall(uint256,bytes[])": "5ae401dc"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"previousBlockhash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"multicall(bytes32,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"previousBlockhash\":\"The expected parent blockHash\"},\"returns\":{\"_0\":\"The results from each of the calls passed in via data\"}},\"multicall(bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"multicall(uint256,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"deadline\":\"The time by which this function must be called before failing\"},\"returns\":{\"_0\":\"The results from each of the calls passed in via data\"}}},\"title\":\"Multicall\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"multicall(bytes32,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(uint256,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"}},\"notice\":\"Enables calling multiple methods in a single call to the contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/MulticallExtended.sol\":\"MulticallExtended\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol\":{\"keccak256\":\"0x1aa66f71234064a0c0976f62233f2edbd69554e5ad817dc97f318bc8e11f4da6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b3a40450e9d6b0f9cb91b40ffd6215612505bd74e7d954529958f4edc6ee7b93\",\"dweb:/ipfs/QmewsUCHK5N5KhNtqEwK8JgsXFADyFBrQRS5HoDWM5gi3b\"]},\"@airdao/astra-cl-periphery/contracts/base/Multicall.sol\":{\"keccak256\":\"0xfcfd78c62d2145634a791d5680a1af7055fbd301c415d29c09333c99c37d9037\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0d1c8f4a18cec8ad49e5269c5b07c7f6fd497dfc1b7b777f8ddcfb8055efd803\",\"dweb:/ipfs/QmdeCTnfHM3RGtQuo3DMX9m7gPspGGwQp7ho6m9cJjjnER\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol\":{\"keccak256\":\"0xc736bab599912d6212e8414ee4ba7af0c1e08ff6aa11caa85f5f6e07f7d421c3\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://06f6c13a86900c71fa486fc029a59d1b7eb96162bb42885b5f845d995294893e\",\"dweb:/ipfs/QmUcBxMsmncw9n6eXhzzwSasGBvBGKH5FT8HSrAxrsXV4A\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol\":{\"keccak256\":\"0xa8f9d0061ee730a522dc4bae6bd5cabb3e997e2c5983da183e912bdca93dfa7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://496b68d4f72d58cc83cf51bd9cc9c99aaa46dc3c3df7c951a9e50ba29ee33016\",\"dweb:/ipfs/Qmc3bkXwuRP8mDpcKgvLgbCKn8tD8PGCaBjnLHSPMJCRGD\"]},\"contracts/base/MulticallExtended.sol\":{\"keccak256\":\"0xce6129abeea57b50dafe59cd055dc6fcc4f2b788bbbc28f4a1b3ae313cf5306e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e751053bdcedb9cbdb4ef995abf6e200a185372ac5bfe6217a5fcb92fec6d209\",\"dweb:/ipfs/QmeQgjAooNtBfN3jB696tyj3Aa5km6qvwFCij6s4nwbKRU\"]},\"contracts/base/PeripheryValidationExtended.sol\":{\"keccak256\":\"0x9514e5bb1c2b3c8589c74ad4c0e3ac469355ad8a9828ce605d9453b24e186684\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b221acf356ba8fb1f8563a783064595a3e4c0e5afe8ed19ec9102d5b59f0e621\",\"dweb:/ipfs/QmSojhh19Kyci7eFByVXy2gi5rGHmzMeNDvmDszJkDLxLZ\"]},\"contracts/interfaces/IMulticallExtended.sol\":{\"keccak256\":\"0x0fee6c8fe77db406ea3a2c34767322d4170108596d877fcf9601315de8df502a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://32eb6261abd448977034e5ed22c7e1757f4fd1d667362bb1ad7a972169ce78b8\",\"dweb:/ipfs/QmazeBaXFvy3dTPsoaeuaEsxHEruikeSAXcXkFzyTUvmvQ\"]}},\"version\":1}"
        }
      },
      "contracts/base/OracleSlippage.sol": {
        "OracleSlippage": {
          "abi": [
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "paths",
                  "type": "bytes[]"
                },
                {
                  "internalType": "uint128[]",
                  "name": "amounts",
                  "type": "uint128[]"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "checkOracleSlippage(bytes,uint24,uint32)": "f25801a7",
              "checkOracleSlippage(bytes[],uint128[],uint24,uint32)": "efdeed8e",
              "factory()": "c45a0155"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"paths\",\"type\":\"bytes[]\"},{\"internalType\":\"uint128[]\",\"name\":\"amounts\",\"type\":\"uint128[]\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"checkOracleSlippage(bytes,uint24,uint32)\":{\"params\":{\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"path\":\"The path to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"params\":{\"amounts\":\"The weights for each entry in `paths`\",\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"paths\":\"The paths to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkOracleSlippage(bytes,uint24,uint32)\":{\"notice\":\"Ensures that the current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"notice\":\"Ensures that the weighted average current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/OracleSlippage.sol\":\"OracleSlippage\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"@airdao/astra-cl-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x5340256039418f5d03512a44173d3dcf1da277a73a461e06fb5668f49cfc46f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75dee99795d1125875233a7f1d356935099cc97b4085c0e451060d77db85d144\",\"dweb:/ipfs/QmTGqyrxVLQd8TBaarqSQDiYvq1QFutCdmTyXk6JpxzKTN\"]},\"@airdao/astra-cl-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xe22d07f1ebf9c8468c81cb6905bfc8f8a54fa2f9b4a50742202a47cdbcb5af80\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d4773ca5008d2a2f496370695942c8ba3d6e1d487adbf5cda1149da12e3a6268\",\"dweb:/ipfs/QmcPYTLpEWfU8e3KAYBfHH7uYR4tGAkvnWrWS1CG8EkyLC\"]},\"@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol\":{\"keccak256\":\"0x1aa66f71234064a0c0976f62233f2edbd69554e5ad817dc97f318bc8e11f4da6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b3a40450e9d6b0f9cb91b40ffd6215612505bd74e7d954529958f4edc6ee7b93\",\"dweb:/ipfs/QmewsUCHK5N5KhNtqEwK8JgsXFADyFBrQRS5HoDWM5gi3b\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol\":{\"keccak256\":\"0xed1b8acd0184eb321d5f4b5c2576608d1c12f5db1bb72d950054438f7f1946a6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f55d6aca86dcf1f1ab6413f48964f821306a29914c2117c16f20446faa5d6d0a\",\"dweb:/ipfs/QmWKbbg6kA9kkPVrCh6hJMnPhK1NhuVoHEd9s3vmYWsvTa\"]},\"@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol\":{\"keccak256\":\"0xf9dab1f6ac5c82c1a19688e900ab355a266e85af4f76346db925789352081c31\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1ba91097b8fdd8a46d9b837e7a80f8e3ccdaeb3d49870c6558b88d5064abdfce\",\"dweb:/ipfs/QmaocoW3nkgMSZjTLXm15ERTPN2yFLMAWE114s1R99hgrS\"]},\"@airdao/astra-cl-periphery/contracts/libraries/Path.sol\":{\"keccak256\":\"0x0a6928608f48763796089e22dfc02a462cce63bb7727663961b3ed8c4f3eb862\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73bb4f107faf873db8700ce8950d2c4c88d41e0e1716da599bb733ad884f95eb\",\"dweb:/ipfs/QmZXSaPVpgDXpkKqYRdByJ3UXaMV2ATkr7V72nRZij8wmB\"]},\"@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0xdd82100913bcb7c490e9e6912ab33994bd97d5a59e67209826ebf917bc8271c1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ecfc24c77d80aa718604d8a2c4d59460b76b5fd567d15206414e3838dd6698b7\",\"dweb:/ipfs/QmVtUC9dnade4RkzXaSqEFdAkiEftJ777jmT619LX2VLGv\"]},\"contracts/base/OracleSlippage.sol\":{\"keccak256\":\"0x07ac427a696edbfd94c4bed8effc35b0cdd58e03ef686b90cdb53595c192c735\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bdf770fc6939af09a7a804446d1d6ab9e230ff0255bb2922ae88778677071ecc\",\"dweb:/ipfs/QmYRaL4z9KFDtDTkehTXmfNMntPLxsjtAUPp5GoNELvdiK\"]},\"contracts/interfaces/IOracleSlippage.sol\":{\"keccak256\":\"0xa9d1e4336b20fa992ab6b742f2750b3fb660e0d667eac304c5bbd8a8ea96edfc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://afe7afc18f293b6bc189550f20c318ecccda37241409a031bc94cf7412420dbd\",\"dweb:/ipfs/QmVuiKox1K4Df5QS6RLHQDprYaDMXRRvHW3ym3NDdi3vrq\"]}},\"version\":1}"
        }
      },
      "contracts/base/PeripheryPaymentsExtended.sol": {
        "PeripheryPaymentsExtended": {
          "abi": [
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "pull",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "wrapAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "factory()": "c45a0155",
              "pull(address,uint256)": "f2d5d56b",
              "refundAMB()": "c53af304",
              "sweepToken(address,uint256)": "e90a182f",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "unwrapSAMB(uint256)": "acf8a4ed",
              "unwrapSAMB(uint256,address)": "a98ce37f",
              "wrapAMB(uint256)": "e4a40545"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"pull\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"wrapAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"pull(address,uint256)\":{\"params\":{\"token\":\"The token to pull\",\"value\":\"The amount to pay\"}},\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"sweepToken(address,uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"token\":\"The contract address of the token which will be transferred to msg.sender\"}},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"unwrapSAMB(uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\"}},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}},\"wrapAMB(uint256)\":{\"details\":\"The resulting SAMB is custodied by the router, thus will require further distribution\",\"params\":{\"value\":\"The amount of AMB to wrap\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"pull(address,uint256)\":{\"notice\":\"Transfers the specified amount of a token from the msg.sender to address(this)\"},\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"sweepToken(address,uint256)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"unwrapSAMB(uint256)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB.\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"},\"wrapAMB(uint256)\":{\"notice\":\"Wraps the contract's AMB balance into SAMB\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/PeripheryPaymentsExtended.sol\":\"PeripheryPaymentsExtended\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol\":{\"keccak256\":\"0x88e12ecce0236f43cac955dee8ae50e8ffba7d133625ba18b590d51b9e030098\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9f10d1317582a91e7842901c6888c4bb28939817cefa3d3f88458c2ec653b6ed\",\"dweb:/ipfs/QmP2qV22Uq6Pou1VkgNzRnXHzNJ71CBpVBYhYDnLccBx8U\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol\":{\"keccak256\":\"0x5b5789677c6b7e447fd774a5c065d9547c85f22e950e18690f686a6b779d78dc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c2e45681c8d5c704fbfef7369ff7878e6af2d987ba564eb97148ee6e8db87e49\",\"dweb:/ipfs/Qmeg4ynPmWipSVb6BRj4o8uZRbE2bQk8nCwp9apMAEq8Xk\"]},\"@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x0fef3409a5a161cd12b777fdfa86845d64b86f72c78b8312c9e3c92f9017e5c5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c9df2c76e4581a1d343ea1dd1d0478df7f1c1eef1b476ccea452367ef5b75e65\",\"dweb:/ipfs/QmWZVBRQcn4ekrmCDFkM4BSRAZ1m72GHzUnfzUn39PwQow\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"contracts/base/PeripheryPaymentsExtended.sol\":{\"keccak256\":\"0xf2685da6776cf0dc988436351c93f23087320cad14f6a0ff8a8f5fc37847dd99\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a9514e43dcb646ca0e6ddb628d8371f875c843a46307eee68ecf5f89c8cb09fd\",\"dweb:/ipfs/QmeDK6SA7MoZ2VZ1t4e44DbzW1EX7WXjfeNVvaxpzZ8DMh\"]},\"contracts/interfaces/IPeripheryPaymentsExtended.sol\":{\"keccak256\":\"0x373eb395bc1f5b9c92fbdbdf676d12784c907e7253ea9f262621e8ae812e0938\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5b41980a17c8fc46d28a1eca9462ad3b07c1c2b0c547f3cb7ee63b1ca126b96f\",\"dweb:/ipfs/QmcVfvRiaxDA3MBdZECouvChaMzuqgRuPQTnn3raLEukYb\"]}},\"version\":1}"
        }
      },
      "contracts/base/PeripheryPaymentsWithFeeExtended.sol": {
        "PeripheryPaymentsWithFeeExtended": {
          "abi": [
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "pull",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "wrapAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "factory()": "c45a0155",
              "pull(address,uint256)": "f2d5d56b",
              "refundAMB()": "c53af304",
              "sweepToken(address,uint256)": "e90a182f",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "sweepTokenWithFee(address,uint256,address,uint256,address)": "e0e189a0",
              "sweepTokenWithFee(address,uint256,uint256,address)": "3068c554",
              "unwrapSAMB(uint256)": "acf8a4ed",
              "unwrapSAMB(uint256,address)": "a98ce37f",
              "unwrapSAMBWithFee(uint256,address,uint256,address)": "97e87d9d",
              "unwrapSAMBWithFee(uint256,uint256,address)": "bc122a54",
              "wrapAMB(uint256)": "e4a40545"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"pull\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"wrapAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"pull(address,uint256)\":{\"params\":{\"token\":\"The token to pull\",\"value\":\"The amount to pay\"}},\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"sweepToken(address,uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"token\":\"The contract address of the token which will be transferred to msg.sender\"}},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"unwrapSAMB(uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\"}},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"wrapAMB(uint256)\":{\"details\":\"The resulting SAMB is custodied by the router, thus will require further distribution\",\"params\":{\"value\":\"The amount of AMB to wrap\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"pull(address,uint256)\":{\"notice\":\"Transfers the specified amount of a token from the msg.sender to address(this)\"},\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"sweepToken(address,uint256)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMB(uint256)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB.\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"wrapAMB(uint256)\":{\"notice\":\"Wraps the contract's AMB balance into SAMB\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/PeripheryPaymentsWithFeeExtended.sol\":\"PeripheryPaymentsWithFeeExtended\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0x86715eb960f18e01ac94e3bba4614ed51a887fa3c5bd1c43bf80aa98e019cf2d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bfc1d5d58e59015086b0e65a6c3a2ddad312e2350480510f6c0c8167f3d71a37\",\"dweb:/ipfs/QmQndULYjFsHKHjMAKLMfc12vWbVB5FawtioHtvwcWRJZp\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol\":{\"keccak256\":\"0x88e12ecce0236f43cac955dee8ae50e8ffba7d133625ba18b590d51b9e030098\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9f10d1317582a91e7842901c6888c4bb28939817cefa3d3f88458c2ec653b6ed\",\"dweb:/ipfs/QmP2qV22Uq6Pou1VkgNzRnXHzNJ71CBpVBYhYDnLccBx8U\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x93f6d5b75cb4e7204ae63f45722eb82ac62f732d56cbf31f3a65ce2ea262cc6d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a23090fa2e584774818eeb9e548086b8c383acd9d35830845191fd114bfbf03b\",\"dweb:/ipfs/QmXr9EGVoUMCGttgsDFJZ5UBrBjY42qBV2FRakCDi8aeTs\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x95eb2970f74b59074666d156779b7eeb1a34228476ac26f987f6f563b834098d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bd17994291ec4231d4fa66af52e0cfd4f7883365ecb41f534acf08afffa8806d\",\"dweb:/ipfs/QmUjst3v8zu8DE9Ue3YHJJoRLcZGd9CXP3jVoC2tSAUjs9\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol\":{\"keccak256\":\"0x5b5789677c6b7e447fd774a5c065d9547c85f22e950e18690f686a6b779d78dc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c2e45681c8d5c704fbfef7369ff7878e6af2d987ba564eb97148ee6e8db87e49\",\"dweb:/ipfs/Qmeg4ynPmWipSVb6BRj4o8uZRbE2bQk8nCwp9apMAEq8Xk\"]},\"@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x0fef3409a5a161cd12b777fdfa86845d64b86f72c78b8312c9e3c92f9017e5c5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c9df2c76e4581a1d343ea1dd1d0478df7f1c1eef1b476ccea452367ef5b75e65\",\"dweb:/ipfs/QmWZVBRQcn4ekrmCDFkM4BSRAZ1m72GHzUnfzUn39PwQow\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"contracts/base/PeripheryPaymentsExtended.sol\":{\"keccak256\":\"0xf2685da6776cf0dc988436351c93f23087320cad14f6a0ff8a8f5fc37847dd99\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a9514e43dcb646ca0e6ddb628d8371f875c843a46307eee68ecf5f89c8cb09fd\",\"dweb:/ipfs/QmeDK6SA7MoZ2VZ1t4e44DbzW1EX7WXjfeNVvaxpzZ8DMh\"]},\"contracts/base/PeripheryPaymentsWithFeeExtended.sol\":{\"keccak256\":\"0x1c57739b3cb14b514f418301c59eac6a385d5d12bd0d674172e37b45abd540d2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5381be26637b6c2b2b6418a2cab3fd66165b472182d2b17474c7ecb0eb034fec\",\"dweb:/ipfs/QmRuNHixFfkVtHSsBih9LSFrqn9XtsbaqM6yRXC1YoHJEn\"]},\"contracts/interfaces/IPeripheryPaymentsExtended.sol\":{\"keccak256\":\"0x373eb395bc1f5b9c92fbdbdf676d12784c907e7253ea9f262621e8ae812e0938\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5b41980a17c8fc46d28a1eca9462ad3b07c1c2b0c547f3cb7ee63b1ca126b96f\",\"dweb:/ipfs/QmcVfvRiaxDA3MBdZECouvChaMzuqgRuPQTnn3raLEukYb\"]},\"contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol\":{\"keccak256\":\"0xfab1e04cf78e4769a60ddff118648cf7a50cd874d500265c315ee6e2d0ac733c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://711d79e27131b59f79d0b7c94eed61b0b08d61bca9066a921a4f47ebc0f3c76f\",\"dweb:/ipfs/QmTw4pADZp6vqygUMVThgMYx7LtT1jwVLM4NcZvPhjSvpT\"]}},\"version\":1}"
        }
      },
      "contracts/base/PeripheryValidationExtended.sol": {
        "PeripheryValidationExtended": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/base/PeripheryValidationExtended.sol\":\"PeripheryValidationExtended\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol\":{\"keccak256\":\"0x1aa66f71234064a0c0976f62233f2edbd69554e5ad817dc97f318bc8e11f4da6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b3a40450e9d6b0f9cb91b40ffd6215612505bd74e7d954529958f4edc6ee7b93\",\"dweb:/ipfs/QmewsUCHK5N5KhNtqEwK8JgsXFADyFBrQRS5HoDWM5gi3b\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol\":{\"keccak256\":\"0xc736bab599912d6212e8414ee4ba7af0c1e08ff6aa11caa85f5f6e07f7d421c3\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://06f6c13a86900c71fa486fc029a59d1b7eb96162bb42885b5f845d995294893e\",\"dweb:/ipfs/QmUcBxMsmncw9n6eXhzzwSasGBvBGKH5FT8HSrAxrsXV4A\"]},\"contracts/base/PeripheryValidationExtended.sol\":{\"keccak256\":\"0x9514e5bb1c2b3c8589c74ad4c0e3ac469355ad8a9828ce605d9453b24e186684\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b221acf356ba8fb1f8563a783064595a3e4c0e5afe8ed19ec9102d5b59f0e621\",\"dweb:/ipfs/QmSojhh19Kyci7eFByVXy2gi5rGHmzMeNDvmDszJkDLxLZ\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/IApproveAndCall.sol": {
        "IApproveAndCall": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveMax",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveMaxMinusOne",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveZeroThenMax",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveZeroThenMaxMinusOne",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "callPositionManager",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "getApprovalType",
              "outputs": [
                {
                  "internalType": "enum IApproveAndCall.ApprovalType",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token0",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "token1",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IApproveAndCall.IncreaseLiquidityParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "increaseLiquidity",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token0",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "token1",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickLower",
                      "type": "int24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickUpper",
                      "type": "int24"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct IApproveAndCall.MintParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approveMax(address)": "571ac8b0",
              "approveMaxMinusOne(address)": "cab372ce",
              "approveZeroThenMax(address)": "639d71a9",
              "approveZeroThenMaxMinusOne(address)": "ab3fdd50",
              "callPositionManager(bytes)": "b3a2af13",
              "getApprovalType(address,uint256)": "dee00f35",
              "increaseLiquidity((address,address,uint256,uint256,uint256))": "f100b205",
              "mint((address,address,uint24,int24,int24,uint256,uint256,address))": "11ed56c9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveMax\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveMaxMinusOne\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveZeroThenMax\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveZeroThenMaxMinusOne\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callPositionManager\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"getApprovalType\",\"outputs\":[{\"internalType\":\"enum IApproveAndCall.ApprovalType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"}],\"internalType\":\"struct IApproveAndCall.IncreaseLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"increaseLiquidity\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"internalType\":\"struct IApproveAndCall.MintParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveMax(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveMaxMinusOne(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveZeroThenMax(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveZeroThenMaxMinusOne(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"callPositionManager(bytes)\":{\"params\":{\"data\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"getApprovalType(address,uint256)\":{\"details\":\"Lens to be called off-chain to determine which (if any) of the relevant approval functions should be called\",\"params\":{\"amount\":\"The amount to approve\",\"token\":\"The token to approve\"},\"returns\":{\"_0\":\"The required approval type\"}},\"increaseLiquidity((address,address,uint256,uint256,uint256))\":{\"params\":{\"params\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"mint((address,address,uint24,int24,int24,uint256,uint256,address))\":{\"params\":{\"params\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveMax(address)\":{\"notice\":\"Approves a token for the maximum possible amount\"},\"approveMaxMinusOne(address)\":{\"notice\":\"Approves a token for the maximum possible amount minus one\"},\"approveZeroThenMax(address)\":{\"notice\":\"Approves a token for zero, then the maximum possible amount\"},\"approveZeroThenMaxMinusOne(address)\":{\"notice\":\"Approves a token for zero, then the maximum possible amount minus one\"},\"callPositionManager(bytes)\":{\"notice\":\"Calls the position manager with arbitrary calldata\"},\"increaseLiquidity((address,address,uint256,uint256,uint256))\":{\"notice\":\"Calls the position manager's increaseLiquidity function\"},\"mint((address,address,uint24,int24,int24,uint256,uint256,address))\":{\"notice\":\"Calls the position manager's mint function\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IApproveAndCall.sol\":\"IApproveAndCall\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IApproveAndCall.sol\":{\"keccak256\":\"0x7d3824ad9a4090e2f4bb98d844f6ceb720f8c2608a909e4c0d86584be32d7fce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8230cdc6fd9171081943821d71888cec07bf4bae0b5fb85fa7c450f3c2b1ad44\",\"dweb:/ipfs/QmXF9NtVtCjr92ngVwwDjSGpiktGz2BDPHsvVoFPgkSP4K\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/ICLSwapRouter.sol": {
        "ICLSwapRouter": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "amount0Delta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1Delta",
                  "type": "int256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "astraCLSwapCallback",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes",
                      "name": "path",
                      "type": "bytes"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOutMinimum",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactInputParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactInput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOutMinimum",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactInputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactInputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes",
                      "name": "path",
                      "type": "bytes"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOut",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountInMaximum",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactOutputParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactOutput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOut",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountInMaximum",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactOutputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactOutputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "astraCLSwapCallback(int256,int256,bytes)": "11c17848",
              "exactInput((bytes,address,uint256,uint256))": "b858183f",
              "exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))": "04e45aaf",
              "exactOutput((bytes,address,uint256,uint256))": "09b81346",
              "exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))": "5023b4df"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"astraCLSwapCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"}],\"internalType\":\"struct ICLSwapRouter.ExactInputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ICLSwapRouter.ExactInputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"}],\"internalType\":\"struct ICLSwapRouter.ExactOutputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ICLSwapRouter.ExactOutputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IAstraCLPoolActions#swap call\"}},\"exactInput((bytes,address,uint256,uint256))\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactOutput((bytes,address,uint256,uint256))\":{\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}}},\"title\":\"Router token swapping functionality\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\"},\"exactInput((bytes,address,uint256,uint256))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another along the specified path\"},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another token\"},\"exactOutput((bytes,address,uint256,uint256))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed) that may remain in the router after the swap.\"},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another token that may remain in the router after the swap.\"}},\"notice\":\"Functions for swapping tokens via Astra CL\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ICLSwapRouter.sol\":\"ICLSwapRouter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":{\"keccak256\":\"0xaa82f63f0c930e51d6aaae0d59e7bf3ef5b32371ac0549f6e07bfcab5b4dcb16\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73419af0b4f35f02c3b89d387d6ac46041637a7133e249de617103b7567bf4c4\",\"dweb:/ipfs/QmTfwEX1dCoUUUMaMFzDnqDcFXihHQnEG1fbkBFpidRs8o\"]},\"contracts/interfaces/ICLSwapRouter.sol\":{\"keccak256\":\"0xf21791d14cb0fa67db54f04c322e294616240fef896fec0214be7aa196b767ad\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f3d1acf197037424a8e4901b64b4a35381d88ae361c09c5f3660ae59c5cac190\",\"dweb:/ipfs/QmaAHSbWfriiUsiiArgSiuJqw6s9BeP6Mfy3rZsoTzQoiL\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/IClassicSwapRouter.sol": {
        "IClassicSwapRouter": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOutMin",
                  "type": "uint256"
                },
                {
                  "internalType": "address[]",
                  "name": "path",
                  "type": "address[]"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "swapExactTokensForTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountInMax",
                  "type": "uint256"
                },
                {
                  "internalType": "address[]",
                  "name": "path",
                  "type": "address[]"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "swapTokensForExactTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "swapExactTokensForTokens(uint256,uint256,address[],address)": "472b43f3",
              "swapTokensForExactTokens(uint256,uint256,address[],address)": "42712a67"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMin\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"swapExactTokensForTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMax\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"swapTokensForExactTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"swapExactTokensForTokens(uint256,uint256,address[],address)\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"amountIn\":\"The amount of token to swap\",\"amountOutMin\":\"The minimum amount of output that must be received\",\"path\":\"The ordered list of tokens to swap through\",\"to\":\"The recipient address\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"swapTokensForExactTokens(uint256,uint256,address[],address)\":{\"params\":{\"amountInMax\":\"The maximum amount of input that the caller will pay\",\"amountOut\":\"The amount of token to swap for\",\"path\":\"The ordered list of tokens to swap through\",\"to\":\"The recipient address\"},\"returns\":{\"amountIn\":\"The amount of token to pay\"}}},\"title\":\"Router token swapping functionality\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"swapExactTokensForTokens(uint256,uint256,address[],address)\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another token\"},\"swapTokensForExactTokens(uint256,uint256,address[],address)\":{\"notice\":\"Swaps as little as possible of one token for an exact amount of another token\"}},\"notice\":\"Functions for swapping tokens via Astra Classic\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IClassicSwapRouter.sol\":\"IClassicSwapRouter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IClassicSwapRouter.sol\":{\"keccak256\":\"0x5b35aa4bb97961db53c1f178c034c40a9ae4ce2606356b06620b918a5f91ae5a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8e63d5f61b1b28deddeddc89da42e85429966732a661bd53738ca6fb1a478d15\",\"dweb:/ipfs/QmVX5sjGijDfGFNP767L4rtsiL5DC84yJSfUpWiwJN84CP\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/IImmutableState.sol": {
        "IImmutableState": {
          "abi": [
            {
              "inputs": [],
              "name": "factoryClassic",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "positionManager",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryClassic()": "4f04a0db",
              "positionManager()": "791b98bc"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"factoryClassic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"positionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"factoryClassic()\":{\"returns\":{\"_0\":\"Returns the address of the Astra Classic factory\"}},\"positionManager()\":{\"returns\":{\"_0\":\"Returns the address of Astra CL NFT position manager\"}}},\"title\":\"Immutable state\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Functions that return immutable state of the router\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IImmutableState.sol\":\"IImmutableState\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IImmutableState.sol\":{\"keccak256\":\"0x25fee5bdbdbbb57ffb91c3ab66b9c2db351e7f6061ad2f98ef2991f6b27a15e0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7bf237158fbcfabf64bb0da5c7ff0b0161ed76c45c7197ecc5ac54b338786bfc\",\"dweb:/ipfs/QmT74A24bW9qu1dJUxPQLaqLBnSe57PVgfUJxpu3sEf9fg\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/IMixedRouteQuoterV1.sol": {
        "IMixedRouteQuoterV1": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "name": "quoteExactInput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160[]",
                  "name": "CLSqrtPriceX96AfterList",
                  "type": "uint160[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "CLInitializedTicksCrossedList",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint256",
                  "name": "CLSwapGasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "quoteExactInputSingleCL",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96After",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "initializedTicksCrossed",
                  "type": "uint32"
                },
                {
                  "internalType": "uint256",
                  "name": "gasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "quoteExactInputSingleClassic",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "quoteExactInput(bytes,uint256)": "cdca1753",
              "quoteExactInputSingleCL((address,address,uint256,uint24,uint160))": "5bccbdf7",
              "quoteExactInputSingleClassic((address,address,uint256))": "6f9fbc82"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"quoteExactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160[]\",\"name\":\"CLSqrtPriceX96AfterList\",\"type\":\"uint160[]\"},{\"internalType\":\"uint32[]\",\"name\":\"CLInitializedTicksCrossedList\",\"type\":\"uint32[]\"},{\"internalType\":\"uint256\",\"name\":\"CLSwapGasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"quoteExactInputSingleCL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96After\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"initializedTicksCrossed\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"internalType\":\"struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"quoteExactInputSingleClassic\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These functions are not marked view because they rely on calling non-view functions and reverting to compute the result. They are also not gas efficient and should not be called on-chain.\",\"kind\":\"dev\",\"methods\":{\"quoteExactInput(bytes,uint256)\":{\"params\":{\"amountIn\":\"The amount of the first token to swap\",\"path\":\"The path of the swap, i.e. each token pair and the pool fee\"},\"returns\":{\"CLInitializedTicksCrossedList\":\"List of the initialized ticks that the swap crossed for each v3 pool in the path, 0 for v2 pools\",\"CLSqrtPriceX96AfterList\":\"List of the sqrt price after the swap for each v3 pool in the path, 0 for v2 pools\",\"CLSwapGasEstimate\":\"The estimate of the gas that the v3 swaps in the path consume\",\"amountOut\":\"The amount of the last token that would be received\"}},\"quoteExactInputSingleCL((address,address,uint256,uint24,uint160))\":{\"params\":{\"params\":\"The params for the quote, encoded as `QuoteExactInputSingleCLParams` tokenIn The token being swapped in tokenOut The token being swapped out fee The fee of the token pool to consider for the pair amountIn The desired input amount sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\"},\"returns\":{\"amountOut\":\"The amount of `tokenOut` that would be received\",\"gasEstimate\":\"The estimate of the gas that the swap consumes\",\"initializedTicksCrossed\":\"The number of initialized ticks that the swap crossed\",\"sqrtPriceX96After\":\"The sqrt price of the pool after the swap\"}},\"quoteExactInputSingleClassic((address,address,uint256))\":{\"params\":{\"params\":\"The params for the quote, encoded as `QuoteExactInputSingleClassicParams` tokenIn The token being swapped in tokenOut The token being swapped out amountIn The desired input amount\"},\"returns\":{\"amountOut\":\"The amount of `tokenOut` that would be received\"}}},\"title\":\"MixedRouteQuoterV1 Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"quoteExactInput(bytes,uint256)\":{\"notice\":\"Returns the amount out received for a given exact input swap without executing the swap\"},\"quoteExactInputSingleCL((address,address,uint256,uint24,uint160))\":{\"notice\":\"Returns the amount out received for a given exact input but for a swap of a single pool\"},\"quoteExactInputSingleClassic((address,address,uint256))\":{\"notice\":\"Returns the amount out received for a given exact input but for a swap of a single V2 pool\"}},\"notice\":\"Supports quoting the calculated amounts for exact input swaps. Is specialized for routes containing a mix of Classic and CL liquidity.For each pool also tells you the number of initialized ticks crossed and the sqrt price of the pool after the swap.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IMixedRouteQuoterV1.sol\":\"IMixedRouteQuoterV1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IMixedRouteQuoterV1.sol\":{\"keccak256\":\"0x95e36846da270437171d2f34420a68b402bc7d4e9539596f7f29348151f15b5b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://fbb72296e9dbcf4599605465c0e2ea1ddf79652a1055e314af48e91a02c19e9e\",\"dweb:/ipfs/QmVaTXNtAeKPMqENNDaQwoESkpMsvKBa4zcGmav9maNvwY\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/IMulticallExtended.sol": {
        "IMulticallExtended": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "previousBlockhash",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "multicall(bytes32,bytes[])": "1f0464d1",
              "multicall(bytes[])": "ac9650d8",
              "multicall(uint256,bytes[])": "5ae401dc"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"previousBlockhash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"multicall(bytes32,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"previousBlockhash\":\"The expected parent blockHash\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"multicall(bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"multicall(uint256,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"deadline\":\"The time by which this function must be called before failing\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}}},\"title\":\"MulticallExtended interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"multicall(bytes32,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(uint256,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"}},\"notice\":\"Enables calling multiple methods in a single call to the contract with optional validation\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IMulticallExtended.sol\":\"IMulticallExtended\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol\":{\"keccak256\":\"0xa8f9d0061ee730a522dc4bae6bd5cabb3e997e2c5983da183e912bdca93dfa7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://496b68d4f72d58cc83cf51bd9cc9c99aaa46dc3c3df7c951a9e50ba29ee33016\",\"dweb:/ipfs/Qmc3bkXwuRP8mDpcKgvLgbCKn8tD8PGCaBjnLHSPMJCRGD\"]},\"contracts/interfaces/IMulticallExtended.sol\":{\"keccak256\":\"0x0fee6c8fe77db406ea3a2c34767322d4170108596d877fcf9601315de8df502a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://32eb6261abd448977034e5ed22c7e1757f4fd1d667362bb1ad7a972169ce78b8\",\"dweb:/ipfs/QmazeBaXFvy3dTPsoaeuaEsxHEruikeSAXcXkFzyTUvmvQ\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/IOracleSlippage.sol": {
        "IOracleSlippage": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "paths",
                  "type": "bytes[]"
                },
                {
                  "internalType": "uint128[]",
                  "name": "amounts",
                  "type": "uint128[]"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "checkOracleSlippage(bytes,uint24,uint32)": "f25801a7",
              "checkOracleSlippage(bytes[],uint128[],uint24,uint32)": "efdeed8e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"paths\",\"type\":\"bytes[]\"},{\"internalType\":\"uint128[]\",\"name\":\"amounts\",\"type\":\"uint128[]\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"checkOracleSlippage(bytes,uint24,uint32)\":{\"params\":{\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"path\":\"The path to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"params\":{\"amounts\":\"The weights for each entry in `paths`\",\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"paths\":\"The paths to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}}},\"title\":\"OracleSlippage interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkOracleSlippage(bytes,uint24,uint32)\":{\"notice\":\"Ensures that the current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"notice\":\"Ensures that the weighted average current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"}},\"notice\":\"Enables slippage checks against oracle prices\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IOracleSlippage.sol\":\"IOracleSlippage\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IOracleSlippage.sol\":{\"keccak256\":\"0xa9d1e4336b20fa992ab6b742f2750b3fb660e0d667eac304c5bbd8a8ea96edfc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://afe7afc18f293b6bc189550f20c318ecccda37241409a031bc94cf7412420dbd\",\"dweb:/ipfs/QmVuiKox1K4Df5QS6RLHQDprYaDMXRRvHW3ym3NDdi3vrq\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/IPeripheryPaymentsExtended.sol": {
        "IPeripheryPaymentsExtended": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "pull",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "wrapAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "pull(address,uint256)": "f2d5d56b",
              "refundAMB()": "c53af304",
              "sweepToken(address,uint256)": "e90a182f",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "unwrapSAMB(uint256)": "acf8a4ed",
              "unwrapSAMB(uint256,address)": "a98ce37f",
              "wrapAMB(uint256)": "e4a40545"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"pull\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"wrapAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"pull(address,uint256)\":{\"params\":{\"token\":\"The token to pull\",\"value\":\"The amount to pay\"}},\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"sweepToken(address,uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"token\":\"The contract address of the token which will be transferred to msg.sender\"}},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"unwrapSAMB(uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\"}},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}},\"wrapAMB(uint256)\":{\"details\":\"The resulting SAMB is custodied by the router, thus will require further distribution\",\"params\":{\"value\":\"The amount of AMB to wrap\"}}},\"title\":\"Periphery Payments Extended\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"pull(address,uint256)\":{\"notice\":\"Transfers the specified amount of a token from the msg.sender to address(this)\"},\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"sweepToken(address,uint256)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"unwrapSAMB(uint256)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB.\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"},\"wrapAMB(uint256)\":{\"notice\":\"Wraps the contract's AMB balance into SAMB\"}},\"notice\":\"Functions to ease deposits and withdrawals of AMB and tokens\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IPeripheryPaymentsExtended.sol\":\"IPeripheryPaymentsExtended\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"contracts/interfaces/IPeripheryPaymentsExtended.sol\":{\"keccak256\":\"0x373eb395bc1f5b9c92fbdbdf676d12784c907e7253ea9f262621e8ae812e0938\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5b41980a17c8fc46d28a1eca9462ad3b07c1c2b0c547f3cb7ee63b1ca126b96f\",\"dweb:/ipfs/QmcVfvRiaxDA3MBdZECouvChaMzuqgRuPQTnn3raLEukYb\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol": {
        "IPeripheryPaymentsWithFeeExtended": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "pull",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "wrapAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "pull(address,uint256)": "f2d5d56b",
              "refundAMB()": "c53af304",
              "sweepToken(address,uint256)": "e90a182f",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "sweepTokenWithFee(address,uint256,address,uint256,address)": "e0e189a0",
              "sweepTokenWithFee(address,uint256,uint256,address)": "3068c554",
              "unwrapSAMB(uint256)": "acf8a4ed",
              "unwrapSAMB(uint256,address)": "a98ce37f",
              "unwrapSAMBWithFee(uint256,address,uint256,address)": "97e87d9d",
              "unwrapSAMBWithFee(uint256,uint256,address)": "bc122a54",
              "wrapAMB(uint256)": "e4a40545"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"pull\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"wrapAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"pull(address,uint256)\":{\"params\":{\"token\":\"The token to pull\",\"value\":\"The amount to pay\"}},\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"sweepToken(address,uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"token\":\"The contract address of the token which will be transferred to msg.sender\"}},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"unwrapSAMB(uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\"}},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"wrapAMB(uint256)\":{\"details\":\"The resulting SAMB is custodied by the router, thus will require further distribution\",\"params\":{\"value\":\"The amount of AMB to wrap\"}}},\"title\":\"Periphery Payments With Fee Extended\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"pull(address,uint256)\":{\"notice\":\"Transfers the specified amount of a token from the msg.sender to address(this)\"},\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"sweepToken(address,uint256)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMB(uint256)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB.\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"wrapAMB(uint256)\":{\"notice\":\"Wraps the contract's AMB balance into SAMB\"}},\"notice\":\"Functions to ease deposits and withdrawals of AMB\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol\":\"IPeripheryPaymentsWithFeeExtended\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x95eb2970f74b59074666d156779b7eeb1a34228476ac26f987f6f563b834098d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bd17994291ec4231d4fa66af52e0cfd4f7883365ecb41f534acf08afffa8806d\",\"dweb:/ipfs/QmUjst3v8zu8DE9Ue3YHJJoRLcZGd9CXP3jVoC2tSAUjs9\"]},\"contracts/interfaces/IPeripheryPaymentsExtended.sol\":{\"keccak256\":\"0x373eb395bc1f5b9c92fbdbdf676d12784c907e7253ea9f262621e8ae812e0938\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5b41980a17c8fc46d28a1eca9462ad3b07c1c2b0c547f3cb7ee63b1ca126b96f\",\"dweb:/ipfs/QmcVfvRiaxDA3MBdZECouvChaMzuqgRuPQTnn3raLEukYb\"]},\"contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol\":{\"keccak256\":\"0xfab1e04cf78e4769a60ddff118648cf7a50cd874d500265c315ee6e2d0ac733c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://711d79e27131b59f79d0b7c94eed61b0b08d61bca9066a921a4f47ebc0f3c76f\",\"dweb:/ipfs/QmTw4pADZp6vqygUMVThgMYx7LtT1jwVLM4NcZvPhjSvpT\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/IQuoter.sol": {
        "IQuoter": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "name": "quoteExactInput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "tokenIn",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "fee",
                  "type": "uint24"
                },
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                }
              ],
              "name": "quoteExactInputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "name": "quoteExactOutput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "tokenIn",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "fee",
                  "type": "uint24"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                }
              ],
              "name": "quoteExactOutputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "quoteExactInput(bytes,uint256)": "cdca1753",
              "quoteExactInputSingle(address,address,uint24,uint256,uint160)": "f7729d43",
              "quoteExactOutput(bytes,uint256)": "2f80bb1d",
              "quoteExactOutputSingle(address,address,uint24,uint256,uint160)": "30d07f21"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"quoteExactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"quoteExactInputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"quoteExactOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"quoteExactOutputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These functions are not marked view because they rely on calling non-view functions and reverting to compute the result. They are also not gas efficient and should not be called on-chain.\",\"kind\":\"dev\",\"methods\":{\"quoteExactInput(bytes,uint256)\":{\"params\":{\"amountIn\":\"The amount of the first token to swap\",\"path\":\"The path of the swap, i.e. each token pair and the pool fee\"},\"returns\":{\"amountOut\":\"The amount of the last token that would be received\"}},\"quoteExactInputSingle(address,address,uint24,uint256,uint160)\":{\"params\":{\"amountIn\":\"The desired input amount\",\"fee\":\"The fee of the token pool to consider for the pair\",\"sqrtPriceLimitX96\":\"The price limit of the pool that cannot be exceeded by the swap\",\"tokenIn\":\"The token being swapped in\",\"tokenOut\":\"The token being swapped out\"},\"returns\":{\"amountOut\":\"The amount of `tokenOut` that would be received\"}},\"quoteExactOutput(bytes,uint256)\":{\"params\":{\"amountOut\":\"The amount of the last token to receive\",\"path\":\"The path of the swap, i.e. each token pair and the pool fee. Path must be provided in reverse order\"},\"returns\":{\"amountIn\":\"The amount of first token required to be paid\"}},\"quoteExactOutputSingle(address,address,uint24,uint256,uint160)\":{\"params\":{\"amountOut\":\"The desired output amount\",\"fee\":\"The fee of the token pool to consider for the pair\",\"sqrtPriceLimitX96\":\"The price limit of the pool that cannot be exceeded by the swap\",\"tokenIn\":\"The token being swapped in\",\"tokenOut\":\"The token being swapped out\"},\"returns\":{\"amountIn\":\"The amount required as the input for the swap in order to receive `amountOut`\"}}},\"title\":\"Quoter Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"quoteExactInput(bytes,uint256)\":{\"notice\":\"Returns the amount out received for a given exact input swap without executing the swap\"},\"quoteExactInputSingle(address,address,uint24,uint256,uint160)\":{\"notice\":\"Returns the amount out received for a given exact input but for a swap of a single pool\"},\"quoteExactOutput(bytes,uint256)\":{\"notice\":\"Returns the amount in required for a given exact output swap without executing the swap\"},\"quoteExactOutputSingle(address,address,uint24,uint256,uint160)\":{\"notice\":\"Returns the amount in required to receive the given exact output amount but for a swap of a single pool\"}},\"notice\":\"Supports quoting the calculated amounts from exact input or exact output swaps\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IQuoter.sol\":\"IQuoter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IQuoter.sol\":{\"keccak256\":\"0x124b4334f058f70afd8f3b04315cc0812961d400957225d0875872b2a31afbff\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://efdc8133033a1596f60f3619a317f8b3af98a6adffd85a9898c5a809c5c22417\",\"dweb:/ipfs/QmRkGjgzgSxhUVxwqiWZuz9M4Ff3TwTbzUgN3yJd4gxMfN\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/IQuoterV2.sol": {
        "IQuoterV2": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "name": "quoteExactInput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160[]",
                  "name": "sqrtPriceX96AfterList",
                  "type": "uint160[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "initializedTicksCrossedList",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint256",
                  "name": "gasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct IQuoterV2.QuoteExactInputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "quoteExactInputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96After",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "initializedTicksCrossed",
                  "type": "uint32"
                },
                {
                  "internalType": "uint256",
                  "name": "gasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "name": "quoteExactOutput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160[]",
                  "name": "sqrtPriceX96AfterList",
                  "type": "uint160[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "initializedTicksCrossedList",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint256",
                  "name": "gasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct IQuoterV2.QuoteExactOutputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "quoteExactOutputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96After",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "initializedTicksCrossed",
                  "type": "uint32"
                },
                {
                  "internalType": "uint256",
                  "name": "gasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "quoteExactInput(bytes,uint256)": "cdca1753",
              "quoteExactInputSingle((address,address,uint256,uint24,uint160))": "c6a5026a",
              "quoteExactOutput(bytes,uint256)": "2f80bb1d",
              "quoteExactOutputSingle((address,address,uint256,uint24,uint160))": "bd21704a"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"quoteExactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160[]\",\"name\":\"sqrtPriceX96AfterList\",\"type\":\"uint160[]\"},{\"internalType\":\"uint32[]\",\"name\":\"initializedTicksCrossedList\",\"type\":\"uint32[]\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct IQuoterV2.QuoteExactInputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"quoteExactInputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96After\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"initializedTicksCrossed\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"quoteExactOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint160[]\",\"name\":\"sqrtPriceX96AfterList\",\"type\":\"uint160[]\"},{\"internalType\":\"uint32[]\",\"name\":\"initializedTicksCrossedList\",\"type\":\"uint32[]\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct IQuoterV2.QuoteExactOutputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"quoteExactOutputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96After\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"initializedTicksCrossed\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These functions are not marked view because they rely on calling non-view functions and reverting to compute the result. They are also not gas efficient and should not be called on-chain.\",\"kind\":\"dev\",\"methods\":{\"quoteExactInput(bytes,uint256)\":{\"params\":{\"amountIn\":\"The amount of the first token to swap\",\"path\":\"The path of the swap, i.e. each token pair and the pool fee\"},\"returns\":{\"amountOut\":\"The amount of the last token that would be received\",\"gasEstimate\":\"The estimate of the gas that the swap consumes\",\"initializedTicksCrossedList\":\"List of the initialized ticks that the swap crossed for each pool in the path\",\"sqrtPriceX96AfterList\":\"List of the sqrt price after the swap for each pool in the path\"}},\"quoteExactInputSingle((address,address,uint256,uint24,uint160))\":{\"params\":{\"params\":\"The params for the quote, encoded as `QuoteExactInputSingleParams` tokenIn The token being swapped in tokenOut The token being swapped out fee The fee of the token pool to consider for the pair amountIn The desired input amount sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\"},\"returns\":{\"amountOut\":\"The amount of `tokenOut` that would be received\",\"gasEstimate\":\"The estimate of the gas that the swap consumes\",\"initializedTicksCrossed\":\"The number of initialized ticks that the swap crossed\",\"sqrtPriceX96After\":\"The sqrt price of the pool after the swap\"}},\"quoteExactOutput(bytes,uint256)\":{\"params\":{\"amountOut\":\"The amount of the last token to receive\",\"path\":\"The path of the swap, i.e. each token pair and the pool fee. Path must be provided in reverse order\"},\"returns\":{\"amountIn\":\"The amount of first token required to be paid\",\"gasEstimate\":\"The estimate of the gas that the swap consumes\",\"initializedTicksCrossedList\":\"List of the initialized ticks that the swap crossed for each pool in the path\",\"sqrtPriceX96AfterList\":\"List of the sqrt price after the swap for each pool in the path\"}},\"quoteExactOutputSingle((address,address,uint256,uint24,uint160))\":{\"params\":{\"params\":\"The params for the quote, encoded as `QuoteExactOutputSingleParams` tokenIn The token being swapped in tokenOut The token being swapped out fee The fee of the token pool to consider for the pair amountOut The desired output amount sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\"},\"returns\":{\"amountIn\":\"The amount required as the input for the swap in order to receive `amountOut`\",\"gasEstimate\":\"The estimate of the gas that the swap consumes\",\"initializedTicksCrossed\":\"The number of initialized ticks that the swap crossed\",\"sqrtPriceX96After\":\"The sqrt price of the pool after the swap\"}}},\"title\":\"QuoterV2 Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"quoteExactInput(bytes,uint256)\":{\"notice\":\"Returns the amount out received for a given exact input swap without executing the swap\"},\"quoteExactInputSingle((address,address,uint256,uint24,uint160))\":{\"notice\":\"Returns the amount out received for a given exact input but for a swap of a single pool\"},\"quoteExactOutput(bytes,uint256)\":{\"notice\":\"Returns the amount in required for a given exact output swap without executing the swap\"},\"quoteExactOutputSingle((address,address,uint256,uint24,uint160))\":{\"notice\":\"Returns the amount in required to receive the given exact output amount but for a swap of a single pool\"}},\"notice\":\"Supports quoting the calculated amounts from exact input or exact output swaps.For each pool also tells you the number of initialized ticks crossed and the sqrt price of the pool after the swap.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IQuoterV2.sol\":\"IQuoterV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IQuoterV2.sol\":{\"keccak256\":\"0x7e931f0cd34811851031c4f1318f59b4a4b427a2d2e2968b8e5ed87a9f7f89d6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://63a8d7dcdd081004356b39e1b8e19ee56b02b3abd3e4165781bde1a100a35bed\",\"dweb:/ipfs/QmdfpYkMxoaeEd646aSioLZcPodnCnpZy9Ny4j98uAba2J\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/ISwapRouter02.sol": {
        "ISwapRouter02": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveMax",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveMaxMinusOne",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveZeroThenMax",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveZeroThenMaxMinusOne",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "amount0Delta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1Delta",
                  "type": "int256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "astraCLSwapCallback",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "callPositionManager",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes",
                      "name": "path",
                      "type": "bytes"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOutMinimum",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactInputParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactInput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOutMinimum",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactInputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactInputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes",
                      "name": "path",
                      "type": "bytes"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOut",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountInMaximum",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactOutputParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactOutput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOut",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountInMaximum",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactOutputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactOutputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "getApprovalType",
              "outputs": [
                {
                  "internalType": "enum IApproveAndCall.ApprovalType",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token0",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "token1",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IApproveAndCall.IncreaseLiquidityParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "increaseLiquidity",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token0",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "token1",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickLower",
                      "type": "int24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickUpper",
                      "type": "int24"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct IApproveAndCall.MintParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "previousBlockhash",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermit",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitAllowed",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitAllowedIfNecessary",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitIfNecessary",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOutMin",
                  "type": "uint256"
                },
                {
                  "internalType": "address[]",
                  "name": "path",
                  "type": "address[]"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "swapExactTokensForTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountInMax",
                  "type": "uint256"
                },
                {
                  "internalType": "address[]",
                  "name": "path",
                  "type": "address[]"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "swapTokensForExactTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approveMax(address)": "571ac8b0",
              "approveMaxMinusOne(address)": "cab372ce",
              "approveZeroThenMax(address)": "639d71a9",
              "approveZeroThenMaxMinusOne(address)": "ab3fdd50",
              "astraCLSwapCallback(int256,int256,bytes)": "11c17848",
              "callPositionManager(bytes)": "b3a2af13",
              "exactInput((bytes,address,uint256,uint256))": "b858183f",
              "exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))": "04e45aaf",
              "exactOutput((bytes,address,uint256,uint256))": "09b81346",
              "exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))": "5023b4df",
              "getApprovalType(address,uint256)": "dee00f35",
              "increaseLiquidity((address,address,uint256,uint256,uint256))": "f100b205",
              "mint((address,address,uint24,int24,int24,uint256,uint256,address))": "11ed56c9",
              "multicall(bytes32,bytes[])": "1f0464d1",
              "multicall(bytes[])": "ac9650d8",
              "multicall(uint256,bytes[])": "5ae401dc",
              "selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)": "f3995c67",
              "selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)": "4659a494",
              "selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)": "a4a78f0c",
              "selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)": "c2e3140a",
              "swapExactTokensForTokens(uint256,uint256,address[],address)": "472b43f3",
              "swapTokensForExactTokens(uint256,uint256,address[],address)": "42712a67"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveMax\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveMaxMinusOne\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveZeroThenMax\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveZeroThenMaxMinusOne\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"astraCLSwapCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callPositionManager\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"}],\"internalType\":\"struct ICLSwapRouter.ExactInputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ICLSwapRouter.ExactInputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"}],\"internalType\":\"struct ICLSwapRouter.ExactOutputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ICLSwapRouter.ExactOutputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"getApprovalType\",\"outputs\":[{\"internalType\":\"enum IApproveAndCall.ApprovalType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"}],\"internalType\":\"struct IApproveAndCall.IncreaseLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"increaseLiquidity\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"internalType\":\"struct IApproveAndCall.MintParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"previousBlockhash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitAllowed\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitAllowedIfNecessary\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitIfNecessary\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMin\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"swapExactTokensForTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMax\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"swapTokensForExactTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveMax(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveMaxMinusOne(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveZeroThenMax(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveZeroThenMaxMinusOne(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"astraCLSwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IAstraCLPoolActions#swap call\"}},\"callPositionManager(bytes)\":{\"params\":{\"data\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"exactInput((bytes,address,uint256,uint256))\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactOutput((bytes,address,uint256,uint256))\":{\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}},\"getApprovalType(address,uint256)\":{\"details\":\"Lens to be called off-chain to determine which (if any) of the relevant approval functions should be called\",\"params\":{\"amount\":\"The amount to approve\",\"token\":\"The token to approve\"},\"returns\":{\"_0\":\"The required approval type\"}},\"increaseLiquidity((address,address,uint256,uint256,uint256))\":{\"params\":{\"params\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"mint((address,address,uint24,int24,int24,uint256,uint256,address))\":{\"params\":{\"params\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"multicall(bytes32,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"previousBlockhash\":\"The expected parent blockHash\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"multicall(bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"multicall(uint256,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"deadline\":\"The time by which this function must be called before failing\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this).\",\"params\":{\"deadline\":\"A timestamp, the current blocktime must be less than or equal to this timestamp\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\",\"value\":\"The amount that can be spent of token\"}},\"selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this)\",\"params\":{\"expiry\":\"The timestamp at which the permit is no longer valid\",\"nonce\":\"The current nonce of the owner\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this) Can be used instead of #selfPermitAllowed to prevent calls from failing due to a frontrun of a call to #selfPermitAllowed.\",\"params\":{\"expiry\":\"The timestamp at which the permit is no longer valid\",\"nonce\":\"The current nonce of the owner\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this). Can be used instead of #selfPermit to prevent calls from failing due to a frontrun of a call to #selfPermit\",\"params\":{\"deadline\":\"A timestamp, the current blocktime must be less than or equal to this timestamp\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\",\"value\":\"The amount that can be spent of token\"}},\"swapExactTokensForTokens(uint256,uint256,address[],address)\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"amountIn\":\"The amount of token to swap\",\"amountOutMin\":\"The minimum amount of output that must be received\",\"path\":\"The ordered list of tokens to swap through\",\"to\":\"The recipient address\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"swapTokensForExactTokens(uint256,uint256,address[],address)\":{\"params\":{\"amountInMax\":\"The maximum amount of input that the caller will pay\",\"amountOut\":\"The amount of token to swap for\",\"path\":\"The ordered list of tokens to swap through\",\"to\":\"The recipient address\"},\"returns\":{\"amountIn\":\"The amount of token to pay\"}}},\"title\":\"Router token swapping functionality\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveMax(address)\":{\"notice\":\"Approves a token for the maximum possible amount\"},\"approveMaxMinusOne(address)\":{\"notice\":\"Approves a token for the maximum possible amount minus one\"},\"approveZeroThenMax(address)\":{\"notice\":\"Approves a token for zero, then the maximum possible amount\"},\"approveZeroThenMaxMinusOne(address)\":{\"notice\":\"Approves a token for zero, then the maximum possible amount minus one\"},\"astraCLSwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\"},\"callPositionManager(bytes)\":{\"notice\":\"Calls the position manager with arbitrary calldata\"},\"exactInput((bytes,address,uint256,uint256))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another along the specified path\"},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another token\"},\"exactOutput((bytes,address,uint256,uint256))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed) that may remain in the router after the swap.\"},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another token that may remain in the router after the swap.\"},\"increaseLiquidity((address,address,uint256,uint256,uint256))\":{\"notice\":\"Calls the position manager's increaseLiquidity function\"},\"mint((address,address,uint24,int24,int24,uint256,uint256,address))\":{\"notice\":\"Calls the position manager's mint function\"},\"multicall(bytes32,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(uint256,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend a given token from `msg.sender`\"},\"selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\"},\"selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\"},\"selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend a given token from `msg.sender`\"},\"swapExactTokensForTokens(uint256,uint256,address[],address)\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another token\"},\"swapTokensForExactTokens(uint256,uint256,address[],address)\":{\"notice\":\"Swaps as little as possible of one token for an exact amount of another token\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ISwapRouter02.sol\":\"ISwapRouter02\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":{\"keccak256\":\"0xaa82f63f0c930e51d6aaae0d59e7bf3ef5b32371ac0549f6e07bfcab5b4dcb16\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73419af0b4f35f02c3b89d387d6ac46041637a7133e249de617103b7567bf4c4\",\"dweb:/ipfs/QmTfwEX1dCoUUUMaMFzDnqDcFXihHQnEG1fbkBFpidRs8o\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol\":{\"keccak256\":\"0xa8f9d0061ee730a522dc4bae6bd5cabb3e997e2c5983da183e912bdca93dfa7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://496b68d4f72d58cc83cf51bd9cc9c99aaa46dc3c3df7c951a9e50ba29ee33016\",\"dweb:/ipfs/Qmc3bkXwuRP8mDpcKgvLgbCKn8tD8PGCaBjnLHSPMJCRGD\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol\":{\"keccak256\":\"0x402d04301ffd41853f4949a574b8853c46d076910ed734f5e4478bf64369a3ed\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6a5536d179ff3777920ff8ed60cfc457f7a4dda1373c8f0394b2a8e0fe537525\",\"dweb:/ipfs/QmdaYGikTmmi2vbECnoomZ8vS8PBiD4Bq8BoFCYqFZmKgR\"]},\"contracts/interfaces/IApproveAndCall.sol\":{\"keccak256\":\"0x7d3824ad9a4090e2f4bb98d844f6ceb720f8c2608a909e4c0d86584be32d7fce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8230cdc6fd9171081943821d71888cec07bf4bae0b5fb85fa7c450f3c2b1ad44\",\"dweb:/ipfs/QmXF9NtVtCjr92ngVwwDjSGpiktGz2BDPHsvVoFPgkSP4K\"]},\"contracts/interfaces/ICLSwapRouter.sol\":{\"keccak256\":\"0xf21791d14cb0fa67db54f04c322e294616240fef896fec0214be7aa196b767ad\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f3d1acf197037424a8e4901b64b4a35381d88ae361c09c5f3660ae59c5cac190\",\"dweb:/ipfs/QmaAHSbWfriiUsiiArgSiuJqw6s9BeP6Mfy3rZsoTzQoiL\"]},\"contracts/interfaces/IClassicSwapRouter.sol\":{\"keccak256\":\"0x5b35aa4bb97961db53c1f178c034c40a9ae4ce2606356b06620b918a5f91ae5a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8e63d5f61b1b28deddeddc89da42e85429966732a661bd53738ca6fb1a478d15\",\"dweb:/ipfs/QmVX5sjGijDfGFNP767L4rtsiL5DC84yJSfUpWiwJN84CP\"]},\"contracts/interfaces/IMulticallExtended.sol\":{\"keccak256\":\"0x0fee6c8fe77db406ea3a2c34767322d4170108596d877fcf9601315de8df502a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://32eb6261abd448977034e5ed22c7e1757f4fd1d667362bb1ad7a972169ce78b8\",\"dweb:/ipfs/QmazeBaXFvy3dTPsoaeuaEsxHEruikeSAXcXkFzyTUvmvQ\"]},\"contracts/interfaces/ISwapRouter02.sol\":{\"keccak256\":\"0x366b171042947689893be1ef6934e86a9a5739df07fad70ce3c53bd379435b82\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c707e5b60692f3214f02e1a30dce6215af9c5fcd8e9003f844a43f9ed348900b\",\"dweb:/ipfs/QmZZbwcZymjh34YXP1fEsQcFCZyGWGW8UAGdrkLM31EYFh\"]}},\"version\":1}"
        }
      },
      "contracts/interfaces/ITokenValidator.sol": {
        "ITokenValidator": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address[]",
                  "name": "tokens",
                  "type": "address[]"
                },
                {
                  "internalType": "address[]",
                  "name": "baseTokens",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256",
                  "name": "amountToBorrow",
                  "type": "uint256"
                }
              ],
              "name": "batchValidate",
              "outputs": [
                {
                  "internalType": "enum ITokenValidator.Status[]",
                  "name": "",
                  "type": "uint8[]"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "baseTokens",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256",
                  "name": "amountToBorrow",
                  "type": "uint256"
                }
              ],
              "name": "validate",
              "outputs": [
                {
                  "internalType": "enum ITokenValidator.Status",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "batchValidate(address[],address[],uint256)": "be7672e5",
              "validate(address,address[],uint256)": "0143aace"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"baseTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amountToBorrow\",\"type\":\"uint256\"}],\"name\":\"batchValidate\",\"outputs\":[{\"internalType\":\"enum ITokenValidator.Status[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"baseTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amountToBorrow\",\"type\":\"uint256\"}],\"name\":\"validate\",\"outputs\":[{\"internalType\":\"enum ITokenValidator.Status\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"We can not guarantee the result of this lens is correct for a few reasons:1/ Some tokens take fees or allow transfers under specific conditions, for example some have an allowlistof addresses that do/dont require fees. Therefore the result is not guaranteed to be correctin all circumstances.2/ It is possible that the token does not have any pools on V2 therefore we are not able to performa flashloan to test the token.These functions are not marked view because they rely on calling non-view functions and reverting to compute the result.\",\"kind\":\"dev\",\"methods\":{\"batchValidate(address[],address[],uint256)\":{\"params\":{\"amountToBorrow\":\"The amount to try flash borrowing from the pools\",\"baseTokens\":\"The addresses of the tokens to try pairing with token when looking for a pool to flash loan from.\",\"tokens\":\"The addresses of the tokens to check for fee on transfer\"},\"returns\":{\"_0\":\"The status of the token\"}},\"validate(address,address[],uint256)\":{\"params\":{\"amountToBorrow\":\"The amount to try flash borrowing from the pools\",\"baseTokens\":\"The addresses of the tokens to try pairing with token when looking for a pool to flash loan from.\",\"token\":\"The address of the token to check for fee on transfer\"},\"returns\":{\"_0\":\"The status of the token\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"batchValidate(address[],address[],uint256)\":{\"notice\":\"Validates each token by detecting if its transferable or takes a fee on transfer\"},\"validate(address,address[],uint256)\":{\"notice\":\"Validates a token by detecting if its transferable or takes a fee on transfer\"}},\"notice\":\"Validates tokens by flash borrowing from the token/<base token> pool on V2.Returns     Status.FOT if we detected a fee is taken on transfer.     Status.STF if transfer failed for the token.     Status.UNKN if we did not detect any issues with the token.A return value of Status.UNKN does not mean the token is definitely not a fee on transfer token     or definitely has no problems with its transfer. It just means we cant say for sure that it has any     issues.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ITokenValidator.sol\":\"ITokenValidator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ITokenValidator.sol\":{\"keccak256\":\"0xf58c6fd42f5a94295958d70842578e2f23fc888a0fea00b028c5f16cfe8be753\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://092899260ed33495bc76d13b8b10c521fa90c426db681e49388c80cb8710e197\",\"dweb:/ipfs/QmQbXJovdUmLqmuUsBziYjWv28tnxo9P6kryCMCF2YqeBW\"]}},\"version\":1}"
        }
      },
      "contracts/lens/MixedRouteQuoterV1.sol": {
        "MixedRouteQuoterV1": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_factory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_factoryClassic",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_SAMB",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "amount0Delta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1Delta",
                  "type": "int256"
                },
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                }
              ],
              "name": "astraCLSwapCallback",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factoryClassic",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "name": "quoteExactInput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160[]",
                  "name": "CLSqrtPriceX96AfterList",
                  "type": "uint160[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "CLInitializedTicksCrossedList",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint256",
                  "name": "CLSwapGasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "quoteExactInputSingleCL",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96After",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "initializedTicksCrossed",
                  "type": "uint32"
                },
                {
                  "internalType": "uint256",
                  "name": "gasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "quoteExactInputSingleClassic",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:594:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "76:117:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "86:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "101:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "95:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "95:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "86:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "171:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "180:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "183:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "173:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "173:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "173:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "130:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "141:5:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "156:3:89",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "161:1:89",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "152:3:89"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "152:11:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "165:1:89",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "148:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "148:19:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "137:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "137:31:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "127:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "127:42:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "120:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "120:50:89"
                              },
                              "nodeType": "YulIf",
                              "src": "117:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "55:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "66:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:179:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "313:279:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "359:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "368:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "376:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "361:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "361:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "361:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "334:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "343:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "330:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "330:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "355:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "326:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "326:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "323:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "394:52:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "436:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "404:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "404:42:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "394:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "455:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "501:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "512:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "497:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "497:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "465:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "465:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "455:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "525:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "571:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "582:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "567:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "567:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "535:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "535:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "525:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "263:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "274:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "286:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "294:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "302:6:89",
                            "type": ""
                          }
                        ],
                        "src": "198:394:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value0, value0) }\n        value0 := abi_decode_t_address_fromMemory(headStart)\n        value1 := abi_decode_t_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_t_address_fromMemory(add(headStart, 64))\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60e06040523480156200001157600080fd5b506040516200225438038062002254833981016040819052620000349162000078565b6001600160601b0319606093841b811660805290831b811660a052911b1660c052620000c1565b80516001600160a01b03811681146200007357600080fd5b919050565b6000806000606084860312156200008d578283fd5b62000098846200005b565b9250620000a8602085016200005b565b9150620000b8604085016200005b565b90509250925092565b60805160601c60a05160601c60c05160601c61214e62000106600039806102f2528061094452508061050e52508061015c528061053252806107fd525061214e6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636f9fbc821161005b5780636f9fbc82146100d857806390793ea8146100f8578063c45a015514610100578063cdca1753146101085761007d565b806311c17848146100825780634f04a0db146100975780635bccbdf7146100b5575b600080fd5b610095610090366004611b7a565b61012b565b005b61009f6102f0565b6040516100ac9190611ea7565b60405180910390f35b6100c86100c3366004611c32565b610314565b6040516100ac9493929190612051565b6100eb6100e6366004611cbf565b6104ed565b6040516100ac9190611fa0565b61009f61050c565b61009f610530565b61011b610116366004611b14565b610554565b6040516100ac9493929190611fa9565b600083138061013a5750600082135b61014357600080fd5b6000806000610151846107a6565b9250925092506101837f00000000000000000000000000000000000000000000000000000000000000008484846107d7565b50600080600088136101c7578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610886000036101fb565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610876000035b91509150600061020c8686866107f6565b90506000808273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561025757600080fd5b505afa15801561026b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028f9190611d23565b50505050509150915084156102b557604051848152826020820152816040820152606081fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e790611f6b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff8082169084161092849261035292906107f6565b905060005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856103848c60400151610834565b60808d015173ffffffffffffffffffffffffffffffffffffffff16156103ae578c608001516103d4565b876103cd5773fffd8963efd1fc6a506488495d951d5263988d256103d4565b6401000276a45b8d600001518e606001518f602001516040516020016103f593929190611e41565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610424959493929190611ec8565b6040805180830381600087803b15801561043d57600080fd5b505af192505050801561048b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261048891810190611b57565b60015b6104e0573d8080156104b9576040519150601f19603f3d011682016040523d82523d6000602084013e6104be565b606091505b505a820394506104cf818487610866565b9750975097509750505050506104e6565b50505050505b9193509193565b600061050682604001518360000151846020015161093a565b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000606080600061056486610983565b67ffffffffffffffff8111801561057a57600080fd5b506040519080825280602002602001820160405280156105a4578160200160208202803683370190505b5092506105b086610983565b67ffffffffffffffff811180156105c657600080fd5b506040519080825280602002602001820160405280156105f0578160200160208202803683370190505b50915060005b60008060006106048a6107a6565b919450925090506280000081161561066c5761066560405180606001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018b8152506104ed565b9850610765565b6000806000806106e96040518060a001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610314565b9350935093509350828b89815181106106fe57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a898151811061074557fe5b63ffffffff90921660209283029190910190910152929b50505094909401935b6001909301926107748a6109b2565b15610789576107828a6109ba565b9950610795565b8897505050505061079d565b5050506105f6565b92959194509250565b600080806107b484826109ef565b92506107c1846014610aef565b90506107ce8460176109ef565b91509193909250565b60006107ed856107e8868686610bdf565b610c5c565b95945050505050565b600061082c7f0000000000000000000000000000000000000000000000000000000000000000610827868686610bdf565b610c8c565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061086257600080fd5b5090565b6000806000806000808773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156108b557600080fd5b505afa1580156108c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ed9190611d23565b5093965061090294508d9350610dc292505050565b9197509550905061092a73ffffffffffffffffffffffffffffffffffffffff89168383610e7a565b9350869250505093509350935093565b600080600061096a7f000000000000000000000000000000000000000000000000000000000000000086866114d2565b915091506109798683836115ba565b9695505050505050565b805160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec909101045b919050565b516042111590565b80516060906105069083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901611690565b600081826014011015610a6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015610ad657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015610b6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015610bd657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b610be7611a74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610c1f579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000610c688383610c8c565b90503373ffffffffffffffffffffffffffffffffffffffff82161461050657600080fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610cce57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b60008060008351606014610e5957604484511015610e0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e790611f34565b60048401935083806020019051810190610e269190611bc8565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e79190611f1a565b83806020019051810190610e6d9190611dba565b9250925092509193909250565b60008060008060008060008060088b73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ece57600080fd5b505afa158015610ee2573d6000803e3d6000fd5b505050506040513d6020811015610ef857600080fd5b5051600290810b908c900b81610f0a57fe5b0560020b901d905060006101008c73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f5d57600080fd5b505afa158015610f71573d6000803e3d6000fd5b505050506040513d6020811015610f8757600080fd5b5051600290810b908d900b81610f9957fe5b0560020b81610fa457fe5b079050600060088d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d602081101561101b57600080fd5b5051600290810b908d900b8161102d57fe5b0560020b901d905060006101008e73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561108057600080fd5b505afa158015611094573d6000803e3d6000fd5b505050506040513d60208110156110aa57600080fd5b5051600290810b908e900b816110bc57fe5b0560020b816110c757fe5b07905060008160ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296856040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561112857600080fd5b505afa15801561113c573d6000803e3d6000fd5b505050506040513d602081101561115257600080fd5b5051161180156111e557508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111a357600080fd5b505afa1580156111b7573d6000803e3d6000fd5b505050506040513d60208110156111cd57600080fd5b5051600290810b908d900b816111df57fe5b0760020b155b80156111f657508b60020b8d60020b135b945060008360ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296876040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561125657600080fd5b505afa15801561126a573d6000803e3d6000fd5b505050506040513d602081101561128057600080fd5b50511611801561131357508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112d157600080fd5b505afa1580156112e5573d6000803e3d6000fd5b505050506040513d60208110156112fb57600080fd5b5051600290810b908e900b8161130d57fe5b0760020b155b801561132457508b60020b8d60020b125b95508160010b8460010b128061135057508160010b8460010b14801561135057508060ff168360ff1611155b1561136657839950829750819850809650611373565b8199508097508398508296505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff87161b9150505b8560010b8760010b136114aa578560010b8760010b14156113e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff858103161c165b6000818c73ffffffffffffffffffffffffffffffffffffffff16635339c2968a6040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561143b57600080fd5b505afa15801561144f573d6000803e3d6000fd5b505050506040513d602081101561146557600080fd5b505116905061147381611877565b61ffff16989098019750506001909501947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61139f565b81156114b7576001880397505b82156114c4576001880397505b505050505050509392505050565b60008060006114e185856118b0565b5090506000806114f2888888611955565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561153757600080fd5b505afa15801561154b573d6000803e3d6000fd5b505050506040513d606081101561156157600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146115a85780826115ab565b81815b90999098509650505050505050565b600080841161162a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b60008311801561163a5750600082115b61164357600080fd5b6000611651856103e5611a40565b9050600061165f8285611a40565b9050600061167983611673886103e8611a40565b90611a64565b905080828161168457fe5b04979650505050505050565b60608182601f01101561170457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561177557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b818301845110156117e757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015611806576040519150600082526020820160405261186e565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561183f578051835260209283019201611827565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000805b8215610506577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83019092169160010161187b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118ec57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610611926578284611929565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661194e57600080fd5b9250929050565b600080600061196485856118b0565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6000821580611a5b57505081810281838281611a5857fe5b04145b61050657600080fd5b8082018281101561050657600080fd5b604080516060810182526000808252602082018190529181019190915290565b600082601f830112611aa4578081fd5b8135611ab7611ab2826120ac565b612088565b818152846020838601011115611acb578283fd5b816020850160208301379081016020019190915292915050565b8051600281900b81146109ad57600080fd5b80356109ad8161211c565b805161ffff811681146109ad57600080fd5b60008060408385031215611b26578182fd5b823567ffffffffffffffff811115611b3c578283fd5b611b4885828601611a94565b95602094909401359450505050565b60008060408385031215611b69578182fd5b505080516020909101519092909150565b600080600060608486031215611b8e578081fd5b8335925060208401359150604084013567ffffffffffffffff811115611bb2578182fd5b611bbe86828701611a94565b9150509250925092565b600060208284031215611bd9578081fd5b815167ffffffffffffffff811115611bef578182fd5b8201601f81018413611bff578182fd5b8051611c0d611ab2826120ac565b818152856020838501011115611c21578384fd5b6107ed8260208301602086016120ec565b600060a08284031215611c43578081fd5b60405160a0810181811067ffffffffffffffff82111715611c6057fe5b6040528235611c6e8161211c565b81526020830135611c7e8161211c565b602082015260408381013590820152606083013562ffffff81168114611ca2578283fd5b6060820152611cb360808401611af7565b60808201529392505050565b600060608284031215611cd0578081fd5b6040516060810181811067ffffffffffffffff82111715611ced57fe5b6040528235611cfb8161211c565b81526020830135611d0b8161211c565b60208201526040928301359281019290925250919050565b600080600080600080600060e0888a031215611d3d578283fd5b8751611d488161211c565b9650611d5660208901611ae5565b9550611d6460408901611b02565b9450611d7260608901611b02565b9350611d8060808901611b02565b925060a088015160ff81168114611d95578283fd5b60c08901519092508015158114611daa578182fd5b8091505092959891949750929550565b600080600060608486031215611dce578081fd5b835192506020840151611de08161211c565b9150611dee60408501611ae5565b90509250925092565b60008151808452611e0f8160208601602086016120ec565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152611f0f60a0830184611df7565b979650505050505050565b600060208252611f2d6020830184611df7565b9392505050565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b6020808252818101527f4578616374206f75747075742071756f7465206e6f7420737570706f72746564604082015260600190565b90815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611fff57845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611fcd565b505084810360408601528651808252908201925081870190845b8181101561203b57825163ffffffff1685529383019391830191600101612019565b5050505060609290920192909252949350505050565b93845273ffffffffffffffffffffffffffffffffffffffff92909216602084015263ffffffff166040830152606082015260800190565b60405181810167ffffffffffffffff811182821017156120a457fe5b604052919050565b600067ffffffffffffffff8211156120c057fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156121075781810151838201526020016120ef565b83811115612116576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461213e57600080fd5b5056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2254 CODESIZE SUB DUP1 PUSH3 0x2254 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x78 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP4 DUP5 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP1 DUP4 SHL DUP2 AND PUSH1 0xA0 MSTORE SWAP2 SHL AND PUSH1 0xC0 MSTORE PUSH3 0xC1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x8D JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH3 0x98 DUP5 PUSH3 0x5B JUMP JUMPDEST SWAP3 POP PUSH3 0xA8 PUSH1 0x20 DUP6 ADD PUSH3 0x5B JUMP JUMPDEST SWAP2 POP PUSH3 0xB8 PUSH1 0x40 DUP6 ADD PUSH3 0x5B JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH2 0x214E PUSH3 0x106 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x2F2 MSTORE DUP1 PUSH2 0x944 MSTORE POP DUP1 PUSH2 0x50E MSTORE POP DUP1 PUSH2 0x15C MSTORE DUP1 PUSH2 0x532 MSTORE DUP1 PUSH2 0x7FD MSTORE POP PUSH2 0x214E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6F9FBC82 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x6F9FBC82 EQ PUSH2 0xD8 JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0xF8 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x100 JUMPI DUP1 PUSH4 0xCDCA1753 EQ PUSH2 0x108 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x11C17848 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x4F04A0DB EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x5BCCBDF7 EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B7A JUMP JUMPDEST PUSH2 0x12B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0x2F0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP2 SWAP1 PUSH2 0x1EA7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC8 PUSH2 0xC3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C32 JUMP JUMPDEST PUSH2 0x314 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2051 JUMP JUMPDEST PUSH2 0xEB PUSH2 0xE6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CBF JUMP JUMPDEST PUSH2 0x4ED JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP2 SWAP1 PUSH2 0x1FA0 JUMP JUMPDEST PUSH2 0x9F PUSH2 0x50C JUMP JUMPDEST PUSH2 0x9F PUSH2 0x530 JUMP JUMPDEST PUSH2 0x11B PUSH2 0x116 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B14 JUMP JUMPDEST PUSH2 0x554 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1FA9 JUMP JUMPDEST PUSH1 0x0 DUP4 SGT DUP1 PUSH2 0x13A JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST PUSH2 0x143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x151 DUP5 PUSH2 0x7A6 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x183 PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x7D7 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 SGT PUSH2 0x1C7 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP9 PUSH1 0x0 SUB PUSH2 0x1FB JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP8 PUSH1 0x0 SUB JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x20C DUP7 DUP7 DUP7 PUSH2 0x7F6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28F SWAP2 SWAP1 PUSH2 0x1D23 JUMP JUMPDEST POP POP POP POP POP SWAP2 POP SWAP2 POP DUP5 ISZERO PUSH2 0x2B5 JUMPI PUSH1 0x40 MLOAD DUP5 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E7 SWAP1 PUSH2 0x1F6B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP2 MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP1 DUP5 AND LT SWAP3 DUP5 SWAP3 PUSH2 0x352 SWAP3 SWAP1 PUSH2 0x7F6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 GAS SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP6 PUSH2 0x384 DUP13 PUSH1 0x40 ADD MLOAD PUSH2 0x834 JUMP JUMPDEST PUSH1 0x80 DUP14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x3AE JUMPI DUP13 PUSH1 0x80 ADD MLOAD PUSH2 0x3D4 JUMP JUMPDEST DUP8 PUSH2 0x3CD JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x3D4 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x0 ADD MLOAD DUP15 PUSH1 0x60 ADD MLOAD DUP16 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3F5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E41 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x424 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1EC8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x43D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x48B JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x488 SWAP2 DUP2 ADD SWAP1 PUSH2 0x1B57 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x4E0 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x4B9 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4BE JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP GAS DUP3 SUB SWAP5 POP PUSH2 0x4CF DUP2 DUP5 DUP8 PUSH2 0x866 JUMP JUMPDEST SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP POP POP POP POP PUSH2 0x4E6 JUMP JUMPDEST POP POP POP POP POP JUMPDEST SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x506 DUP3 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x93A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x564 DUP7 PUSH2 0x983 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x57A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5A4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0x5B0 DUP7 PUSH2 0x983 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x5C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5F0 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x604 DUP11 PUSH2 0x7A6 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH3 0x800000 DUP2 AND ISZERO PUSH2 0x66C JUMPI PUSH2 0x665 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE POP PUSH2 0x4ED JUMP JUMPDEST SWAP9 POP PUSH2 0x765 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x6E9 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH3 0xFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x314 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP3 DUP12 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x6FE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x745 JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP12 POP POP POP SWAP5 SWAP1 SWAP5 ADD SWAP4 JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x774 DUP11 PUSH2 0x9B2 JUMP JUMPDEST ISZERO PUSH2 0x789 JUMPI PUSH2 0x782 DUP11 PUSH2 0x9BA JUMP JUMPDEST SWAP10 POP PUSH2 0x795 JUMP JUMPDEST DUP9 SWAP8 POP POP POP POP POP PUSH2 0x79D JUMP JUMPDEST POP POP POP PUSH2 0x5F6 JUMP JUMPDEST SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x7B4 DUP5 DUP3 PUSH2 0x9EF JUMP JUMPDEST SWAP3 POP PUSH2 0x7C1 DUP5 PUSH1 0x14 PUSH2 0xAEF JUMP JUMPDEST SWAP1 POP PUSH2 0x7CE DUP5 PUSH1 0x17 PUSH2 0x9EF JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7ED DUP6 PUSH2 0x7E8 DUP7 DUP7 DUP7 PUSH2 0xBDF JUMP JUMPDEST PUSH2 0xC5C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x82C PUSH32 0x0 PUSH2 0x827 DUP7 DUP7 DUP7 PUSH2 0xBDF JUMP JUMPDEST PUSH2 0xC8C JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x862 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8ED SWAP2 SWAP1 PUSH2 0x1D23 JUMP JUMPDEST POP SWAP4 SWAP7 POP PUSH2 0x902 SWAP5 POP DUP14 SWAP4 POP PUSH2 0xDC2 SWAP3 POP POP POP JUMP JUMPDEST SWAP2 SWAP8 POP SWAP6 POP SWAP1 POP PUSH2 0x92A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP4 DUP4 PUSH2 0xE7A JUMP JUMPDEST SWAP4 POP DUP7 SWAP3 POP POP POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x96A PUSH32 0x0 DUP7 DUP7 PUSH2 0x14D2 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x979 DUP7 DUP4 DUP4 PUSH2 0x15BA JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x17 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC SWAP1 SWAP2 ADD DIV JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x506 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x1690 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0xA63 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0xB63 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0xBD6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0xBE7 PUSH2 0x1A74 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0xC1F JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC68 DUP4 DUP4 PUSH2 0xC8C JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xCCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x203C8EC649B23B7FAF9B73CCADFB1A67AF52A097119C82801F4947EC5DEB6C04 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x60 EQ PUSH2 0xE59 JUMPI PUSH1 0x44 DUP5 MLOAD LT ISZERO PUSH2 0xE0C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E7 SWAP1 PUSH2 0x1F34 JUMP JUMPDEST PUSH1 0x4 DUP5 ADD SWAP4 POP DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xE26 SWAP2 SWAP1 PUSH2 0x1BC8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E7 SWAP2 SWAP1 PUSH2 0x1F1A JUMP JUMPDEST DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xE6D SWAP2 SWAP1 PUSH2 0x1DBA JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x8 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xECE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEE2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP13 SWAP1 SIGNEXTEND DUP2 PUSH2 0xF0A JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0xF99 JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0xFA4 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 PUSH1 0x8 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1005 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x101B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x102D JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP15 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1080 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1094 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x10BC JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0x10C7 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1128 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x113C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x11E5 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11B7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x11DF JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x11F6 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SGT JUMPDEST SWAP5 POP PUSH1 0x0 DUP4 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x126A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1280 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x1313 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x130D JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1324 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SLT JUMPDEST SWAP6 POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND SLT DUP1 PUSH2 0x1350 JUMPI POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND EQ DUP1 ISZERO PUSH2 0x1350 JUMPI POP DUP1 PUSH1 0xFF AND DUP4 PUSH1 0xFF AND GT ISZERO JUMPDEST ISZERO PUSH2 0x1366 JUMPI DUP4 SWAP10 POP DUP3 SWAP8 POP DUP2 SWAP9 POP DUP1 SWAP7 POP PUSH2 0x1373 JUMP JUMPDEST DUP2 SWAP10 POP DUP1 SWAP8 POP DUP4 SWAP9 POP DUP3 SWAP7 POP JUMPDEST POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP8 AND SHL SWAP2 POP POP JUMPDEST DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND SGT PUSH2 0x14AA JUMPI DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND EQ ISZERO PUSH2 0x13E4 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP6 DUP2 SUB AND SHR AND JUMPDEST PUSH1 0x0 DUP2 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x143B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x144F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND SWAP1 POP PUSH2 0x1473 DUP2 PUSH2 0x1877 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP9 SWAP1 SWAP9 ADD SWAP8 POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x139F JUMP JUMPDEST DUP2 ISZERO PUSH2 0x14B7 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST DUP3 ISZERO PUSH2 0x14C4 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x14E1 DUP6 DUP6 PUSH2 0x18B0 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x14F2 DUP9 DUP9 DUP9 PUSH2 0x1955 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1537 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x154B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1561 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x15A8 JUMPI DUP1 DUP3 PUSH2 0x15AB JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x162A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F494E5055545F414D4F554E5400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x163A JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x1643 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1651 DUP6 PUSH2 0x3E5 PUSH2 0x1A40 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x165F DUP3 DUP6 PUSH2 0x1A40 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1679 DUP4 PUSH2 0x1673 DUP9 PUSH2 0x3E8 PUSH2 0x1A40 JUMP JUMPDEST SWAP1 PUSH2 0x1A64 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0x1684 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0x1704 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0x1775 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0x17E7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x1806 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x186E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x183F JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x1827 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 ISZERO PUSH2 0x506 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD SWAP1 SWAP3 AND SWAP2 PUSH1 0x1 ADD PUSH2 0x187B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x18EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x1926 JUMPI DUP3 DUP5 PUSH2 0x1929 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x194E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1964 DUP6 DUP6 PUSH2 0x18B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 DUP6 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP6 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP11 SWAP1 SWAP5 SHL SWAP1 SWAP4 AND PUSH1 0x69 DUP5 ADD MSTORE PUSH1 0x7D DUP4 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH32 0x400E13FC6C59224F20228F0C0561806856AC34B7318F337F8012707C880C351F PUSH1 0x9D DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP3 ADD SWAP1 SWAP8 MSTORE DUP1 MLOAD SWAP7 ADD SWAP6 SWAP1 SWAP6 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x1A5B JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x1A58 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1AA4 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1AB7 PUSH2 0x1AB2 DUP3 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x2088 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x1ACB JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x9AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x9AD DUP2 PUSH2 0x211C JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x9AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B26 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B3C JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x1B48 DUP6 DUP3 DUP7 ADD PUSH2 0x1A94 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B69 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1B8E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BB2 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1BBE DUP7 DUP3 DUP8 ADD PUSH2 0x1A94 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BD9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BEF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x1BFF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x1C0D PUSH2 0x1AB2 DUP3 PUSH2 0x20AC JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x1C21 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x7ED DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20EC JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C43 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1C60 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD PUSH2 0x1C6E DUP2 PUSH2 0x211C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1C7E DUP2 PUSH2 0x211C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1CA2 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1CB3 PUSH1 0x80 DUP5 ADD PUSH2 0x1AF7 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CD0 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1CED JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD PUSH2 0x1CFB DUP2 PUSH2 0x211C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1D0B DUP2 PUSH2 0x211C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 SWAP3 DUP4 ADD CALLDATALOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1D3D JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1D48 DUP2 PUSH2 0x211C JUMP JUMPDEST SWAP7 POP PUSH2 0x1D56 PUSH1 0x20 DUP10 ADD PUSH2 0x1AE5 JUMP JUMPDEST SWAP6 POP PUSH2 0x1D64 PUSH1 0x40 DUP10 ADD PUSH2 0x1B02 JUMP JUMPDEST SWAP5 POP PUSH2 0x1D72 PUSH1 0x60 DUP10 ADD PUSH2 0x1B02 JUMP JUMPDEST SWAP4 POP PUSH2 0x1D80 PUSH1 0x80 DUP10 ADD PUSH2 0x1B02 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D95 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0xC0 DUP10 ADD MLOAD SWAP1 SWAP3 POP DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1DAA JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1DCE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x1DE0 DUP2 PUSH2 0x211C JUMP JUMPDEST SWAP2 POP PUSH2 0x1DEE PUSH1 0x40 DUP6 ADD PUSH2 0x1AE5 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1E0F DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20EC JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x1F0F PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x1DF7 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1F2D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1DF7 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4578616374206F75747075742071756F7465206E6F7420737570706F72746564 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD DUP7 DUP4 MSTORE PUSH1 0x20 PUSH1 0x80 DUP2 DUP6 ADD MSTORE DUP2 DUP8 MLOAD DUP1 DUP5 MSTORE PUSH1 0xA0 DUP7 ADD SWAP2 POP DUP3 DUP10 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1FFF JUMPI DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1FCD JUMP JUMPDEST POP POP DUP5 DUP2 SUB PUSH1 0x40 DUP7 ADD MSTORE DUP7 MLOAD DUP1 DUP3 MSTORE SWAP1 DUP3 ADD SWAP3 POP DUP2 DUP8 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x203B JUMPI DUP3 MLOAD PUSH4 0xFFFFFFFF AND DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2019 JUMP JUMPDEST POP POP POP POP PUSH1 0x60 SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x20A4 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x20C0 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2107 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20EF JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2116 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x213E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "1466:7915:75:-:0;;;2127:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;520:18:16;;;;;;;;548:12;;;;;;;2278:32:75;;;::::1;::::0;1466:7915;;14:179:89;95:13;;-1:-1:-1;;;;;137:31:89;;127:42;;117:2;;183:1;180;173:12;117:2;76:117;;;:::o;198:394::-;;;;355:2;343:9;334:7;330:23;326:32;323:2;;;376:6;368;361:22;323:2;404:42;436:9;404:42;:::i;:::-;394:52;;465:51;512:2;501:9;497:18;465:51;:::i;:::-;455:61;;535:51;582:2;571:9;567:18;535:51;:::i;:::-;525:61;;313:279;;;;;:::o;:::-;1466:7915:75;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:11459:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "68:431:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "117:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "126:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "133:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "119:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "119:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "119:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "96:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "104:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "92:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "92:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "111:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "88:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "88:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "81:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "81:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "78:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "150:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "173:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "160:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "160:20:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "154:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "189:64:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "249:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "219:29:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "219:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "204:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "204:49:89"
                              },
                              "variables": [
                                {
                                  "name": "array_1",
                                  "nodeType": "YulTypedName",
                                  "src": "193:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "269:7:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "278:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "262:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "262:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "262:19:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "329:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "338:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "345:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "331:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "331:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "331:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "304:6:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "312:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "300:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "300:15:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "317:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "296:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "296:26:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "324:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "293:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "293:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "290:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "array_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "379:7:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "388:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "375:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "375:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "399:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "407:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "395:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "395:17:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "414:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "362:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "362:55:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "362:55:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "array_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "441:7:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "450:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "437:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "437:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "455:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "433:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "433:27:89"
                                  },
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "462:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "426:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "426:42:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "426:42:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "477:16:89",
                              "value": {
                                "name": "array_1",
                                "nodeType": "YulIdentifier",
                                "src": "486:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "477:5:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "50:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "58:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:485:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "564:106:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "574:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "589:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "583:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "583:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "574:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "648:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "657:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "660:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "650:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "650:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "650:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "618:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "636:1:89",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "639:5:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "625:10:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "625:20:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "615:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "615:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "608:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "608:39:89"
                              },
                              "nodeType": "YulIf",
                              "src": "605:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_int24_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "543:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "554:5:89",
                            "type": ""
                          }
                        ],
                        "src": "504:166:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "726:87:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "736:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "758:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "745:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "745:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "736:5:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "801:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "774:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "774:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "774:33:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "705:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "716:5:89",
                            "type": ""
                          }
                        ],
                        "src": "675:138:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "879:104:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "889:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "904:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "898:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "898:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "889:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "961:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "970:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "973:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "963:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "963:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "963:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "933:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "944:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "951:6:89",
                                            "type": "",
                                            "value": "0xffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "940:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "940:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "930:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "930:29:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "923:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "923:37:89"
                              },
                              "nodeType": "YulIf",
                              "src": "920:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint16_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "858:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "869:5:89",
                            "type": ""
                          }
                        ],
                        "src": "818:165:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1084:314:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1130:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1139:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1147:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1132:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1132:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1132:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1105:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1114:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1101:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1101:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1126:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1097:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1097:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1094:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1165:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1192:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1179:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1179:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1169:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1245:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1254:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1262:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1247:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1247:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1247:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1217:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1225:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1214:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1214:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1211:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1280:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1313:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1324:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1309:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1309:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1333:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "1290:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1290:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1280:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1350:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1377:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1388:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1373:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1373:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1360:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1360:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1350:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes_memory_ptrt_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1042:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1053:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1065:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1073:6:89",
                            "type": ""
                          }
                        ],
                        "src": "988:410:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1499:157:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1545:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1554:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1562:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1547:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1547:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1547:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1520:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1529:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1516:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1516:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1541:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1512:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1512:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1509:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1580:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1596:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1590:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1590:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1580:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1615:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1635:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1646:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1631:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1631:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1625:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1625:25:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1615:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int256t_int256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1457:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1468:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1480:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1488:6:89",
                            "type": ""
                          }
                        ],
                        "src": "1403:253:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1772:365:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1818:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1827:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1835:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1820:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1820:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1820:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1793:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1802:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1789:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1789:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1814:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1785:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1785:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1782:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1853:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1876:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1863:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1863:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1853:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1895:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1922:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1933:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1918:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1918:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1905:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1905:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1895:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1946:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1977:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1988:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1973:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1973:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1960:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1960:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1950:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2035:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2044:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2052:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2037:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2037:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2037:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2007:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2015:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2004:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2004:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2001:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2070:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2103:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "2114:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2099:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2099:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2123:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "2080:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2080:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2070:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int256t_int256t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1722:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1733:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1745:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1753:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1761:6:89",
                            "type": ""
                          }
                        ],
                        "src": "1661:476:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2233:585:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2279:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2288:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2296:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2281:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2281:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2281:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2254:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2263:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2250:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2250:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2275:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2246:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2246:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2243:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2314:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2334:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2328:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2328:16:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2318:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2387:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2396:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2404:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2389:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2389:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2389:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2359:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2367:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2356:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2356:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2353:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2422:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2436:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2447:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2432:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2432:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2426:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2502:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2511:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2519:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2504:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2504:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2504:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2481:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2485:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2477:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2477:13:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2492:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2473:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2473:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2466:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2466:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2463:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2537:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2553:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2547:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2547:9:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2541:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2565:62:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2623:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "2593:29:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2593:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2578:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2578:49:89"
                              },
                              "variables": [
                                {
                                  "name": "array",
                                  "nodeType": "YulTypedName",
                                  "src": "2569:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "2643:5:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2650:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2636:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2636:17:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2636:17:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2699:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2708:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2716:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2701:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2701:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2701:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2676:2:89"
                                          },
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2680:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2672:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2672:11:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2685:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2668:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2668:20:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2690:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2665:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2665:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2662:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2760:2:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2764:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2756:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2756:11:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "array",
                                        "nodeType": "YulIdentifier",
                                        "src": "2773:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2780:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2769:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2769:14:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2785:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2734:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2734:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2734:54:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2797:15:89",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "2807:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2797:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2199:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2210:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2222:6:89",
                            "type": ""
                          }
                        ],
                        "src": "2142:676:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2940:877:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2987:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2996:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3004:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2989:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2989:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2989:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2961:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2970:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2957:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2957:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2982:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2953:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2953:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2950:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3022:23:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3042:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3036:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3036:9:89"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "3026:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3054:34:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "3076:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3084:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3072:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3072:16:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "3058:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3163:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "3165:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3165:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3165:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3106:10:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3118:18:89",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "3103:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3103:34:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3142:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3154:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "3139:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3139:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "3100:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3100:62:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3097:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3192:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "3196:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3185:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3185:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3185:22:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3216:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3242:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3229:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3229:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3220:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3288:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3261:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3261:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3261:33:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "3310:6:89"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3318:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3303:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3303:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3303:21:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3333:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3365:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3376:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3361:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3361:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3348:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3348:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3337:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3416:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3389:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3389:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3389:35:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3444:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3452:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3440:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3440:15:89"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3457:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3433:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3433:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3433:32:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3485:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3493:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3481:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3481:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "3515:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3526:2:89",
                                            "type": "",
                                            "value": "64"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3511:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3511:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "3498:12:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3498:32:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3474:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3474:57:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3474:57:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3540:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3572:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3583:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3568:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3568:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3555:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3555:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "3544:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3643:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3652:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3660:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3645:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3645:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3645:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "3609:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "3622:7:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3631:8:89",
                                            "type": "",
                                            "value": "0xffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "3618:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3618:22:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "3606:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3606:35:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "3599:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3599:43:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3596:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3689:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3697:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3685:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3685:15:89"
                                  },
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3702:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3678:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3678:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3678:32:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3730:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3738:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3726:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3726:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "3769:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3780:3:89",
                                            "type": "",
                                            "value": "128"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3765:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3765:19:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_uint160",
                                      "nodeType": "YulIdentifier",
                                      "src": "3744:20:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3744:41:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3719:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3719:67:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3719:67:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3795:16:89",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "3805:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3795:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2906:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2917:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2929:6:89",
                            "type": ""
                          }
                        ],
                        "src": "2823:994:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3944:620:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3990:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3999:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4007:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3992:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3992:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3992:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3965:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3974:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3961:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3961:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3986:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3957:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3957:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3954:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4025:23:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4045:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4039:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4039:9:89"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "4029:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4057:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "4079:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4087:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4075:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4075:15:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "4061:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4165:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "4167:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4167:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4167:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4108:10:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4120:18:89",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4105:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4105:34:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4144:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4156:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4141:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4141:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "4102:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4102:62:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4099:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4194:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "4198:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4187:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4187:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4187:22:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4218:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4244:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4231:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4231:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4222:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4290:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4263:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4263:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4263:33:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "4312:6:89"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4320:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4305:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4305:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4305:21:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4335:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4367:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4378:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4363:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4363:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4350:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4350:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4339:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4418:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4391:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4391:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4391:35:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4446:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4454:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4442:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4442:15:89"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4459:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4435:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4435:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4435:32:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4487:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4495:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4483:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4483:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "4517:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4528:2:89",
                                            "type": "",
                                            "value": "64"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "4513:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4513:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "4500:12:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4500:32:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4476:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4476:57:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4476:57:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4542:16:89",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "4552:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4542:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_QuoteExactInputSingleClassicParams_$8734_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3910:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3921:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3933:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3822:742:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4742:772:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4789:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "4798:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "4806:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4791:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4791:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4791:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4763:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4772:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4759:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4759:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4784:3:89",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4755:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4755:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4752:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4824:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4843:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4837:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4837:16:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4828:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4889:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4862:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4862:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4862:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4904:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4914:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4904:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4928:59:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4972:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4983:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4968:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4968:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_int24_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4938:29:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4938:49:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4928:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4996:60:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5041:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5052:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5037:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5037:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5006:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5006:50:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4996:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5065:60:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5110:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5121:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5106:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5106:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5075:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5075:50:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5065:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5134:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5179:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5190:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5175:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5175:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5144:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5144:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "5134:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5204:41:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5229:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5240:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5225:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5225:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5219:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5219:26:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5208:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5297:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value5",
                                          "nodeType": "YulIdentifier",
                                          "src": "5306:6:89"
                                        },
                                        {
                                          "name": "value5",
                                          "nodeType": "YulIdentifier",
                                          "src": "5314:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5299:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5299:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5299:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5267:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "5280:7:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5289:4:89",
                                            "type": "",
                                            "value": "0xff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "5276:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5276:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "5264:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5264:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5257:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5257:39:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5254:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5332:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "5342:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "5332:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5358:41:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5383:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5394:3:89",
                                        "type": "",
                                        "value": "192"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5379:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5379:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5373:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5373:26:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "5362:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5456:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value6",
                                          "nodeType": "YulIdentifier",
                                          "src": "5465:6:89"
                                        },
                                        {
                                          "name": "value6",
                                          "nodeType": "YulIdentifier",
                                          "src": "5473:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5458:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5458:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5458:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "5421:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value_2",
                                                "nodeType": "YulIdentifier",
                                                "src": "5444:7:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "5437:6:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5437:15:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "5430:6:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5430:23:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "5418:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5418:36:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5411:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5411:44:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5408:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5491:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "5501:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value6",
                                  "nodeType": "YulIdentifier",
                                  "src": "5491:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4660:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4671:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4683:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4691:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4699:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4707:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "4715:6:89",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "4723:6:89",
                            "type": ""
                          },
                          {
                            "name": "value6",
                            "nodeType": "YulTypedName",
                            "src": "4731:6:89",
                            "type": ""
                          }
                        ],
                        "src": "4569:945:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5632:294:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5678:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "5687:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "5695:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5680:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5680:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5680:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5653:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5662:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5649:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5649:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5674:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5645:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5645:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5642:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5713:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5729:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5723:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5723:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5713:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5748:38:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5771:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5782:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5767:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5767:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5761:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5761:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5752:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5822:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5795:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5795:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5795:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5837:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5847:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5837:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5861:59:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5905:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5916:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5901:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5901:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_int24_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5871:29:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5871:49:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5861:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint160t_int24_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5582:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5593:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5605:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5613:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5621:6:89",
                            "type": ""
                          }
                        ],
                        "src": "5519:407:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5982:267:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5992:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "6012:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6006:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6006:12:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "5996:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6034:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6039:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6027:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6027:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6027:19:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "6081:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6088:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6077:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6077:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6099:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6104:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6095:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6095:14:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6111:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6055:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6055:63:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6055:63:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6127:116:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6142:3:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "6155:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6163:2:89",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "6151:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6151:15:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6168:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "6147:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6147:88:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6138:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6138:98:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6238:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6134:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6134:109:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "6127:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5959:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "5966:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "5974:3:89",
                            "type": ""
                          }
                        ],
                        "src": "5931:318:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6427:341:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6437:76:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6447:66:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6441:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6529:3:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6542:2:89",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "6546:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "6538:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6538:15:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6555:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6534:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6534:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6522:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6522:37:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6522:37:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6579:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6584:2:89",
                                        "type": "",
                                        "value": "20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6575:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6575:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6597:3:89",
                                            "type": "",
                                            "value": "232"
                                          },
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "6602:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "6593:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6593:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6611:66:89",
                                        "type": "",
                                        "value": "0xffffff0000000000000000000000000000000000000000000000000000000000"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6589:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6589:89:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6568:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6568:111:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6568:111:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6699:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6704:2:89",
                                        "type": "",
                                        "value": "23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6695:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6695:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6717:2:89",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value2",
                                            "nodeType": "YulIdentifier",
                                            "src": "6721:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "6713:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6713:15:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6730:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6709:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6709:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6688:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6688:46:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6688:46:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6743:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6754:3:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6759:2:89",
                                    "type": "",
                                    "value": "43"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6750:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6750:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "6743:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "6387:3:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6392:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6400:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6408:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "6419:3:89",
                            "type": ""
                          }
                        ],
                        "src": "6254:514:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6874:125:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6884:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6896:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6907:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6892:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6892:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6884:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6926:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6941:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6949:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6937:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6937:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6919:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6919:74:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6919:74:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6843:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6854:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6865:4:89",
                            "type": ""
                          }
                        ],
                        "src": "6773:226:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7227:370:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7237:52:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7247:42:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7241:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7305:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7320:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7328:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7316:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7316:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7298:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7298:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7298:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7352:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7363:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7348:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7348:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "7382:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "7375:6:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7375:14:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "7368:6:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7368:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7341:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7341:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7341:50:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7411:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7422:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7407:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7407:18:89"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7427:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7400:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7400:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7400:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7454:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7465:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7450:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7450:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value3",
                                        "nodeType": "YulIdentifier",
                                        "src": "7474:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7482:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7470:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7470:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7443:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7443:43:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7443:43:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7506:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7517:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7502:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7502:19:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7523:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7495:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7495:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7495:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7536:55:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "7563:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7575:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7586:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7571:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7571:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "7544:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7544:47:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7536:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7164:9:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "7175:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "7183:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7191:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7199:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7207:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7218:4:89",
                            "type": ""
                          }
                        ],
                        "src": "7004:593:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7723:100:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7740:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7751:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7733:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7733:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7733:21:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7763:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7790:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7802:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7813:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7798:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7798:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "7771:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7771:46:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7763:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7692:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7703:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7714:4:89",
                            "type": ""
                          }
                        ],
                        "src": "7602:221:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8002:166:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8019:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8030:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8012:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8012:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8012:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8053:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8064:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8049:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8049:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8069:2:89",
                                    "type": "",
                                    "value": "16"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8042:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8042:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8042:30:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8092:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8103:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8088:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8088:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8108:18:89",
                                    "type": "",
                                    "value": "Unexpected error"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8081:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8081:46:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8081:46:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8136:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8148:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8159:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8144:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8144:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8136:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7979:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7993:4:89",
                            "type": ""
                          }
                        ],
                        "src": "7828:340:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8347:182:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8364:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8375:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8357:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8357:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8357:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8398:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8409:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8394:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8394:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8414:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8387:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8387:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8387:30:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8437:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8448:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8433:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8433:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8453:34:89",
                                    "type": "",
                                    "value": "Exact output quote not supported"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8426:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8426:62:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8426:62:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8497:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8509:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8520:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8505:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8505:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8497:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_f7a55993d4eb382512b201c519dd56fdec259588ab4c60b5eb31e24ad5650add__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8324:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8338:4:89",
                            "type": ""
                          }
                        ],
                        "src": "8173:356:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8635:76:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8645:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8657:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8668:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8653:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8653:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8645:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8687:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8698:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8680:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8680:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8680:25:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8604:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8615:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8626:4:89",
                            "type": ""
                          }
                        ],
                        "src": "8534:177:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8999:1082:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9009:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9027:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9038:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9023:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9023:19:89"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9013:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9058:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9069:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9051:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9051:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9051:25:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9085:12:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9095:2:89",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9089:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9117:9:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9128:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9113:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9113:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9133:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9106:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9106:31:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9106:31:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9146:17:89",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "9157:6:89"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "9150:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9172:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9192:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9186:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9186:13:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "9176:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9215:6:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9223:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9208:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9208:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9208:22:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9239:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9250:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9261:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9246:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9246:19:89"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "9239:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9274:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9292:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9300:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9288:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9288:15:89"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "9278:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9312:13:89",
                              "value": {
                                "name": "tail",
                                "nodeType": "YulIdentifier",
                                "src": "9321:4:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "9316:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9383:169:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "9404:3:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "9419:6:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "9413:5:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "9413:13:89"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "9428:42:89",
                                              "type": "",
                                              "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "9409:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "9409:62:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "9397:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9397:75:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9397:75:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9485:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "9496:3:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9501:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9492:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9492:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "9485:3:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9517:25:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "9531:6:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9539:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9527:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9527:15:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "9517:6:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "9345:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9348:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9342:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9342:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "9356:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9358:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "9367:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9370:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9363:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9363:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "9358:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "9338:3:89",
                                "statements": []
                              },
                              "src": "9334:218:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9572:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9583:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9568:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9568:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "9592:3:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9597:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "9588:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9588:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9561:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9561:47:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9561:47:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9617:16:89",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "9630:3:89"
                              },
                              "variables": [
                                {
                                  "name": "pos_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9621:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9642:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9664:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9658:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9658:13:89"
                              },
                              "variables": [
                                {
                                  "name": "length_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9646:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "9687:3:89"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9692:8:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9680:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9680:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9680:21:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9710:21:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "9723:3:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9728:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9719:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9719:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "pos_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "9710:5:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9740:31:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9760:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9768:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9756:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9756:15:89"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9744:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9780:15:89",
                              "value": {
                                "name": "tail",
                                "nodeType": "YulIdentifier",
                                "src": "9791:4:89"
                              },
                              "variables": [
                                {
                                  "name": "i_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9784:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9861:149:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9882:5:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "9899:8:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "9893:5:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "9893:15:89"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "9910:10:89",
                                              "type": "",
                                              "value": "0xffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "9889:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "9889:32:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "9875:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9875:47:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9875:47:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9935:23:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9948:5:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9955:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9944:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9944:14:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9935:5:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9971:29:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9987:8:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9997:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9983:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9983:17:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9971:8:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9815:3:89"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9820:8:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9812:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9812:17:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "9830:22:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9832:18:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9843:3:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9848:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9839:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9839:11:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9832:3:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "9808:3:89",
                                "statements": []
                              },
                              "src": "9804:206:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10019:13:89",
                              "value": {
                                "name": "pos_1",
                                "nodeType": "YulIdentifier",
                                "src": "10027:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10019:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10052:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10063:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10048:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10048:18:89"
                                  },
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "10068:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10041:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10041:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10041:34:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_array$_t_uint160_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint256__to_t_uint256_t_array$_t_uint160_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8944:9:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "8955:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8963:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8971:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8979:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8990:4:89",
                            "type": ""
                          }
                        ],
                        "src": "8716:1365:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10269:272:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10279:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10291:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10302:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10287:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10287:19:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10279:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10322:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10333:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10315:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10315:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10315:25:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10360:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10371:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10356:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10356:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10380:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10388:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "10376:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10376:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10349:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10349:83:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10349:83:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10452:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10463:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10448:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10448:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "10472:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10480:10:89",
                                        "type": "",
                                        "value": "0xffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "10468:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10468:23:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10441:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10441:51:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10441:51:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10512:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10523:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10508:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10508:18:89"
                                  },
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "10528:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10501:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10501:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10501:34:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint160_t_uint32_t_uint256__to_t_uint256_t_uint160_t_uint32_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10214:9:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "10225:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "10233:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "10241:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10249:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10260:4:89",
                            "type": ""
                          }
                        ],
                        "src": "10086:455:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10590:198:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10600:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10616:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10610:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10610:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "10600:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10628:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "10650:6:89"
                                  },
                                  {
                                    "name": "size",
                                    "nodeType": "YulIdentifier",
                                    "src": "10658:4:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10646:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10646:17:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "10632:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10738:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "10740:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10740:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10740:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "10681:10:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10693:18:89",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10678:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10678:34:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "10717:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "10729:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10714:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10714:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "10675:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10675:62:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10672:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10767:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "10771:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10760:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10760:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10760:22:89"
                            }
                          ]
                        },
                        "name": "allocateMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "10570:4:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "10579:6:89",
                            "type": ""
                          }
                        ],
                        "src": "10546:242:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10852:181:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10896:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "10898:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10898:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10898:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10868:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10876:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10865:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10865:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10862:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10918:109:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "10938:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10946:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10934:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10934:17:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10953:66:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "10930:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10930:90:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11022:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10926:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10926:101:89"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "10918:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "10832:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "10843:4:89",
                            "type": ""
                          }
                        ],
                        "src": "10793:240:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11091:205:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11101:10:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11110:1:89",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "11105:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11170:63:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "11195:3:89"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "11200:1:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "11191:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11191:11:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11214:3:89"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11219:1:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "11210:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "11210:11:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "11204:5:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11204:18:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11184:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11184:39:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11184:39:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "11131:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "11134:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11128:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11128:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "11142:19:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "11144:15:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "11153:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11156:2:89",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "11149:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11149:10:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "11144:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "11124:3:89",
                                "statements": []
                              },
                              "src": "11120:113:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11259:31:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "11272:3:89"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "11277:6:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "11268:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11268:16:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11286:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11261:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11261:27:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11261:27:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "11248:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "11251:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11245:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11245:13:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11242:2:89"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "11069:3:89",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "11074:3:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "11079:6:89",
                            "type": ""
                          }
                        ],
                        "src": "11038:258:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11348:109:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11435:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11444:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11447:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11437:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11437:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11437:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "11371:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "11382:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "11389:42:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "11378:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11378:54:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "11368:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11368:65:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "11361:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11361:73:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11358:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "11337:5:89",
                            "type": ""
                          }
                        ],
                        "src": "11301:156:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := calldataload(offset)\n        let array_1 := allocateMemory(array_allocation_size_t_bytes(_1))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), array)\n        array := array_1\n    }\n    function abi_decode_t_int24_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, signextend(2, value))) { revert(0, 0) }\n    }\n    function abi_decode_t_uint160(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n    function abi_decode_t_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        value0 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_int256t_int256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_int256t_int256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        value2 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value0, value0) }\n        let _2 := mload(_1)\n        let array := allocateMemory(array_allocation_size_t_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(value0, value0) }\n        copy_memory_to_memory(add(_1, 32), add(array, 32), _2)\n        value0 := array\n    }\n    function abi_decode_tuple_t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(value0, value0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 160)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        mstore(memPtr, value)\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_t_address(value_1)\n        mstore(add(memPtr, 32), value_1)\n        mstore(add(memPtr, 64), calldataload(add(headStart, 64)))\n        let value_2 := calldataload(add(headStart, 96))\n        if iszero(eq(value_2, and(value_2, 0xffffff))) { revert(value0, value0) }\n        mstore(add(memPtr, 96), value_2)\n        mstore(add(memPtr, 128), abi_decode_t_uint160(add(headStart, 128)))\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_struct$_QuoteExactInputSingleClassicParams_$8734_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value0, value0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 96)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        mstore(memPtr, value)\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_t_address(value_1)\n        mstore(add(memPtr, 32), value_1)\n        mstore(add(memPtr, 64), calldataload(add(headStart, 64)))\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(value4, value4) }\n        let value := mload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := abi_decode_t_int24_fromMemory(add(headStart, 32))\n        value2 := abi_decode_t_uint16_fromMemory(add(headStart, 64))\n        value3 := abi_decode_t_uint16_fromMemory(add(headStart, 96))\n        value4 := abi_decode_t_uint16_fromMemory(add(headStart, 128))\n        let value_1 := mload(add(headStart, 160))\n        if iszero(eq(value_1, and(value_1, 0xff))) { revert(value5, value5) }\n        value5 := value_1\n        let value_2 := mload(add(headStart, 192))\n        if iszero(eq(value_2, iszero(iszero(value_2)))) { revert(value6, value6) }\n        value6 := value_2\n    }\n    function abi_decode_tuple_t_uint256t_uint160t_int24_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := mload(headStart)\n        let value := mload(add(headStart, 32))\n        validator_revert_t_address(value)\n        value1 := value\n        value2 := abi_decode_t_int24_fromMemory(add(headStart, 64))\n    }\n    function abi_encode_t_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000\n        mstore(pos, and(shl(96, value0), _1))\n        mstore(add(pos, 20), and(shl(232, value1), 0xffffff0000000000000000000000000000000000000000000000000000000000))\n        mstore(add(pos, 23), and(shl(96, value2), _1))\n        end := add(pos, 43)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), 160)\n        tail := abi_encode_t_bytes(value4, add(headStart, 160))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_t_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Unexpected error\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f7a55993d4eb382512b201c519dd56fdec259588ab4c60b5eb31e24ad5650add__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Exact output quote not supported\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_array$_t_uint160_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint256__to_t_uint256_t_array$_t_uint160_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 128)\n        mstore(headStart, value0)\n        let _1 := 32\n        mstore(add(headStart, _1), 128)\n        let pos := tail_1\n        let length := mload(value1)\n        mstore(tail_1, length)\n        pos := add(headStart, 160)\n        let srcPtr := add(value1, _1)\n        let i := tail\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        mstore(add(headStart, 64), sub(pos, headStart))\n        let pos_1 := pos\n        let length_1 := mload(value2)\n        mstore(pos, length_1)\n        pos_1 := add(pos, _1)\n        let srcPtr_1 := add(value2, _1)\n        let i_1 := tail\n        for { } lt(i_1, length_1) { i_1 := add(i_1, 1) }\n        {\n            mstore(pos_1, and(mload(srcPtr_1), 0xffffffff))\n            pos_1 := add(pos_1, _1)\n            srcPtr_1 := add(srcPtr_1, _1)\n        }\n        tail := pos_1\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_uint256_t_uint160_t_uint32_t_uint256__to_t_uint256_t_uint160_t_uint32_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), and(value2, 0xffffffff))\n        mstore(add(headStart, 96), value3)\n    }\n    function allocateMemory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, size)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_t_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { invalid() }\n        size := add(and(add(length, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function validator_revert_t_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "2013": [
                  {
                    "length": 32,
                    "start": 348
                  },
                  {
                    "length": 32,
                    "start": 1330
                  },
                  {
                    "length": 32,
                    "start": 2045
                  }
                ],
                "2017": [
                  {
                    "length": 32,
                    "start": 1294
                  }
                ],
                "9125": [
                  {
                    "length": 32,
                    "start": 754
                  },
                  {
                    "length": 32,
                    "start": 2372
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c80636f9fbc821161005b5780636f9fbc82146100d857806390793ea8146100f8578063c45a015514610100578063cdca1753146101085761007d565b806311c17848146100825780634f04a0db146100975780635bccbdf7146100b5575b600080fd5b610095610090366004611b7a565b61012b565b005b61009f6102f0565b6040516100ac9190611ea7565b60405180910390f35b6100c86100c3366004611c32565b610314565b6040516100ac9493929190612051565b6100eb6100e6366004611cbf565b6104ed565b6040516100ac9190611fa0565b61009f61050c565b61009f610530565b61011b610116366004611b14565b610554565b6040516100ac9493929190611fa9565b600083138061013a5750600082135b61014357600080fd5b6000806000610151846107a6565b9250925092506101837f00000000000000000000000000000000000000000000000000000000000000008484846107d7565b50600080600088136101c7578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610886000036101fb565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610876000035b91509150600061020c8686866107f6565b90506000808273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561025757600080fd5b505afa15801561026b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028f9190611d23565b50505050509150915084156102b557604051848152826020820152816040820152606081fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e790611f6b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff8082169084161092849261035292906107f6565b905060005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856103848c60400151610834565b60808d015173ffffffffffffffffffffffffffffffffffffffff16156103ae578c608001516103d4565b876103cd5773fffd8963efd1fc6a506488495d951d5263988d256103d4565b6401000276a45b8d600001518e606001518f602001516040516020016103f593929190611e41565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610424959493929190611ec8565b6040805180830381600087803b15801561043d57600080fd5b505af192505050801561048b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261048891810190611b57565b60015b6104e0573d8080156104b9576040519150601f19603f3d011682016040523d82523d6000602084013e6104be565b606091505b505a820394506104cf818487610866565b9750975097509750505050506104e6565b50505050505b9193509193565b600061050682604001518360000151846020015161093a565b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000606080600061056486610983565b67ffffffffffffffff8111801561057a57600080fd5b506040519080825280602002602001820160405280156105a4578160200160208202803683370190505b5092506105b086610983565b67ffffffffffffffff811180156105c657600080fd5b506040519080825280602002602001820160405280156105f0578160200160208202803683370190505b50915060005b60008060006106048a6107a6565b919450925090506280000081161561066c5761066560405180606001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018b8152506104ed565b9850610765565b6000806000806106e96040518060a001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610314565b9350935093509350828b89815181106106fe57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a898151811061074557fe5b63ffffffff90921660209283029190910190910152929b50505094909401935b6001909301926107748a6109b2565b15610789576107828a6109ba565b9950610795565b8897505050505061079d565b5050506105f6565b92959194509250565b600080806107b484826109ef565b92506107c1846014610aef565b90506107ce8460176109ef565b91509193909250565b60006107ed856107e8868686610bdf565b610c5c565b95945050505050565b600061082c7f0000000000000000000000000000000000000000000000000000000000000000610827868686610bdf565b610c8c565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061086257600080fd5b5090565b6000806000806000808773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156108b557600080fd5b505afa1580156108c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ed9190611d23565b5093965061090294508d9350610dc292505050565b9197509550905061092a73ffffffffffffffffffffffffffffffffffffffff89168383610e7a565b9350869250505093509350935093565b600080600061096a7f000000000000000000000000000000000000000000000000000000000000000086866114d2565b915091506109798683836115ba565b9695505050505050565b805160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec909101045b919050565b516042111590565b80516060906105069083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901611690565b600081826014011015610a6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015610ad657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015610b6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015610bd657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b610be7611a74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610c1f579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000610c688383610c8c565b90503373ffffffffffffffffffffffffffffffffffffffff82161461050657600080fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610cce57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b60008060008351606014610e5957604484511015610e0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e790611f34565b60048401935083806020019051810190610e269190611bc8565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e79190611f1a565b83806020019051810190610e6d9190611dba565b9250925092509193909250565b60008060008060008060008060088b73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ece57600080fd5b505afa158015610ee2573d6000803e3d6000fd5b505050506040513d6020811015610ef857600080fd5b5051600290810b908c900b81610f0a57fe5b0560020b901d905060006101008c73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f5d57600080fd5b505afa158015610f71573d6000803e3d6000fd5b505050506040513d6020811015610f8757600080fd5b5051600290810b908d900b81610f9957fe5b0560020b81610fa457fe5b079050600060088d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d602081101561101b57600080fd5b5051600290810b908d900b8161102d57fe5b0560020b901d905060006101008e73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561108057600080fd5b505afa158015611094573d6000803e3d6000fd5b505050506040513d60208110156110aa57600080fd5b5051600290810b908e900b816110bc57fe5b0560020b816110c757fe5b07905060008160ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296856040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561112857600080fd5b505afa15801561113c573d6000803e3d6000fd5b505050506040513d602081101561115257600080fd5b5051161180156111e557508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111a357600080fd5b505afa1580156111b7573d6000803e3d6000fd5b505050506040513d60208110156111cd57600080fd5b5051600290810b908d900b816111df57fe5b0760020b155b80156111f657508b60020b8d60020b135b945060008360ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296876040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561125657600080fd5b505afa15801561126a573d6000803e3d6000fd5b505050506040513d602081101561128057600080fd5b50511611801561131357508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112d157600080fd5b505afa1580156112e5573d6000803e3d6000fd5b505050506040513d60208110156112fb57600080fd5b5051600290810b908e900b8161130d57fe5b0760020b155b801561132457508b60020b8d60020b125b95508160010b8460010b128061135057508160010b8460010b14801561135057508060ff168360ff1611155b1561136657839950829750819850809650611373565b8199508097508398508296505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff87161b9150505b8560010b8760010b136114aa578560010b8760010b14156113e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff858103161c165b6000818c73ffffffffffffffffffffffffffffffffffffffff16635339c2968a6040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561143b57600080fd5b505afa15801561144f573d6000803e3d6000fd5b505050506040513d602081101561146557600080fd5b505116905061147381611877565b61ffff16989098019750506001909501947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61139f565b81156114b7576001880397505b82156114c4576001880397505b505050505050509392505050565b60008060006114e185856118b0565b5090506000806114f2888888611955565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561153757600080fd5b505afa15801561154b573d6000803e3d6000fd5b505050506040513d606081101561156157600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146115a85780826115ab565b81815b90999098509650505050505050565b600080841161162a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b60008311801561163a5750600082115b61164357600080fd5b6000611651856103e5611a40565b9050600061165f8285611a40565b9050600061167983611673886103e8611a40565b90611a64565b905080828161168457fe5b04979650505050505050565b60608182601f01101561170457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561177557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b818301845110156117e757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015611806576040519150600082526020820160405261186e565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561183f578051835260209283019201611827565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000805b8215610506577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83019092169160010161187b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118ec57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610611926578284611929565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661194e57600080fd5b9250929050565b600080600061196485856118b0565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6000821580611a5b57505081810281838281611a5857fe5b04145b61050657600080fd5b8082018281101561050657600080fd5b604080516060810182526000808252602082018190529181019190915290565b600082601f830112611aa4578081fd5b8135611ab7611ab2826120ac565b612088565b818152846020838601011115611acb578283fd5b816020850160208301379081016020019190915292915050565b8051600281900b81146109ad57600080fd5b80356109ad8161211c565b805161ffff811681146109ad57600080fd5b60008060408385031215611b26578182fd5b823567ffffffffffffffff811115611b3c578283fd5b611b4885828601611a94565b95602094909401359450505050565b60008060408385031215611b69578182fd5b505080516020909101519092909150565b600080600060608486031215611b8e578081fd5b8335925060208401359150604084013567ffffffffffffffff811115611bb2578182fd5b611bbe86828701611a94565b9150509250925092565b600060208284031215611bd9578081fd5b815167ffffffffffffffff811115611bef578182fd5b8201601f81018413611bff578182fd5b8051611c0d611ab2826120ac565b818152856020838501011115611c21578384fd5b6107ed8260208301602086016120ec565b600060a08284031215611c43578081fd5b60405160a0810181811067ffffffffffffffff82111715611c6057fe5b6040528235611c6e8161211c565b81526020830135611c7e8161211c565b602082015260408381013590820152606083013562ffffff81168114611ca2578283fd5b6060820152611cb360808401611af7565b60808201529392505050565b600060608284031215611cd0578081fd5b6040516060810181811067ffffffffffffffff82111715611ced57fe5b6040528235611cfb8161211c565b81526020830135611d0b8161211c565b60208201526040928301359281019290925250919050565b600080600080600080600060e0888a031215611d3d578283fd5b8751611d488161211c565b9650611d5660208901611ae5565b9550611d6460408901611b02565b9450611d7260608901611b02565b9350611d8060808901611b02565b925060a088015160ff81168114611d95578283fd5b60c08901519092508015158114611daa578182fd5b8091505092959891949750929550565b600080600060608486031215611dce578081fd5b835192506020840151611de08161211c565b9150611dee60408501611ae5565b90509250925092565b60008151808452611e0f8160208601602086016120ec565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152611f0f60a0830184611df7565b979650505050505050565b600060208252611f2d6020830184611df7565b9392505050565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b6020808252818101527f4578616374206f75747075742071756f7465206e6f7420737570706f72746564604082015260600190565b90815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611fff57845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611fcd565b505084810360408601528651808252908201925081870190845b8181101561203b57825163ffffffff1685529383019391830191600101612019565b5050505060609290920192909252949350505050565b93845273ffffffffffffffffffffffffffffffffffffffff92909216602084015263ffffffff166040830152606082015260800190565b60405181810167ffffffffffffffff811182821017156120a457fe5b604052919050565b600067ffffffffffffffff8211156120c057fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156121075781810151838201526020016120ef565b83811115612116576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461213e57600080fd5b5056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6F9FBC82 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x6F9FBC82 EQ PUSH2 0xD8 JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0xF8 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x100 JUMPI DUP1 PUSH4 0xCDCA1753 EQ PUSH2 0x108 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x11C17848 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x4F04A0DB EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x5BCCBDF7 EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B7A JUMP JUMPDEST PUSH2 0x12B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0x2F0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP2 SWAP1 PUSH2 0x1EA7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC8 PUSH2 0xC3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C32 JUMP JUMPDEST PUSH2 0x314 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2051 JUMP JUMPDEST PUSH2 0xEB PUSH2 0xE6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CBF JUMP JUMPDEST PUSH2 0x4ED JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP2 SWAP1 PUSH2 0x1FA0 JUMP JUMPDEST PUSH2 0x9F PUSH2 0x50C JUMP JUMPDEST PUSH2 0x9F PUSH2 0x530 JUMP JUMPDEST PUSH2 0x11B PUSH2 0x116 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B14 JUMP JUMPDEST PUSH2 0x554 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1FA9 JUMP JUMPDEST PUSH1 0x0 DUP4 SGT DUP1 PUSH2 0x13A JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST PUSH2 0x143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x151 DUP5 PUSH2 0x7A6 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x183 PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x7D7 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 SGT PUSH2 0x1C7 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP9 PUSH1 0x0 SUB PUSH2 0x1FB JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP8 PUSH1 0x0 SUB JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x20C DUP7 DUP7 DUP7 PUSH2 0x7F6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28F SWAP2 SWAP1 PUSH2 0x1D23 JUMP JUMPDEST POP POP POP POP POP SWAP2 POP SWAP2 POP DUP5 ISZERO PUSH2 0x2B5 JUMPI PUSH1 0x40 MLOAD DUP5 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E7 SWAP1 PUSH2 0x1F6B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP2 MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP1 DUP5 AND LT SWAP3 DUP5 SWAP3 PUSH2 0x352 SWAP3 SWAP1 PUSH2 0x7F6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 GAS SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP6 PUSH2 0x384 DUP13 PUSH1 0x40 ADD MLOAD PUSH2 0x834 JUMP JUMPDEST PUSH1 0x80 DUP14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x3AE JUMPI DUP13 PUSH1 0x80 ADD MLOAD PUSH2 0x3D4 JUMP JUMPDEST DUP8 PUSH2 0x3CD JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x3D4 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x0 ADD MLOAD DUP15 PUSH1 0x60 ADD MLOAD DUP16 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3F5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E41 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x424 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1EC8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x43D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x48B JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x488 SWAP2 DUP2 ADD SWAP1 PUSH2 0x1B57 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x4E0 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x4B9 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4BE JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP GAS DUP3 SUB SWAP5 POP PUSH2 0x4CF DUP2 DUP5 DUP8 PUSH2 0x866 JUMP JUMPDEST SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP POP POP POP POP PUSH2 0x4E6 JUMP JUMPDEST POP POP POP POP POP JUMPDEST SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x506 DUP3 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x93A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x564 DUP7 PUSH2 0x983 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x57A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5A4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0x5B0 DUP7 PUSH2 0x983 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x5C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5F0 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x604 DUP11 PUSH2 0x7A6 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH3 0x800000 DUP2 AND ISZERO PUSH2 0x66C JUMPI PUSH2 0x665 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE POP PUSH2 0x4ED JUMP JUMPDEST SWAP9 POP PUSH2 0x765 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x6E9 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH3 0xFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x314 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP3 DUP12 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x6FE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x745 JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP12 POP POP POP SWAP5 SWAP1 SWAP5 ADD SWAP4 JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x774 DUP11 PUSH2 0x9B2 JUMP JUMPDEST ISZERO PUSH2 0x789 JUMPI PUSH2 0x782 DUP11 PUSH2 0x9BA JUMP JUMPDEST SWAP10 POP PUSH2 0x795 JUMP JUMPDEST DUP9 SWAP8 POP POP POP POP POP PUSH2 0x79D JUMP JUMPDEST POP POP POP PUSH2 0x5F6 JUMP JUMPDEST SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x7B4 DUP5 DUP3 PUSH2 0x9EF JUMP JUMPDEST SWAP3 POP PUSH2 0x7C1 DUP5 PUSH1 0x14 PUSH2 0xAEF JUMP JUMPDEST SWAP1 POP PUSH2 0x7CE DUP5 PUSH1 0x17 PUSH2 0x9EF JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7ED DUP6 PUSH2 0x7E8 DUP7 DUP7 DUP7 PUSH2 0xBDF JUMP JUMPDEST PUSH2 0xC5C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x82C PUSH32 0x0 PUSH2 0x827 DUP7 DUP7 DUP7 PUSH2 0xBDF JUMP JUMPDEST PUSH2 0xC8C JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x862 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8ED SWAP2 SWAP1 PUSH2 0x1D23 JUMP JUMPDEST POP SWAP4 SWAP7 POP PUSH2 0x902 SWAP5 POP DUP14 SWAP4 POP PUSH2 0xDC2 SWAP3 POP POP POP JUMP JUMPDEST SWAP2 SWAP8 POP SWAP6 POP SWAP1 POP PUSH2 0x92A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP4 DUP4 PUSH2 0xE7A JUMP JUMPDEST SWAP4 POP DUP7 SWAP3 POP POP POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x96A PUSH32 0x0 DUP7 DUP7 PUSH2 0x14D2 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x979 DUP7 DUP4 DUP4 PUSH2 0x15BA JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x17 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC SWAP1 SWAP2 ADD DIV JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x506 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x1690 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0xA63 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0xB63 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0xBD6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0xBE7 PUSH2 0x1A74 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0xC1F JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC68 DUP4 DUP4 PUSH2 0xC8C JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xCCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x203C8EC649B23B7FAF9B73CCADFB1A67AF52A097119C82801F4947EC5DEB6C04 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x60 EQ PUSH2 0xE59 JUMPI PUSH1 0x44 DUP5 MLOAD LT ISZERO PUSH2 0xE0C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E7 SWAP1 PUSH2 0x1F34 JUMP JUMPDEST PUSH1 0x4 DUP5 ADD SWAP4 POP DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xE26 SWAP2 SWAP1 PUSH2 0x1BC8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E7 SWAP2 SWAP1 PUSH2 0x1F1A JUMP JUMPDEST DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xE6D SWAP2 SWAP1 PUSH2 0x1DBA JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x8 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xECE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEE2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP13 SWAP1 SIGNEXTEND DUP2 PUSH2 0xF0A JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0xF99 JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0xFA4 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 PUSH1 0x8 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1005 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x101B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x102D JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP15 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1080 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1094 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x10BC JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0x10C7 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1128 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x113C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x11E5 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11B7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x11DF JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x11F6 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SGT JUMPDEST SWAP5 POP PUSH1 0x0 DUP4 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x126A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1280 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x1313 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x130D JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1324 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SLT JUMPDEST SWAP6 POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND SLT DUP1 PUSH2 0x1350 JUMPI POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND EQ DUP1 ISZERO PUSH2 0x1350 JUMPI POP DUP1 PUSH1 0xFF AND DUP4 PUSH1 0xFF AND GT ISZERO JUMPDEST ISZERO PUSH2 0x1366 JUMPI DUP4 SWAP10 POP DUP3 SWAP8 POP DUP2 SWAP9 POP DUP1 SWAP7 POP PUSH2 0x1373 JUMP JUMPDEST DUP2 SWAP10 POP DUP1 SWAP8 POP DUP4 SWAP9 POP DUP3 SWAP7 POP JUMPDEST POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP8 AND SHL SWAP2 POP POP JUMPDEST DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND SGT PUSH2 0x14AA JUMPI DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND EQ ISZERO PUSH2 0x13E4 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP6 DUP2 SUB AND SHR AND JUMPDEST PUSH1 0x0 DUP2 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x143B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x144F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND SWAP1 POP PUSH2 0x1473 DUP2 PUSH2 0x1877 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP9 SWAP1 SWAP9 ADD SWAP8 POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x139F JUMP JUMPDEST DUP2 ISZERO PUSH2 0x14B7 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST DUP3 ISZERO PUSH2 0x14C4 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x14E1 DUP6 DUP6 PUSH2 0x18B0 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x14F2 DUP9 DUP9 DUP9 PUSH2 0x1955 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1537 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x154B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1561 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x15A8 JUMPI DUP1 DUP3 PUSH2 0x15AB JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x162A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F494E5055545F414D4F554E5400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x163A JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x1643 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1651 DUP6 PUSH2 0x3E5 PUSH2 0x1A40 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x165F DUP3 DUP6 PUSH2 0x1A40 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1679 DUP4 PUSH2 0x1673 DUP9 PUSH2 0x3E8 PUSH2 0x1A40 JUMP JUMPDEST SWAP1 PUSH2 0x1A64 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0x1684 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0x1704 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0x1775 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0x17E7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x1806 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x186E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x183F JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x1827 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 ISZERO PUSH2 0x506 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD SWAP1 SWAP3 AND SWAP2 PUSH1 0x1 ADD PUSH2 0x187B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x18EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x1926 JUMPI DUP3 DUP5 PUSH2 0x1929 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x194E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1964 DUP6 DUP6 PUSH2 0x18B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 DUP6 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP6 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP11 SWAP1 SWAP5 SHL SWAP1 SWAP4 AND PUSH1 0x69 DUP5 ADD MSTORE PUSH1 0x7D DUP4 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH32 0x400E13FC6C59224F20228F0C0561806856AC34B7318F337F8012707C880C351F PUSH1 0x9D DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP3 ADD SWAP1 SWAP8 MSTORE DUP1 MLOAD SWAP7 ADD SWAP6 SWAP1 SWAP6 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x1A5B JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x1A58 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1AA4 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1AB7 PUSH2 0x1AB2 DUP3 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x2088 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x1ACB JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x9AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x9AD DUP2 PUSH2 0x211C JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x9AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B26 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B3C JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x1B48 DUP6 DUP3 DUP7 ADD PUSH2 0x1A94 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B69 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1B8E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BB2 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1BBE DUP7 DUP3 DUP8 ADD PUSH2 0x1A94 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BD9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BEF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x1BFF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x1C0D PUSH2 0x1AB2 DUP3 PUSH2 0x20AC JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x1C21 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x7ED DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20EC JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C43 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1C60 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD PUSH2 0x1C6E DUP2 PUSH2 0x211C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1C7E DUP2 PUSH2 0x211C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1CA2 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1CB3 PUSH1 0x80 DUP5 ADD PUSH2 0x1AF7 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CD0 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1CED JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD PUSH2 0x1CFB DUP2 PUSH2 0x211C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1D0B DUP2 PUSH2 0x211C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 SWAP3 DUP4 ADD CALLDATALOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1D3D JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1D48 DUP2 PUSH2 0x211C JUMP JUMPDEST SWAP7 POP PUSH2 0x1D56 PUSH1 0x20 DUP10 ADD PUSH2 0x1AE5 JUMP JUMPDEST SWAP6 POP PUSH2 0x1D64 PUSH1 0x40 DUP10 ADD PUSH2 0x1B02 JUMP JUMPDEST SWAP5 POP PUSH2 0x1D72 PUSH1 0x60 DUP10 ADD PUSH2 0x1B02 JUMP JUMPDEST SWAP4 POP PUSH2 0x1D80 PUSH1 0x80 DUP10 ADD PUSH2 0x1B02 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D95 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0xC0 DUP10 ADD MLOAD SWAP1 SWAP3 POP DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1DAA JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1DCE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x1DE0 DUP2 PUSH2 0x211C JUMP JUMPDEST SWAP2 POP PUSH2 0x1DEE PUSH1 0x40 DUP6 ADD PUSH2 0x1AE5 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1E0F DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20EC JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x1F0F PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x1DF7 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1F2D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1DF7 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4578616374206F75747075742071756F7465206E6F7420737570706F72746564 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD DUP7 DUP4 MSTORE PUSH1 0x20 PUSH1 0x80 DUP2 DUP6 ADD MSTORE DUP2 DUP8 MLOAD DUP1 DUP5 MSTORE PUSH1 0xA0 DUP7 ADD SWAP2 POP DUP3 DUP10 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1FFF JUMPI DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1FCD JUMP JUMPDEST POP POP DUP5 DUP2 SUB PUSH1 0x40 DUP7 ADD MSTORE DUP7 MLOAD DUP1 DUP3 MSTORE SWAP1 DUP3 ADD SWAP3 POP DUP2 DUP8 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x203B JUMPI DUP3 MLOAD PUSH4 0xFFFFFFFF AND DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2019 JUMP JUMPDEST POP POP POP POP PUSH1 0x60 SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x20A4 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x20C0 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2107 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20EF JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2116 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x213E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "1466:7915:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3061:1220;;;;;;:::i;:::-;;:::i;:::-;;1673:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5615:1108;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;6793:268::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;420:38:16:-;;;:::i;328:41::-;;;:::i;7296:2083:75:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;3061:1220::-;3237:1;3222:12;:16;:36;;;;3257:1;3242:12;:16;3222:36;3214:45;;;;;;3333:15;3350:16;3368:10;3382:22;:4;:20;:22::i;:::-;3332:72;;;;;;3414:66;3448:7;3457;3466:8;3476:3;3414:33;:66::i;:::-;;3492:17;3511:22;3564:1;3549:12;:16;:142;;3659:7;3648:18;;:8;:18;;;3677:12;3676:13;;3549:142;;;3595:8;3585:18;;:7;:18;;;3614:12;3613:13;;3549:142;3491:200;;;;3702:17;3722:31;3730:7;3739:8;3749:3;3722:7;:31::i;:::-;3702:51;;3764:27;3793:15;3822:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3763:71;;;;;;;;;3849:12;3845:430;;;3921:4;3915:11;3955:14;3950:3;3943:27;4010:19;4003:4;3998:3;3994:14;3987:43;4070:9;4063:4;4058:3;4054:14;4047:33;4109:4;4104:3;4097:17;3886:242;4222:42;;;;;;;;;;:::i;:::-;;;;;;;;1673:39;;;:::o;5615:1108::-;5948:15;;;;5931:14;;6034:10;;;;5755:17;;;;;;;;5931:32;;;;;;;;;5755:17;;5993:52;;5948:15;5993:7;:52::i;:::-;5973:72;;6056:17;6076:9;6056:29;;6111:4;:9;;;6146:4;6219:10;6247:26;:6;:15;;;:24;:26::i;:::-;6291:24;;;;:29;;;:171;;6438:6;:24;;;6291:171;;;6344:10;:70;;6387:27;6344:70;;;6357:27;6344:70;6497:6;:14;;;6513:6;:10;;;6525:6;:15;;;6480:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6111:444;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6111:444:75;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6095:622;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6635:9;6623;:21;6609:35;;6665:41;6680:6;6688:4;6694:11;6665:14;:41::i;:::-;6658:48;;;;;;;;;;;;;;6095:622;;;5615:1108;;;;;;;;;:::o;6793:268::-;6943:17;6988:66;7005:6;:15;;;7022:6;:14;;;7038:6;:15;;;6988:16;:66::i;:::-;6976:78;6793:268;-1:-1:-1;;6793:268:75:o;420:38:16:-;;;:::o;328:41::-;;;:::o;7296:2083:75:-;7420:17;7451:40;7505:45;7564:25;7654:15;:4;:13;:15::i;:::-;7640:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7640:30:75;;7614:56;;7725:15;:4;:13;:15::i;:::-;7712:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7712:29:75;;7680:61;;7752:9;7775:1598;7803:15;7820:16;7838:10;7852:22;:4;:20;:22::i;:::-;7802:72;;-1:-1:-1;7802:72:75;-1:-1:-1;7802:72:75;-1:-1:-1;1979:7:75;7893:17;;:22;7889:1171;;7946:162;7996:94;;;;;;;;8041:7;7996:94;;;;;;8060:8;7996:94;;;;;;8080:8;7996:94;;;7946:28;:162::i;:::-;7935:173;;7889:1171;;;8253:18;8293:26;8341:31;8394:20;8455:358;8504:287;;;;;;;;8573:7;8504:287;;;;;;8620:8;8504:287;;;;;;8706:8;8504:287;;;;8663:3;8504:287;;;;;;8763:1;8504:287;;;;;8455:23;:358::i;:::-;8231:582;;;;;;;;8860:18;8831:23;8855:1;8831:26;;;;;;;;;;;;;:47;;;;;;;;;;;8931:24;8896:29;8926:1;8896:32;;;;;;;;:59;;;;:32;;;;;;;;;;;:59;9035:10;;-1:-1:-1;;;8973:33:75;;;;;7889:1171;9073:3;;;;;9151:23;:4;:21;:23::i;:::-;9147:216;;;9201:16;:4;:14;:16::i;:::-;9194:23;;9147:216;;;9264:8;9256:92;;;;;;;;9147:216;7775:1598;;;;;7296:2083;;;;;;;;:::o;1779:240:34:-;1846:14;;;1909:17;:4;1846:14;1909;:17::i;:::-;1900:26;-1:-1:-1;1942:24:34;:4;304:2;1942:13;:24::i;:::-;1936:30;-1:-1:-1;1985:27:34;:4;507:20;1985:14;:27::i;:::-;1976:36;;1779:240;;;;;:::o;742:257:32:-;888:17;924:68;939:7;948:43;971:6;979;987:3;948:22;:43::i;:::-;924:14;:68::i;:::-;917:75;742:257;-1:-1:-1;;;;;742:257:32:o;2323:245:75:-;2436:12;2480:80;2507:7;2516:43;2539:6;2547;2555:3;2516:22;:43::i;:::-;2480:26;:80::i;:::-;2460:101;2323:245;-1:-1:-1;;;;2323:245:75:o;924:123:11:-;976:8;1008;1004:1;:12;996:21;;;;;;-1:-1:-1;1038:1:11;924:123::o;4884:666:75:-;5058:14;5086:25;5125:30;5169:7;5201:16;5227:15;5279:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5252:39:75;;-1:-1:-1;5342:25:75;;-1:-1:-1;5360:6:75;;-1:-1:-1;5342:17:75;;-1:-1:-1;;;5342:25:75:i;:::-;5301:66;;-1:-1:-1;5301:66:75;-1:-1:-1;5301:66:75;-1:-1:-1;5404:56:75;:33;;;5438:10;5301:66;5404:33;:56::i;:::-;5378:82;-1:-1:-1;5531:11:75;;-1:-1:-1;;;4884:666:75;;;;;;;:::o;2667:347::-;2798:7;2818:17;2837:18;2859:66;2891:14;2907:7;2916:8;2859:31;:66::i;:::-;2817:108;;;;2942:65;2975:8;2985:9;2996:10;2942:32;:65::i;:::-;2935:72;2667:347;-1:-1:-1;;;;;;2667:347:75:o;1282:235:34:-;1471:11;;507:20;1471:23;;;;1470:39;1282:235;;;;:::o;992:138::-;1083:11;777:24;-1:-1:-1;1083:40:34;;992:138::o;2561:149::-;2677:11;;2622:12;;2653:50;;2677:4;;507:20;;2677:25;;2653:10;:50::i;3214:416:31:-;3293:7;3335:6;3320;3329:2;3320:11;:21;;3312:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3399:6;3408:2;3399:11;3382:6;:13;:28;;3374:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3524:30:31;3540:4;3524:30;3518:37;3557:27;3514:71;;;3214:416::o;3636:365::-;3714:6;3754;3740;3749:1;3740:10;:20;;3732:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3817:6;3826:1;3817:10;3800:6;:13;:27;;3792:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3929:29:31;3945:3;3929:29;3923:36;;3636:365::o;784:244:35:-;871:14;;:::i;:::-;910:6;901:15;;:6;:15;;;897:56;;;938:6;;946;897:56;-1:-1:-1;970:51:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;784:244::o;1248:269:32:-;1370:17;1419:44;1446:7;1455;1419:26;:44::i;:::-;1399:65;-1:-1:-1;1482:10:32;:27;;;;1474:36;;;;;1276:512:35;1360:12;1405:3;:10;;;1392:23;;:3;:10;;;:23;;;1384:32;;;;;;-1:-1:-1;1639:10:35;;1651;;;;;1663:7;;;;;1628:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1618:54;;;;;;1510:229;;;;;;;;;;;;;;;;;;;;;241:66;1510:229;;;;;;;;;;;;;;;;;;;;;;;;;1479:278;;;;;;1276:512::o;4361:517:75:-;4468:14;4496:25;4535:15;4579:6;:13;4596:4;4579:21;4575:235;;4636:4;4620:6;:13;:20;4616:52;;;4642:26;;;;;;;;;;:::i;4616:52::-;4731:4;4723:6;4719:17;4709:27;;4781:6;4770:28;;;;;;;;;;;;:::i;:::-;4763:36;;;;;;;;;;;:::i;4575:235::-;4837:6;4826:45;;;;;;;;;;;;:::i;:::-;4819:52;;;;;;4361:517;;;;;:::o;640:3303:81:-;785:30;827:18;855:19;884:17;911:18;939:26;975:25;1128:13;1187:1;1164:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1164:18:81;1151:31;;;;;;;;;;;;;;1150:38;;;;1128:61;;1203:12;1260:3;1238:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1238:18:81;1225:31;;;;;;;;;;;;;;1224:39;;;;;;;;1203:61;;1279:18;1342:1;1319:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1319:18:81;1307:30;;;;;;;;;;;;;;1306:37;;;;1279:65;;1358:17;1419:3;1397:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1397:18:81;1385:30;;;;;;;;;;;;;;1384:38;;;;;;;;1358:65;;1898:1;1882:11;1877:16;;:1;:16;;1844:4;:15;;;1860:12;1844:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1844:29:81;:50;1843:56;1842:117;;;;;1934:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1934:18:81;1922:30;;;;;;;;;;;;;;1921:37;;;1842:117;:161;;;;;1993:9;1980:22;;:10;:22;;;1842:161;1803:200;;2313:1;2302:6;2297:11;;:1;:11;;2269:4;:15;;;2285:7;2269:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2269:24:81;:40;2268:46;2267:108;;;;;2350:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2350:18:81;2337:31;;;;;;;;;;;;;;2336:38;;;2267:108;:152;;;;;2409:9;2396:22;;:10;:22;;;2267:152;2227:192;;2448:12;2438:22;;:7;:22;;;:76;;;;2476:12;2465:23;;:7;:23;;;:48;;;;;2502:11;2492:21;;:6;:21;;;;2465:48;2434:454;;;2549:7;2534:22;;2588:6;2574:20;;2628:12;2612:28;;2673:11;2658:26;;2434:454;;;2738:12;2723:27;;2782:11;2768:25;;2827:7;2811:23;;2867:6;2852:21;;2434:454;-1:-1:-1;;3102:17:81;:32;;;;;-1:-1:-1;;3144:573:81;3167:13;3151:29;;:12;:29;;;3144:573;;3330:13;3314:29;;:12;:29;;;3310:125;;;3378:17;3400:3;:18;;;3378:41;;3370:50;3310:125;3449:14;3498:4;3466;:15;;;3482:12;3466:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3466:29:81;:36;;-1:-1:-1;3543:20:81;3466:36;3543:12;:20::i;:::-;3516:47;;;;;;;-1:-1:-1;;3577:14:81;;;;;3689:17;3144:573;;;3731:20;3727:79;;;3794:1;3767:28;;;;3727:79;3820:21;3816:80;;;3884:1;3857:28;;;;3816:80;3906:30;;;;;;;640:3303;;;;;:::o;1438:427:79:-;1561:16;1579;1608:14;1628:26;1639:6;1647;1628:10;:26::i;:::-;1607:47;;;1665:16;1683;1716:32;1724:7;1733:6;1741;1716:7;:32::i;:::-;1705:56;;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1705:58:79;;;;;;;1664:99;;;;;-1:-1:-1;1664:99:79;;-1:-1:-1;1796:16:79;;;;;;;;:62;;1839:8;1849;1796:62;;;1816:8;1826;1796:62;1773:85;;;;-1:-1:-1;1438:427:79;-1:-1:-1;;;;;;;1438:427:79:o;1984:499::-;2116:17;2164:1;2153:8;:12;2145:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2225:1;2213:9;:13;:31;;;;;2243:1;2230:10;:14;2213:31;2205:40;;;;;;2255:23;2281:17;:8;2294:3;2281:12;:17::i;:::-;2255:43;-1:-1:-1;2308:17:79;2328:31;2255:43;2348:10;2328:19;:31::i;:::-;2308:51;-1:-1:-1;2369:19:79;2391:40;2415:15;2391:19;:9;2405:4;2391:13;:19::i;:::-;:23;;:40::i;:::-;2369:62;;2465:11;2453:9;:23;;;;;;;1984:499;-1:-1:-1;;;;;;;1984:499:79:o;399:2809:31:-;491:12;539:7;523;533:2;523:12;:23;;515:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;603:6;592:7;583:6;:16;:26;;575:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;672:7;663:6;:16;646:6;:13;:33;;638:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;712:22;775:15;;803:1967;;;;2911:4;2905:11;2892:24;;3097:1;3086:9;3079:20;3145:4;3134:9;3130:20;3124:4;3117:34;768:2397;;803:1967;985:4;979:11;966:24;;1644:2;1635:7;1631:16;2026:9;2019:17;2013:4;2009:28;1997:9;1986;1982:25;1978:60;2074:7;2070:2;2066:16;2326:6;2312:9;2305:17;2299:4;2295:28;2283:9;2275:6;2271:22;2267:57;2263:70;2100:425;2359:3;2355:2;2352:11;2100:425;;;2497:9;;2486:21;;2400:4;2392:13;;;;2432;2100:425;;;-1:-1:-1;;2543:26:31;;;2751:2;2734:11;2747:7;2730:25;2724:4;2717:39;-1:-1:-1;768:2397:31;-1:-1:-1;3192:9:31;399:2809;-1:-1:-1;;;;399:2809:31:o;3949:197:81:-;4004:6;;4047:72;4054:6;;4047:72;;4102:5;;;4096:12;;;;4076:6;;4047:72;;391:270:79;466:14;482;526:6;516:16;;:6;:16;;;;508:25;;;;;;571:6;562:15;;:6;:15;;;:53;;600:6;608;562:53;;;581:6;589;562:53;543:72;;-1:-1:-1;543:72:79;-1:-1:-1;633:20:79;;;625:29;;;;;;391:270;;;;;:::o;750:633::-;869:12;894:14;910;928:26;939:6;947;928:10;:26::i;:::-;1166:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:43;;;;;;1048:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1017:335;;;;;;;;;750:633;-1:-1:-1;;;;;750:633:79:o;986:125:10:-;1044:9;1073:6;;;:30;;-1:-1:-1;;1088:5:10;;;1102:1;1097;1088:5;1097:1;1083:15;;;;;:20;1073:30;1065:39;;;;;435:111;527:5;;;522:16;;;;514:25;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:485:89:-;;111:3;104:4;96:6;92:17;88:27;78:2;;133:5;126;119:20;78:2;173:6;160:20;204:49;219:33;249:2;219:33;:::i;:::-;204:49;:::i;:::-;278:2;269:7;262:19;324:3;317:4;312:2;304:6;300:15;296:26;293:35;290:2;;;345:5;338;331:20;290:2;414;407:4;399:6;395:17;388:4;379:7;375:18;362:55;437:16;;;455:4;433:27;426:42;;;;441:7;68:431;-1:-1:-1;;68:431:89:o;504:166::-;583:13;;636:1;625:20;;;615:31;;605:2;;660:1;657;650:12;675:138;745:20;;774:33;745:20;774:33;:::i;818:165::-;898:13;;951:6;940:18;;930:29;;920:2;;973:1;970;963:12;988:410;;;1126:2;1114:9;1105:7;1101:23;1097:32;1094:2;;;1147:6;1139;1132:22;1094:2;1192:9;1179:23;1225:18;1217:6;1214:30;1211:2;;;1262:6;1254;1247:22;1211:2;1290:51;1333:7;1324:6;1313:9;1309:22;1290:51;:::i;:::-;1280:61;1388:2;1373:18;;;;1360:32;;-1:-1:-1;;;;1084:314:89:o;1403:253::-;;;1541:2;1529:9;1520:7;1516:23;1512:32;1509:2;;;1562:6;1554;1547:22;1509:2;-1:-1:-1;;1590:16:89;;1646:2;1631:18;;;1625:25;1590:16;;1625:25;;-1:-1:-1;1499:157:89:o;1661:476::-;;;;1814:2;1802:9;1793:7;1789:23;1785:32;1782:2;;;1835:6;1827;1820:22;1782:2;1876:9;1863:23;1853:33;;1933:2;1922:9;1918:18;1905:32;1895:42;;1988:2;1977:9;1973:18;1960:32;2015:18;2007:6;2004:30;2001:2;;;2052:6;2044;2037:22;2001:2;2080:51;2123:7;2114:6;2103:9;2099:22;2080:51;:::i;:::-;2070:61;;;1772:365;;;;;:::o;2142:676::-;;2275:2;2263:9;2254:7;2250:23;2246:32;2243:2;;;2296:6;2288;2281:22;2243:2;2334:9;2328:16;2367:18;2359:6;2356:30;2353:2;;;2404:6;2396;2389:22;2353:2;2432:22;;2485:4;2477:13;;2473:27;-1:-1:-1;2463:2:89;;2519:6;2511;2504:22;2463:2;2553;2547:9;2578:49;2593:33;2623:2;2593:33;:::i;2578:49::-;2650:2;2643:5;2636:17;2690:7;2685:2;2680;2676;2672:11;2668:20;2665:33;2662:2;;;2716:6;2708;2701:22;2662:2;2734:54;2785:2;2780;2773:5;2769:14;2764:2;2760;2756:11;2734:54;:::i;2823:994::-;;2982:3;2970:9;2961:7;2957:23;2953:33;2950:2;;;3004:6;2996;2989:22;2950:2;3042;3036:9;3084:3;3076:6;3072:16;3154:6;3142:10;3139:22;3118:18;3106:10;3103:34;3100:62;3097:2;;;3165:9;3097:2;3192;3185:22;3229:23;;3261:33;3229:23;3261:33;:::i;:::-;3303:21;;3376:2;3361:18;;3348:32;3389:35;3348:32;3389:35;:::i;:::-;3452:2;3440:15;;3433:32;3526:2;3511:18;;;3498:32;3481:15;;;3474:57;3583:2;3568:18;;3555:32;3631:8;3618:22;;3606:35;;3596:2;;3660:6;3652;3645:22;3596:2;3697;3685:15;;3678:32;3744:41;3780:3;3765:19;;3744:41;:::i;:::-;3738:3;3726:16;;3719:67;3730:6;2940:877;-1:-1:-1;;;2940:877:89:o;3822:742::-;;3986:2;3974:9;3965:7;3961:23;3957:32;3954:2;;;4007:6;3999;3992:22;3954:2;4045;4039:9;4087:2;4079:6;4075:15;4156:6;4144:10;4141:22;4120:18;4108:10;4105:34;4102:62;4099:2;;;4167:9;4099:2;4194;4187:22;4231:23;;4263:33;4231:23;4263:33;:::i;:::-;4305:21;;4378:2;4363:18;;4350:32;4391:35;4350:32;4391:35;:::i;:::-;4454:2;4442:15;;4435:32;4528:2;4513:18;;;4500:32;4483:15;;;4476:57;;;;-1:-1:-1;4446:6:89;3944:620;-1:-1:-1;3944:620:89:o;4569:945::-;;;;;;;;4784:3;4772:9;4763:7;4759:23;4755:33;4752:2;;;4806:6;4798;4791:22;4752:2;4843:9;4837:16;4862:33;4889:5;4862:33;:::i;:::-;4914:5;-1:-1:-1;4938:49:89;4983:2;4968:18;;4938:49;:::i;:::-;4928:59;;5006:50;5052:2;5041:9;5037:18;5006:50;:::i;:::-;4996:60;;5075:50;5121:2;5110:9;5106:18;5075:50;:::i;:::-;5065:60;;5144:51;5190:3;5179:9;5175:19;5144:51;:::i;:::-;5134:61;;5240:3;5229:9;5225:19;5219:26;5289:4;5280:7;5276:18;5267:7;5264:31;5254:2;;5314:6;5306;5299:22;5254:2;5394:3;5379:19;;5373:26;5342:7;;-1:-1:-1;5437:15:89;;5430:23;5418:36;;5408:2;;5473:6;5465;5458:22;5408:2;5501:7;5491:17;;;4742:772;;;;;;;;;;:::o;5519:407::-;;;;5674:2;5662:9;5653:7;5649:23;5645:32;5642:2;;;5695:6;5687;5680:22;5642:2;5729:9;5723:16;5713:26;;5782:2;5771:9;5767:18;5761:25;5795:33;5822:5;5795:33;:::i;:::-;5847:5;-1:-1:-1;5871:49:89;5916:2;5901:18;;5871:49;:::i;:::-;5861:59;;5632:294;;;;;:::o;5931:318::-;;6012:5;6006:12;6039:6;6034:3;6027:19;6055:63;6111:6;6104:4;6099:3;6095:14;6088:4;6081:5;6077:16;6055:63;:::i;:::-;6163:2;6151:15;6168:66;6147:88;6138:98;;;;6238:4;6134:109;;5982:267;-1:-1:-1;;5982:267:89:o;6254:514::-;6542:2;6538:15;;;6447:66;6534:24;;;6522:37;;6597:3;6593:16;;;;6611:66;6589:89;6584:2;6575:12;;6568:111;6713:15;;6709:24;6704:2;6695:12;;6688:46;6759:2;6750:12;;6427:341::o;6773:226::-;6949:42;6937:55;;;;6919:74;;6907:2;6892:18;;6874:125::o;7004:593::-;;7247:42;7328:2;7320:6;7316:15;7305:9;7298:34;7382:6;7375:14;7368:22;7363:2;7352:9;7348:18;7341:50;7427:6;7422:2;7411:9;7407:18;7400:34;7482:2;7474:6;7470:15;7465:2;7454:9;7450:18;7443:43;;7523:3;7517;7506:9;7502:19;7495:32;7544:47;7586:3;7575:9;7571:19;7563:6;7544:47;:::i;:::-;7536:55;7227:370;-1:-1:-1;;;;;;;7227:370:89:o;7602:221::-;;7751:2;7740:9;7733:21;7771:46;7813:2;7802:9;7798:18;7790:6;7771:46;:::i;:::-;7763:54;7723:100;-1:-1:-1;;;7723:100:89:o;7828:340::-;8030:2;8012:21;;;8069:2;8049:18;;;8042:30;8108:18;8103:2;8088:18;;8081:46;8159:2;8144:18;;8002:166::o;8173:356::-;8375:2;8357:21;;;8394:18;;;8387:30;8453:34;8448:2;8433:18;;8426:62;8520:2;8505:18;;8347:182::o;8534:177::-;8680:25;;;8668:2;8653:18;;8635:76::o;8716:1365::-;;9038:3;9027:9;9023:19;9069:6;9058:9;9051:25;9095:2;9133:3;9128:2;9117:9;9113:18;9106:31;9157:6;9192;9186:13;9223:6;9215;9208:22;9261:3;9250:9;9246:19;9239:26;;9300:2;9292:6;9288:15;9274:29;;9321:4;9334:218;9348:6;9345:1;9342:13;9334:218;;;9413:13;;9428:42;9409:62;9397:75;;9527:15;;;;9492:12;;;;9370:1;9363:9;9334:218;;;-1:-1:-1;;9588:19:89;;;9583:2;9568:18;;9561:47;9658:13;;9680:21;;;9719:12;;;;-1:-1:-1;9756:15:89;;;;9791:4;9804:206;9820:8;9815:3;9812:17;9804:206;;;9893:15;;9910:10;9889:32;9875:47;;9944:14;;;;9983:17;;;;9848:1;9839:11;9804:206;;;-1:-1:-1;;;;10063:2:89;10048:18;;;;10041:34;;;;10027:5;8999:1082;-1:-1:-1;;;;8999:1082:89:o;10086:455::-;10315:25;;;10388:42;10376:55;;;;10371:2;10356:18;;10349:83;10480:10;10468:23;10463:2;10448:18;;10441:51;10523:2;10508:18;;10501:34;10302:3;10287:19;;10269:272::o;10546:242::-;10616:2;10610:9;10646:17;;;10693:18;10678:34;;10714:22;;;10675:62;10672:2;;;10740:9;10672:2;10767;10760:22;10590:198;;-1:-1:-1;10590:198:89:o;10793:240::-;;10876:18;10868:6;10865:30;10862:2;;;10898:9;10862:2;-1:-1:-1;10946:4:89;10934:17;10953:66;10930:90;11022:4;10926:101;;10852:181::o;11038:258::-;11110:1;11120:113;11134:6;11131:1;11128:13;11120:113;;;11210:11;;;11204:18;11191:11;;;11184:39;11156:2;11149:10;11120:113;;;11251:6;11248:1;11245:13;11242:2;;;11286:1;11277:6;11272:3;11268:16;11261:27;11242:2;;11091:205;;;:::o;11301:156::-;11389:42;11382:5;11378:54;11371:5;11368:65;11358:2;;11447:1;11444;11437:12;11358:2;11348:109;:::o"
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "astraCLSwapCallback(int256,int256,bytes)": "11c17848",
              "factory()": "c45a0155",
              "factoryClassic()": "4f04a0db",
              "quoteExactInput(bytes,uint256)": "cdca1753",
              "quoteExactInputSingleCL((address,address,uint256,uint24,uint160))": "5bccbdf7",
              "quoteExactInputSingleClassic((address,address,uint256))": "6f9fbc82"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_factoryClassic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_SAMB\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"name\":\"astraCLSwapCallback\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factoryClassic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"quoteExactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160[]\",\"name\":\"CLSqrtPriceX96AfterList\",\"type\":\"uint160[]\"},{\"internalType\":\"uint32[]\",\"name\":\"CLInitializedTicksCrossedList\",\"type\":\"uint32[]\"},{\"internalType\":\"uint256\",\"name\":\"CLSwapGasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"quoteExactInputSingleCL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96After\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"initializedTicksCrossed\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"internalType\":\"struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"quoteExactInputSingleClassic\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute the swap and check the amounts in the callback.\",\"kind\":\"dev\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IAstraCLPoolActions#swap call\"}},\"quoteExactInput(bytes,uint256)\":{\"details\":\"Get the quote for an exactIn swap between an array of Classic and/or CL pools\"},\"quoteExactInputSingleCL((address,address,uint256,uint24,uint160))\":{\"details\":\"Fetch an exactIn quote for a CL Pool on chain\"},\"quoteExactInputSingleClassic((address,address,uint256))\":{\"details\":\"Fetch an exactIn quote for a Classic pair on chain\"}},\"stateVariables\":{\"amountOutCached\":{\"details\":\"Transient storage variable used to check a safety condition in exact output swaps.\"},\"flagBitmask\":{\"details\":\"Value to bit mask with path fee to determine if Classic or CL route\"}},\"title\":\"Provides on chain quotes for CL, Classic, and MixedRoute exact input swaps\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\"},\"quoteExactInput(bytes,uint256)\":{\"notice\":\"To encode a Classic pair within the path, use 0x800000 (hex value of 8388608) for the fee between the two token addresses\"}},\"notice\":\"Allows getting the expected amount out for a given swap without executing the swapDoes not support exact output swaps since using the contract balance between exactOut swaps is not supported\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lens/MixedRouteQuoterV1.sol\":\"MixedRouteQuoterV1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":{\"keccak256\":\"0xaa82f63f0c930e51d6aaae0d59e7bf3ef5b32371ac0549f6e07bfcab5b4dcb16\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73419af0b4f35f02c3b89d387d6ac46041637a7133e249de617103b7567bf4c4\",\"dweb:/ipfs/QmTfwEX1dCoUUUMaMFzDnqDcFXihHQnEG1fbkBFpidRs8o\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"@airdao/astra-cl-core/contracts/libraries/BitMath.sol\":{\"keccak256\":\"0x82e425066110aac05ed8a9fc90f9ee85142b6f434769447e49d4438a8d9fcd82\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://77a97078bc992c18c59cb61e07fa4632c8a26b6babf00f3b16eabb5dcaa953b4\",\"dweb:/ipfs/QmTj15ufLWk6AxedSVXBcLp5cYf2DCJAeDi94cVemCkm54\"]},\"@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0x86715eb960f18e01ac94e3bba4614ed51a887fa3c5bd1c43bf80aa98e019cf2d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bfc1d5d58e59015086b0e65a6c3a2ddad312e2350480510f6c0c8167f3d71a37\",\"dweb:/ipfs/QmQndULYjFsHKHjMAKLMfc12vWbVB5FawtioHtvwcWRJZp\"]},\"@airdao/astra-cl-core/contracts/libraries/SafeCast.sol\":{\"keccak256\":\"0xd4c1c1b67f946b077d7c52a158113763a89a210fc2927b8491055a962ecd18c0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5344400c74320ca8dbe19241db7ff49babbd6c875c1b561c79d6e4315a9fb5f9\",\"dweb:/ipfs/QmRKCNTbkovxK1WvejXZr3iAHhGN97ZT1yWGsWCJFkrT5X\"]},\"@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol\":{\"keccak256\":\"0x47b7551bec8cd09091ae50a34c1ed576e317e404fbc1901593283b1cbd3be7c7\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://486b70ed46a9389da18f93654d069024941ce8373b1b8fb30e5051cf2f014a1d\",\"dweb:/ipfs/QmecffKV1nSbd2LfobgR7eqJQSuL5ER5ApAgNbe4sWVFBG\"]},\"@airdao/astra-cl-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xe22d07f1ebf9c8468c81cb6905bfc8f8a54fa2f9b4a50742202a47cdbcb5af80\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d4773ca5008d2a2f496370695942c8ba3d6e1d487adbf5cda1149da12e3a6268\",\"dweb:/ipfs/QmcPYTLpEWfU8e3KAYBfHH7uYR4tGAkvnWrWS1CG8EkyLC\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol\":{\"keccak256\":\"0xed1b8acd0184eb321d5f4b5c2576608d1c12f5db1bb72d950054438f7f1946a6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f55d6aca86dcf1f1ab6413f48964f821306a29914c2117c16f20446faa5d6d0a\",\"dweb:/ipfs/QmWKbbg6kA9kkPVrCh6hJMnPhK1NhuVoHEd9s3vmYWsvTa\"]},\"@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol\":{\"keccak256\":\"0xf21a3d7e2bc14386ce7b072b124b580df53441a32591770845860e8947f942d0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6941e21d9bc52bddc65079c5e7bc9d6ffd6553f6ed7f3d3b340996a55115b46f\",\"dweb:/ipfs/QmaDJ9uafahho77WP5izBCRL4W3mVM7NFL5q5QR5YvAC3A\"]},\"@airdao/astra-cl-periphery/contracts/libraries/Path.sol\":{\"keccak256\":\"0x0a6928608f48763796089e22dfc02a462cce63bb7727663961b3ed8c4f3eb862\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73bb4f107faf873db8700ce8950d2c4c88d41e0e1716da599bb733ad884f95eb\",\"dweb:/ipfs/QmZXSaPVpgDXpkKqYRdByJ3UXaMV2ATkr7V72nRZij8wmB\"]},\"@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0xdd82100913bcb7c490e9e6912ab33994bd97d5a59e67209826ebf917bc8271c1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ecfc24c77d80aa718604d8a2c4d59460b76b5fd567d15206414e3838dd6698b7\",\"dweb:/ipfs/QmVtUC9dnade4RkzXaSqEFdAkiEftJ777jmT619LX2VLGv\"]},\"@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol\":{\"keccak256\":\"0xd2259aac0746706697d6e8097a48b592308fb1e1e78077cc3e0540234dee6648\",\"urls\":[\"bzz-raw://525ef590cf7e5c54030527703a7409b74c70497715aebf8dae0b877ee136dac7\",\"dweb:/ipfs/QmVgR4Pk3i8X8oS8xxNnVsFkDXXGP2wu4YvhG23e3z5K9q\"]},\"contracts/base/ImmutableState.sol\":{\"keccak256\":\"0xa52c8265326bed23bab067cfaf4a260d12a1b653618920534bb3e6d65c51e047\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1579ffa9db15cb07f0dfc0947feaee663c992455ba719373ac358254aad879ca\",\"dweb:/ipfs/QmSyStKaiERPMswqVFsn37CAGanBoTYNA6FUVWyZr9xDtK\"]},\"contracts/interfaces/IImmutableState.sol\":{\"keccak256\":\"0x25fee5bdbdbbb57ffb91c3ab66b9c2db351e7f6061ad2f98ef2991f6b27a15e0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7bf237158fbcfabf64bb0da5c7ff0b0161ed76c45c7197ecc5ac54b338786bfc\",\"dweb:/ipfs/QmT74A24bW9qu1dJUxPQLaqLBnSe57PVgfUJxpu3sEf9fg\"]},\"contracts/interfaces/IMixedRouteQuoterV1.sol\":{\"keccak256\":\"0x95e36846da270437171d2f34420a68b402bc7d4e9539596f7f29348151f15b5b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://fbb72296e9dbcf4599605465c0e2ea1ddf79652a1055e314af48e91a02c19e9e\",\"dweb:/ipfs/QmVaTXNtAeKPMqENNDaQwoESkpMsvKBa4zcGmav9maNvwY\"]},\"contracts/lens/MixedRouteQuoterV1.sol\":{\"keccak256\":\"0xbb8991a7c3a88ed8b53e830213fb12bcd56f8ece51c90b5a1b1fd89cea2f07f6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9eb3d31e7900de6805043423c5f735e9099c1dbda0c0bda3bcb4a0ad354b2a89\",\"dweb:/ipfs/QmdfK8qB2onR6eJcsf7AN2mrRxik7Nrs9ExRy1wZhHBw95\"]},\"contracts/libraries/AstraClassicLibrary.sol\":{\"keccak256\":\"0xa0206fe7bc64db0582ab194bf47755b617a204e7e7768593968f9c6e7e7e5d87\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://be4c4afea9bef22f244b7ed926651026515c385410fb469876eff92a21548036\",\"dweb:/ipfs/QmeqP6cPs2igCKpQsA7D8sUiniJtTGXRx5K3rc3XAbVWL3\"]},\"contracts/libraries/PoolTicksCounter.sol\":{\"keccak256\":\"0x64582f3e6588d786a37e03b48f61725720652a2284308e0dffd5f28c9a3bdd15\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1ad4197021a4fcdee55402bab2a7a934ead5ea04a24262b1dcc8a08f44735eff\",\"dweb:/ipfs/QmfGC9JcqbY3C1cxBFhgLH7hJsqmCLjHwqPPYWn1S3PF1E\"]}},\"version\":1}"
        }
      },
      "contracts/lens/Quoter.sol": {
        "Quoter": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_factory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_SAMB",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "amount0Delta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1Delta",
                  "type": "int256"
                },
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                }
              ],
              "name": "astraCLSwapCallback",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "name": "quoteExactInput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "tokenIn",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "fee",
                  "type": "uint24"
                },
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                }
              ],
              "name": "quoteExactInputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "name": "quoteExactOutput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "tokenIn",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "fee",
                  "type": "uint24"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                }
              ],
              "name": "quoteExactOutputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:507:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "76:117:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "86:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "101:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "95:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "95:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "86:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "171:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "180:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "183:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "173:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "173:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "173:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "130:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "141:5:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "156:3:89",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "161:1:89",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "152:3:89"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "152:11:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "165:1:89",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "148:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "148:19:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "137:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "137:31:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "127:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "127:42:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "120:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "120:50:89"
                              },
                              "nodeType": "YulIf",
                              "src": "117:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "55:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "66:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:179:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "296:209:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "342:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "351:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "359:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "344:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "344:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "344:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "317:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "326:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "313:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "313:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "338:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "309:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "309:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "306:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "377:52:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "419:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "387:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "387:42:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "377:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "438:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "484:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "495:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "480:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "480:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "448:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "448:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "438:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "254:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "265:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "277:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "285:6:89",
                            "type": ""
                          }
                        ],
                        "src": "198:307:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_t_address_fromMemory(headStart)\n        value1 := abi_decode_t_address_fromMemory(add(headStart, 32))\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60c060405234801561001057600080fd5b506040516112e53803806112e583398101604081905261002f91610069565b6001600160601b0319606092831b8116608052911b1660a05261009b565b80516001600160a01b038116811461006457600080fd5b919050565b6000806040838503121561007b578182fd5b6100848361004d565b91506100926020840161004d565b90509250929050565b60805160601c60a05160601c6112176100ce6000398061044d525080610147528061047152806106eb52506112176000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806390793ea81161005b57806390793ea8146100d3578063c45a0155146100e8578063cdca1753146100f0578063f7729d43146101035761007d565b806311c17848146100825780632f80bb1d1461009757806330d07f21146100c0575b600080fd5b610095610090366004610f04565b610116565b005b6100aa6100a5366004610e9e565b610221565b6040516100b79190611148565b60405180910390f35b6100aa6100ce366004610e30565b610286565b6100db61044b565b6040516100b79190611084565b6100db61046f565b6100aa6100fe366004610e9e565b610493565b6100aa610111366004610e30565b6104e1565b60008313806101255750600082135b61012e57600080fd5b600080600061013c84610660565b92509250925061016e7f0000000000000000000000000000000000000000000000000000000000000000848484610691565b5060008060008089136101b4578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a6000036101e9565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b925092509250821561020057604051818152602081fd5b6000541561021657600054811461021657600080fd5b604051828152602081fd5b60005b600061022f846106a7565b9050600080600061023f87610660565b925092509250610253828483896000610286565b9550831561026b57610264876106af565b9650610277565b85945050505050610280565b50505050610224565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff808616878216109083166102b15760008490555b6102bc8787876106e4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836102e288610722565b60000373ffffffffffffffffffffffffffffffffffffffff881615610307578761032d565b856103265773fffd8963efd1fc6a506488495d951d5263988d2561032d565b6401000276a45b8b8b8e6040516020016103429392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016103719594939291906110a5565b6040805180830381600087803b15801561038a57600080fd5b505af19250505080156103d8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526103d591810190610ee1565b60015b61043e573d808015610406576040519150601f19603f3d011682016040523d82523d6000602084013e61040b565b606091505b5073ffffffffffffffffffffffffffffffffffffffff841661042c57600080555b61043581610754565b92505050610442565b5050505b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005b60006104a1846106a7565b905060008060006104b187610660565b9250925092506104c58383838960006104e1565b9550831561026b576104d6876106af565b965050505050610496565b600073ffffffffffffffffffffffffffffffffffffffff8086169087161061050a8787876106e4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb08308361053088610722565b73ffffffffffffffffffffffffffffffffffffffff8816156105525787610578565b856105715773fffd8963efd1fc6a506488495d951d5263988d25610578565b6401000276a45b8c8b8d60405160200161058d9392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016105bc9594939291906110a5565b6040805180830381600087803b1580156105d557600080fd5b505af1925050508015610623575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261062091810190610ee1565b60015b61043e573d808015610651576040519150601f19603f3d011682016040523d82523d6000602084013e610656565b606091505b5061043581610754565b6000808061066e8482610805565b925061067b846014610905565b9050610688846017610805565b91509193909250565b6000610442856106a28686866109f5565b610a72565b516042111590565b80516060906102809083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901610aa2565b600061071a7f00000000000000000000000000000000000000000000000000000000000000006107158686866109f5565b610c89565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061075057600080fd5b5090565b600081516020146107f1576044825110156107a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079b90611111565b60405180910390fd5b600482019150818060200190518101906107be9190610f52565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079b91906110f7565b818060200190518101906102809190610fbc565b60008182601401101561087957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b81601401835110156108ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561097957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b81600301835110156109ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b6109fd610dbf565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610a35579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000610a7e8383610c89565b90503373ffffffffffffffffffffffffffffffffffffffff82161461028057600080fd5b60608182601f011015610b1657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610b8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015610bf957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015610c185760405191506000825260208201604052610c80565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610c51578051835260209283019201610c39565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610ccb57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516060810182526000808252602082018190529181019190915290565b600082601f830112610def578081fd5b8135610e02610dfd82611175565b611151565b818152846020838601011115610e16578283fd5b816020850160208301379081016020019190915292915050565b600080600080600060a08688031215610e47578081fd5b8535610e52816111e5565b94506020860135610e62816111e5565b9350604086013562ffffff81168114610e79578182fd5b9250606086013591506080860135610e90816111e5565b809150509295509295909350565b60008060408385031215610eb0578182fd5b823567ffffffffffffffff811115610ec6578283fd5b610ed285828601610ddf565b95602094909401359450505050565b60008060408385031215610ef3578182fd5b505080516020909101519092909150565b600080600060608486031215610f18578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610f3c578182fd5b610f4886828701610ddf565b9150509250925092565b600060208284031215610f63578081fd5b815167ffffffffffffffff811115610f79578182fd5b8201601f81018413610f89578182fd5b8051610f97610dfd82611175565b818152856020838501011115610fab578384fd5b6104428260208301602086016111b5565b600060208284031215610fcd578081fd5b5051919050565b60008151808452610fec8160208601602086016111b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a060808301526110ec60a0830184610fd4565b979650505050505050565b60006020825261110a6020830184610fd4565b9392505050565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561116d57fe5b604052919050565b600067ffffffffffffffff82111561118957fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156111d05781810151838201526020016111b8565b838111156111df576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461120757600080fd5b5056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x12E5 CODESIZE SUB DUP1 PUSH2 0x12E5 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x69 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 SHL AND PUSH1 0xA0 MSTORE PUSH2 0x9B JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7B JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x84 DUP4 PUSH2 0x4D JUMP JUMPDEST SWAP2 POP PUSH2 0x92 PUSH1 0x20 DUP5 ADD PUSH2 0x4D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0x1217 PUSH2 0xCE PUSH1 0x0 CODECOPY DUP1 PUSH2 0x44D MSTORE POP DUP1 PUSH2 0x147 MSTORE DUP1 PUSH2 0x471 MSTORE DUP1 PUSH2 0x6EB MSTORE POP PUSH2 0x1217 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90793EA8 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0xE8 JUMPI DUP1 PUSH4 0xCDCA1753 EQ PUSH2 0xF0 JUMPI DUP1 PUSH4 0xF7729D43 EQ PUSH2 0x103 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x11C17848 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x2F80BB1D EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x30D07F21 EQ PUSH2 0xC0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0xF04 JUMP JUMPDEST PUSH2 0x116 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xAA PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x221 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB7 SWAP2 SWAP1 PUSH2 0x1148 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xAA PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x286 JUMP JUMPDEST PUSH2 0xDB PUSH2 0x44B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB7 SWAP2 SWAP1 PUSH2 0x1084 JUMP JUMPDEST PUSH2 0xDB PUSH2 0x46F JUMP JUMPDEST PUSH2 0xAA PUSH2 0xFE CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x493 JUMP JUMPDEST PUSH2 0xAA PUSH2 0x111 CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x4E1 JUMP JUMPDEST PUSH1 0x0 DUP4 SGT DUP1 PUSH2 0x125 JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST PUSH2 0x12E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x13C DUP5 PUSH2 0x660 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x16E PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x691 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP10 SGT PUSH2 0x1B4 JUMPI DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP9 DUP11 PUSH1 0x0 SUB PUSH2 0x1E9 JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 DUP10 PUSH1 0x0 SUB JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP DUP3 ISZERO PUSH2 0x200 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST PUSH1 0x0 SLOAD ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 SLOAD DUP2 EQ PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x22F DUP5 PUSH2 0x6A7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x23F DUP8 PUSH2 0x660 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x253 DUP3 DUP5 DUP4 DUP10 PUSH1 0x0 PUSH2 0x286 JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x26B JUMPI PUSH2 0x264 DUP8 PUSH2 0x6AF JUMP JUMPDEST SWAP7 POP PUSH2 0x277 JUMP JUMPDEST DUP6 SWAP5 POP POP POP POP POP PUSH2 0x280 JUMP JUMPDEST POP POP POP POP PUSH2 0x224 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP8 DUP3 AND LT SWAP1 DUP4 AND PUSH2 0x2B1 JUMPI PUSH1 0x0 DUP5 SWAP1 SSTORE JUMPDEST PUSH2 0x2BC DUP8 DUP8 DUP8 PUSH2 0x6E4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x2E2 DUP9 PUSH2 0x722 JUMP JUMPDEST PUSH1 0x0 SUB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x307 JUMPI DUP8 PUSH2 0x32D JUMP JUMPDEST DUP6 PUSH2 0x326 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x32D JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP12 DUP12 DUP15 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x342 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x371 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x3D8 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x3D5 SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x43E JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x40B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 SSTORE JUMPDEST PUSH2 0x435 DUP2 PUSH2 0x754 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x442 JUMP JUMPDEST POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x4A1 DUP5 PUSH2 0x6A7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4B1 DUP8 PUSH2 0x660 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x4C5 DUP4 DUP4 DUP4 DUP10 PUSH1 0x0 PUSH2 0x4E1 JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x26B JUMPI PUSH2 0x4D6 DUP8 PUSH2 0x6AF JUMP JUMPDEST SWAP7 POP POP POP POP POP PUSH2 0x496 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND SWAP1 DUP8 AND LT PUSH2 0x50A DUP8 DUP8 DUP8 PUSH2 0x6E4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x530 DUP9 PUSH2 0x722 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x552 JUMPI DUP8 PUSH2 0x578 JUMP JUMPDEST DUP6 PUSH2 0x571 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x578 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP13 DUP12 DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x58D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BC SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x623 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x620 SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x43E JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x651 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x656 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH2 0x435 DUP2 PUSH2 0x754 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x66E DUP5 DUP3 PUSH2 0x805 JUMP JUMPDEST SWAP3 POP PUSH2 0x67B DUP5 PUSH1 0x14 PUSH2 0x905 JUMP JUMPDEST SWAP1 POP PUSH2 0x688 DUP5 PUSH1 0x17 PUSH2 0x805 JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x442 DUP6 PUSH2 0x6A2 DUP7 DUP7 DUP7 PUSH2 0x9F5 JUMP JUMPDEST PUSH2 0xA72 JUMP JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x280 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0xAA2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x71A PUSH32 0x0 PUSH2 0x715 DUP7 DUP7 DUP7 PUSH2 0x9F5 JUMP JUMPDEST PUSH2 0xC89 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x750 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x7F1 JUMPI PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x7A4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x79B SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x7BE SWAP2 SWAP1 PUSH2 0xF52 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x79B SWAP2 SWAP1 PUSH2 0x10F7 JUMP JUMPDEST DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x280 SWAP2 SWAP1 PUSH2 0xFBC JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x879 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x979 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x9EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x9FD PUSH2 0xDBF JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0xA35 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA7E DUP4 DUP4 PUSH2 0xC89 JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x280 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0xB16 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0xB87 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0xBF9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0xC18 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xC80 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0xC51 JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xC39 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xCCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x203C8EC649B23B7FAF9B73CCADFB1A67AF52A097119C82801F4947EC5DEB6C04 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xDEF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE02 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST PUSH2 0x1151 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0xE16 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xE47 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xE52 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xE62 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE79 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0xE90 DUP2 PUSH2 0x11E5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEB0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xEC6 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xED2 DUP6 DUP3 DUP7 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEF3 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xF18 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF3C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xF48 DUP7 DUP3 DUP8 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF63 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF79 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0xF89 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xF97 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0xFAB JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x442 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFCD JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xFEC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x10EC PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x110A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x116D JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1189 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11D0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11B8 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x11DF JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "1027:5709:76:-:0;;;1300:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;520:18:16;;;;;;;;548:12;;;;;1027:5709:76;;14:179:89;95:13;;-1:-1:-1;;;;;137:31:89;;127:42;;117:2;;183:1;180;173:12;117:2;76:117;;;:::o;198:307::-;;;338:2;326:9;317:7;313:23;309:32;306:2;;;359:6;351;344:22;306:2;387:42;419:9;387:42;:::i;:::-;377:52;;448:51;495:2;484:9;480:18;448:51;:::i;:::-;438:61;;296:209;;;;;:::o;:::-;1027:5709:76;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:6675:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "68:431:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "117:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "126:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "133:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "119:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "119:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "119:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "96:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "104:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "92:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "92:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "111:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "88:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "88:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "81:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "81:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "78:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "150:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "173:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "160:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "160:20:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "154:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "189:64:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "249:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "219:29:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "219:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "204:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "204:49:89"
                              },
                              "variables": [
                                {
                                  "name": "array_1",
                                  "nodeType": "YulTypedName",
                                  "src": "193:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "269:7:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "278:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "262:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "262:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "262:19:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "329:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "338:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "345:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "331:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "331:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "331:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "304:6:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "312:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "300:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "300:15:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "317:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "296:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "296:26:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "324:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "293:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "293:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "290:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "array_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "379:7:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "388:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "375:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "375:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "399:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "407:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "395:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "395:17:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "414:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "362:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "362:55:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "362:55:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "array_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "441:7:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "450:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "437:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "437:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "455:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "433:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "433:27:89"
                                  },
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "462:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "426:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "426:42:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "426:42:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "477:16:89",
                              "value": {
                                "name": "array_1",
                                "nodeType": "YulIdentifier",
                                "src": "486:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "477:5:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "50:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "58:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:485:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "641:658:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "688:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "697:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "705:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "690:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "690:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "690:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "662:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "671:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "658:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "658:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "683:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "654:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "654:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "651:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "723:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "749:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "736:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "736:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "727:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "795:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "768:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "768:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "768:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "810:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "820:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "810:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "834:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "866:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "877:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "849:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "849:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "838:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "917:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "890:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "890:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "890:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "934:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "944:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "934:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "960:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "992:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1003:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "988:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "988:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "975:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "975:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "964:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1063:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "1072:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "1080:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1065:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1065:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1065:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1029:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1042:7:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1051:8:89",
                                            "type": "",
                                            "value": "0xffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "1038:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1038:22:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1026:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1026:35:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1019:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1019:43:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1016:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1098:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "1108:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1098:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1124:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1151:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1162:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1147:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1147:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1134:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1134:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "1124:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1175:48:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1207:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1218:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1203:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1203:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1190:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1190:33:89"
                              },
                              "variables": [
                                {
                                  "name": "value_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1179:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1259:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1232:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1232:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1232:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1276:17:89",
                              "value": {
                                "name": "value_3",
                                "nodeType": "YulIdentifier",
                                "src": "1286:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "1276:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint24t_uint256t_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "575:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "586:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "598:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "606:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "614:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "622:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "630:6:89",
                            "type": ""
                          }
                        ],
                        "src": "504:795:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1400:314:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1446:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1455:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1463:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1448:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1448:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1448:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1421:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1430:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1417:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1417:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1442:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1413:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1413:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1410:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1481:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1508:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1495:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1495:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1485:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1561:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1570:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1578:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1563:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1563:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1563:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1533:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1541:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1530:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1530:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1527:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1596:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1629:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1640:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1625:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1625:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1649:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "1606:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1606:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1596:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1666:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1693:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1704:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1689:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1689:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1676:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1676:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1666:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes_memory_ptrt_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1358:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1369:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1381:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1389:6:89",
                            "type": ""
                          }
                        ],
                        "src": "1304:410:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1815:157:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1861:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1870:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1878:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1863:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1863:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1863:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1836:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1845:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1832:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1832:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1857:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1828:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1828:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1825:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1896:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1912:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1906:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1906:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1896:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1931:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1951:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1962:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1947:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1947:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1941:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1941:25:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1931:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int256t_int256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1773:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1784:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1796:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1804:6:89",
                            "type": ""
                          }
                        ],
                        "src": "1719:253:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2088:365:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2134:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2143:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2151:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2136:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2136:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2136:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2109:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2118:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2105:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2105:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2130:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2101:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2101:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2098:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2169:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2192:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2179:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2179:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2169:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2211:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2238:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2249:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2234:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2234:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2221:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2221:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2211:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2262:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2293:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2304:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2289:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2289:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2276:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2276:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2266:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2351:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2360:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2368:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2353:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2353:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2353:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2323:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2331:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2320:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2320:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2317:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2386:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2419:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "2430:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2415:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2415:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2439:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "2396:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2396:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2386:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int256t_int256t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2038:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2049:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2061:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2069:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2077:6:89",
                            "type": ""
                          }
                        ],
                        "src": "1977:476:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2549:585:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2595:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2604:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2612:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2597:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2597:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2597:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2570:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2579:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2566:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2566:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2591:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2562:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2562:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2559:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2630:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2650:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2644:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2644:16:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2634:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2703:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2712:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2720:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2705:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2705:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2705:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2675:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2683:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2672:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2672:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2669:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2738:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2752:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2763:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2748:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2748:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2742:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2818:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2827:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2835:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2820:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2820:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2820:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2797:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2801:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2793:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2793:13:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2808:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2789:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2789:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2782:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2782:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2779:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2853:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2869:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2863:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2863:9:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2857:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2881:62:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2939:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "2909:29:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2909:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2894:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2894:49:89"
                              },
                              "variables": [
                                {
                                  "name": "array",
                                  "nodeType": "YulTypedName",
                                  "src": "2885:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "2959:5:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2966:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2952:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2952:17:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2952:17:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3015:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3024:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3032:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3017:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3017:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3017:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2992:2:89"
                                          },
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2996:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2988:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2988:11:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3001:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2984:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2984:20:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3006:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2981:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2981:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2978:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3076:2:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3080:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3072:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3072:11:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "array",
                                        "nodeType": "YulIdentifier",
                                        "src": "3089:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3096:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3085:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3085:14:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3101:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3050:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3050:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3050:54:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3113:15:89",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "3123:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3113:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2515:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2526:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2538:6:89",
                            "type": ""
                          }
                        ],
                        "src": "2458:676:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3220:113:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3266:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3275:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3283:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3268:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3268:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3268:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3241:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3250:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3237:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3237:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3262:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3233:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3233:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3230:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3301:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3317:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3311:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3311:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3301:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3186:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3197:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3209:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3139:194:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3389:267:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3399:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3419:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3413:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3413:12:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "3403:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3441:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3446:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3434:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3434:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3434:19:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "3488:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3495:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3484:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3484:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3506:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3511:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3502:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3502:14:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3518:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3462:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3462:63:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3462:63:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3534:116:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3549:3:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "3562:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3570:2:89",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "3558:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3558:15:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3575:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "3554:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3554:88:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3545:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3545:98:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3645:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3541:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3541:109:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "3534:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "3366:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3373:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "3381:3:89",
                            "type": ""
                          }
                        ],
                        "src": "3338:318:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3834:341:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3844:76:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3854:66:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3848:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3936:3:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3949:2:89",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "3953:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "3945:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3945:15:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3962:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "3941:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3941:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3929:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3929:37:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3929:37:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3986:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3991:2:89",
                                        "type": "",
                                        "value": "20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3982:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3982:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4004:3:89",
                                            "type": "",
                                            "value": "232"
                                          },
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "4009:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "4000:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4000:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4018:66:89",
                                        "type": "",
                                        "value": "0xffffff0000000000000000000000000000000000000000000000000000000000"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "3996:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3996:89:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3975:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3975:111:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3975:111:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "4106:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4111:2:89",
                                        "type": "",
                                        "value": "23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4102:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4102:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4124:2:89",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value2",
                                            "nodeType": "YulIdentifier",
                                            "src": "4128:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "4120:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4120:15:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4137:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4116:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4116:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4095:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4095:46:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4095:46:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4150:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4161:3:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4166:2:89",
                                    "type": "",
                                    "value": "43"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4157:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4157:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "4150:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3794:3:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3799:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3807:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3815:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "3826:3:89",
                            "type": ""
                          }
                        ],
                        "src": "3661:514:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4281:125:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4291:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4303:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4314:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4299:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4299:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4291:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4333:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4348:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4356:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4344:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4344:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4326:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4326:74:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4326:74:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4250:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4261:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4272:4:89",
                            "type": ""
                          }
                        ],
                        "src": "4180:226:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4634:370:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4644:52:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4654:42:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4648:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4712:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4727:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4735:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4723:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4723:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4705:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4705:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4705:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4759:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4770:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4755:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4755:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "4789:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "4782:6:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4782:14:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "4775:6:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4775:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4748:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4748:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4748:50:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4818:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4829:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4814:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4814:18:89"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4834:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4807:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4807:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4807:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4861:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4872:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4857:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4857:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value3",
                                        "nodeType": "YulIdentifier",
                                        "src": "4881:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4889:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4877:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4877:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4850:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4850:43:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4850:43:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4913:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4924:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4909:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4909:19:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4930:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4902:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4902:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4902:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4943:55:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "4970:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4982:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4993:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4978:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4978:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "4951:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4951:47:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4943:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4571:9:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "4582:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4590:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4598:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4606:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4614:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4625:4:89",
                            "type": ""
                          }
                        ],
                        "src": "4411:593:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5130:100:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5147:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5158:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5140:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5140:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5140:21:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5170:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5197:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5209:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5220:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5205:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5205:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "5178:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5178:46:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5170:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5099:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5110:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5121:4:89",
                            "type": ""
                          }
                        ],
                        "src": "5009:221:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5409:166:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5426:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5437:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5419:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5419:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5419:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5460:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5471:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5456:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5456:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5476:2:89",
                                    "type": "",
                                    "value": "16"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5449:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5449:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5449:30:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5499:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5510:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5495:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5495:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5515:18:89",
                                    "type": "",
                                    "value": "Unexpected error"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5488:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5488:46:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5488:46:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5543:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5555:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5566:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5551:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5551:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5543:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5386:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5400:4:89",
                            "type": ""
                          }
                        ],
                        "src": "5235:340:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5681:76:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5691:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5703:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5714:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5699:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5699:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5691:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5733:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5744:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5726:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5726:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5726:25:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5650:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5661:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5672:4:89",
                            "type": ""
                          }
                        ],
                        "src": "5580:177:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5806:198:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5816:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5832:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5826:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5826:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5816:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5844:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "5866:6:89"
                                  },
                                  {
                                    "name": "size",
                                    "nodeType": "YulIdentifier",
                                    "src": "5874:4:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5862:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5862:17:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "5848:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5954:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "5956:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5956:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5956:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5897:10:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5909:18:89",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5894:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5894:34:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5933:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5945:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5930:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5930:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5891:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5891:62:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5888:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5983:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "5987:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5976:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5976:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5976:22:89"
                            }
                          ]
                        },
                        "name": "allocateMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "5786:4:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "5795:6:89",
                            "type": ""
                          }
                        ],
                        "src": "5762:242:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6068:181:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6112:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "6114:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6114:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6114:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6084:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6092:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6081:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6081:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6078:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6134:109:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "6154:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6162:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "6150:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6150:17:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6169:66:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6146:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6146:90:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6238:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6142:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6142:101:89"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "6134:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "6048:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "6059:4:89",
                            "type": ""
                          }
                        ],
                        "src": "6009:240:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6307:205:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6317:10:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6326:1:89",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6321:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6386:63:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "6411:3:89"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "6416:1:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "6407:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6407:11:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6430:3:89"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6435:1:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "6426:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6426:11:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "6420:5:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6420:18:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6400:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6400:39:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6400:39:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6347:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6350:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6344:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6344:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6358:19:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6360:15:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6369:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6372:2:89",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6365:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6365:10:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6360:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6340:3:89",
                                "statements": []
                              },
                              "src": "6336:113:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6475:31:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "6488:3:89"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "6493:6:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "6484:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6484:16:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6502:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6477:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6477:27:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6477:27:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6464:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6467:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6461:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6461:13:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6458:2:89"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "6285:3:89",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "6290:3:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "6295:6:89",
                            "type": ""
                          }
                        ],
                        "src": "6254:258:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6564:109:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6651:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6660:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6663:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6653:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6653:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6653:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "6587:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "6598:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6605:42:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "6594:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6594:54:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "6584:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6584:65:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6577:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6577:73:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6574:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "6553:5:89",
                            "type": ""
                          }
                        ],
                        "src": "6517:156:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := calldataload(offset)\n        let array_1 := allocateMemory(array_allocation_size_t_bytes(_1))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), array)\n        array := array_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint24t_uint256t_uint160(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(value4, value4) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_t_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        if iszero(eq(value_2, and(value_2, 0xffffff))) { revert(value4, value4) }\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        let value_3 := calldataload(add(headStart, 128))\n        validator_revert_t_address(value_3)\n        value4 := value_3\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        value0 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_int256t_int256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_int256t_int256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        value2 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value0, value0) }\n        let _2 := mload(_1)\n        let array := allocateMemory(array_allocation_size_t_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(value0, value0) }\n        copy_memory_to_memory(add(_1, 32), add(array, 32), _2)\n        value0 := array\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_t_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000\n        mstore(pos, and(shl(96, value0), _1))\n        mstore(add(pos, 20), and(shl(232, value1), 0xffffff0000000000000000000000000000000000000000000000000000000000))\n        mstore(add(pos, 23), and(shl(96, value2), _1))\n        end := add(pos, 43)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), 160)\n        tail := abi_encode_t_bytes(value4, add(headStart, 160))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_t_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Unexpected error\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function allocateMemory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, size)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_t_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { invalid() }\n        size := add(and(add(length, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function validator_revert_t_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "2013": [
                  {
                    "length": 32,
                    "start": 327
                  },
                  {
                    "length": 32,
                    "start": 1137
                  },
                  {
                    "length": 32,
                    "start": 1771
                  }
                ],
                "2017": [
                  {
                    "length": 32,
                    "start": 1101
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c806390793ea81161005b57806390793ea8146100d3578063c45a0155146100e8578063cdca1753146100f0578063f7729d43146101035761007d565b806311c17848146100825780632f80bb1d1461009757806330d07f21146100c0575b600080fd5b610095610090366004610f04565b610116565b005b6100aa6100a5366004610e9e565b610221565b6040516100b79190611148565b60405180910390f35b6100aa6100ce366004610e30565b610286565b6100db61044b565b6040516100b79190611084565b6100db61046f565b6100aa6100fe366004610e9e565b610493565b6100aa610111366004610e30565b6104e1565b60008313806101255750600082135b61012e57600080fd5b600080600061013c84610660565b92509250925061016e7f0000000000000000000000000000000000000000000000000000000000000000848484610691565b5060008060008089136101b4578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a6000036101e9565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b925092509250821561020057604051818152602081fd5b6000541561021657600054811461021657600080fd5b604051828152602081fd5b60005b600061022f846106a7565b9050600080600061023f87610660565b925092509250610253828483896000610286565b9550831561026b57610264876106af565b9650610277565b85945050505050610280565b50505050610224565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff808616878216109083166102b15760008490555b6102bc8787876106e4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb0830836102e288610722565b60000373ffffffffffffffffffffffffffffffffffffffff881615610307578761032d565b856103265773fffd8963efd1fc6a506488495d951d5263988d2561032d565b6401000276a45b8b8b8e6040516020016103429392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016103719594939291906110a5565b6040805180830381600087803b15801561038a57600080fd5b505af19250505080156103d8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526103d591810190610ee1565b60015b61043e573d808015610406576040519150601f19603f3d011682016040523d82523d6000602084013e61040b565b606091505b5073ffffffffffffffffffffffffffffffffffffffff841661042c57600080555b61043581610754565b92505050610442565b5050505b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005b60006104a1846106a7565b905060008060006104b187610660565b9250925092506104c58383838960006104e1565b9550831561026b576104d6876106af565b965050505050610496565b600073ffffffffffffffffffffffffffffffffffffffff8086169087161061050a8787876106e4565b73ffffffffffffffffffffffffffffffffffffffff1663128acb08308361053088610722565b73ffffffffffffffffffffffffffffffffffffffff8816156105525787610578565b856105715773fffd8963efd1fc6a506488495d951d5263988d25610578565b6401000276a45b8c8b8d60405160200161058d9392919061101e565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016105bc9594939291906110a5565b6040805180830381600087803b1580156105d557600080fd5b505af1925050508015610623575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261062091810190610ee1565b60015b61043e573d808015610651576040519150601f19603f3d011682016040523d82523d6000602084013e610656565b606091505b5061043581610754565b6000808061066e8482610805565b925061067b846014610905565b9050610688846017610805565b91509193909250565b6000610442856106a28686866109f5565b610a72565b516042111590565b80516060906102809083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901610aa2565b600061071a7f00000000000000000000000000000000000000000000000000000000000000006107158686866109f5565b610c89565b949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000821061075057600080fd5b5090565b600081516020146107f1576044825110156107a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079b90611111565b60405180910390fd5b600482019150818060200190518101906107be9190610f52565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079b91906110f7565b818060200190518101906102809190610fbc565b60008182601401101561087957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b81601401835110156108ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561097957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b81600301835110156109ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b6109fd610dbf565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610a35579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000610a7e8383610c89565b90503373ffffffffffffffffffffffffffffffffffffffff82161461028057600080fd5b60608182601f011015610b1657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015610b8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015610bf957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015610c185760405191506000825260208201604052610c80565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610c51578051835260209283019201610c39565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610ccb57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516060810182526000808252602082018190529181019190915290565b600082601f830112610def578081fd5b8135610e02610dfd82611175565b611151565b818152846020838601011115610e16578283fd5b816020850160208301379081016020019190915292915050565b600080600080600060a08688031215610e47578081fd5b8535610e52816111e5565b94506020860135610e62816111e5565b9350604086013562ffffff81168114610e79578182fd5b9250606086013591506080860135610e90816111e5565b809150509295509295909350565b60008060408385031215610eb0578182fd5b823567ffffffffffffffff811115610ec6578283fd5b610ed285828601610ddf565b95602094909401359450505050565b60008060408385031215610ef3578182fd5b505080516020909101519092909150565b600080600060608486031215610f18578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610f3c578182fd5b610f4886828701610ddf565b9150509250925092565b600060208284031215610f63578081fd5b815167ffffffffffffffff811115610f79578182fd5b8201601f81018413610f89578182fd5b8051610f97610dfd82611175565b818152856020838501011115610fab578384fd5b6104428260208301602086016111b5565b600060208284031215610fcd578081fd5b5051919050565b60008151808452610fec8160208601602086016111b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a060808301526110ec60a0830184610fd4565b979650505050505050565b60006020825261110a6020830184610fd4565b9392505050565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561116d57fe5b604052919050565b600067ffffffffffffffff82111561118957fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156111d05781810151838201526020016111b8565b838111156111df576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461120757600080fd5b5056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90793EA8 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0xE8 JUMPI DUP1 PUSH4 0xCDCA1753 EQ PUSH2 0xF0 JUMPI DUP1 PUSH4 0xF7729D43 EQ PUSH2 0x103 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x11C17848 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x2F80BB1D EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x30D07F21 EQ PUSH2 0xC0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0xF04 JUMP JUMPDEST PUSH2 0x116 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xAA PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x221 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB7 SWAP2 SWAP1 PUSH2 0x1148 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xAA PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x286 JUMP JUMPDEST PUSH2 0xDB PUSH2 0x44B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB7 SWAP2 SWAP1 PUSH2 0x1084 JUMP JUMPDEST PUSH2 0xDB PUSH2 0x46F JUMP JUMPDEST PUSH2 0xAA PUSH2 0xFE CALLDATASIZE PUSH1 0x4 PUSH2 0xE9E JUMP JUMPDEST PUSH2 0x493 JUMP JUMPDEST PUSH2 0xAA PUSH2 0x111 CALLDATASIZE PUSH1 0x4 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x4E1 JUMP JUMPDEST PUSH1 0x0 DUP4 SGT DUP1 PUSH2 0x125 JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST PUSH2 0x12E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x13C DUP5 PUSH2 0x660 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x16E PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x691 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP10 SGT PUSH2 0x1B4 JUMPI DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP9 DUP11 PUSH1 0x0 SUB PUSH2 0x1E9 JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 DUP10 PUSH1 0x0 SUB JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP DUP3 ISZERO PUSH2 0x200 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST PUSH1 0x0 SLOAD ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 SLOAD DUP2 EQ PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x22F DUP5 PUSH2 0x6A7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x23F DUP8 PUSH2 0x660 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x253 DUP3 DUP5 DUP4 DUP10 PUSH1 0x0 PUSH2 0x286 JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x26B JUMPI PUSH2 0x264 DUP8 PUSH2 0x6AF JUMP JUMPDEST SWAP7 POP PUSH2 0x277 JUMP JUMPDEST DUP6 SWAP5 POP POP POP POP POP PUSH2 0x280 JUMP JUMPDEST POP POP POP POP PUSH2 0x224 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP8 DUP3 AND LT SWAP1 DUP4 AND PUSH2 0x2B1 JUMPI PUSH1 0x0 DUP5 SWAP1 SSTORE JUMPDEST PUSH2 0x2BC DUP8 DUP8 DUP8 PUSH2 0x6E4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x2E2 DUP9 PUSH2 0x722 JUMP JUMPDEST PUSH1 0x0 SUB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x307 JUMPI DUP8 PUSH2 0x32D JUMP JUMPDEST DUP6 PUSH2 0x326 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x32D JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP12 DUP12 DUP15 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x342 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x371 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x3D8 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x3D5 SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x43E JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x40B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 SSTORE JUMPDEST PUSH2 0x435 DUP2 PUSH2 0x754 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x442 JUMP JUMPDEST POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x0 PUSH2 0x4A1 DUP5 PUSH2 0x6A7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4B1 DUP8 PUSH2 0x660 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x4C5 DUP4 DUP4 DUP4 DUP10 PUSH1 0x0 PUSH2 0x4E1 JUMP JUMPDEST SWAP6 POP DUP4 ISZERO PUSH2 0x26B JUMPI PUSH2 0x4D6 DUP8 PUSH2 0x6AF JUMP JUMPDEST SWAP7 POP POP POP POP POP PUSH2 0x496 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND SWAP1 DUP8 AND LT PUSH2 0x50A DUP8 DUP8 DUP8 PUSH2 0x6E4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP4 PUSH2 0x530 DUP9 PUSH2 0x722 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND ISZERO PUSH2 0x552 JUMPI DUP8 PUSH2 0x578 JUMP JUMPDEST DUP6 PUSH2 0x571 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x578 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP13 DUP12 DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x58D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x101E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BC SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x623 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x620 SWAP2 DUP2 ADD SWAP1 PUSH2 0xEE1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x43E JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x651 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x656 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH2 0x435 DUP2 PUSH2 0x754 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x66E DUP5 DUP3 PUSH2 0x805 JUMP JUMPDEST SWAP3 POP PUSH2 0x67B DUP5 PUSH1 0x14 PUSH2 0x905 JUMP JUMPDEST SWAP1 POP PUSH2 0x688 DUP5 PUSH1 0x17 PUSH2 0x805 JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x442 DUP6 PUSH2 0x6A2 DUP7 DUP7 DUP7 PUSH2 0x9F5 JUMP JUMPDEST PUSH2 0xA72 JUMP JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x280 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0xAA2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x71A PUSH32 0x0 PUSH2 0x715 DUP7 DUP7 DUP7 PUSH2 0x9F5 JUMP JUMPDEST PUSH2 0xC89 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x750 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x7F1 JUMPI PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x7A4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x79B SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x7BE SWAP2 SWAP1 PUSH2 0xF52 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x79B SWAP2 SWAP1 PUSH2 0x10F7 JUMP JUMPDEST DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x280 SWAP2 SWAP1 PUSH2 0xFBC JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x879 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x979 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x9EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x9FD PUSH2 0xDBF JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0xA35 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA7E DUP4 DUP4 PUSH2 0xC89 JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x280 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0xB16 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0xB87 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0xBF9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0xC18 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xC80 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0xC51 JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xC39 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xCCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x203C8EC649B23B7FAF9B73CCADFB1A67AF52A097119C82801F4947EC5DEB6C04 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xDEF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE02 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST PUSH2 0x1151 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0xE16 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xE47 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xE52 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xE62 DUP2 PUSH2 0x11E5 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE79 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0xE90 DUP2 PUSH2 0x11E5 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEB0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xEC6 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xED2 DUP6 DUP3 DUP7 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEF3 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xF18 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF3C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xF48 DUP7 DUP3 DUP8 ADD PUSH2 0xDDF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF63 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF79 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0xF89 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xF97 PUSH2 0xDFD DUP3 PUSH2 0x1175 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0xFAB JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x442 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFCD JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xFEC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x10EC PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x110A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xFD4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x116D JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1189 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11D0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11B8 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x11DF JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "1027:5709:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1686:1243;;;;;;:::i;:::-;;:::i;:::-;;6069:665;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4961:1074;;;;;;:::i;:::-;;:::i;420:38:16:-;;;:::i;:::-;;;;;;;:::i;328:41::-;;;:::i;4267:660:76:-;;;;;;:::i;:::-;;:::i;3415:818::-;;;;;;:::i;:::-;;:::i;1686:1243::-;1862:1;1847:12;:16;:36;;;;1882:1;1867:12;:16;1847:36;1839:45;;;;;;1958:15;1975:16;1993:10;2007:22;:4;:20;:22::i;:::-;1957:72;;;;;;2039:66;2073:7;2082;2091:8;2101:3;2039:33;:66::i;:::-;;2117:17;2136:19;2157:22;2210:1;2195:12;:16;:188;;2328:7;2317:18;;:8;:18;;;2345:12;2369;2368:13;;2195:188;;;2241:8;2231:18;;:7;:18;;;2259:12;2283;2282:13;;2195:188;2116:267;;;;;;2397:12;2393:530;;;2469:4;2463:11;2503:14;2498:3;2491:27;2547:2;2542:3;2535:15;2434:130;2699:15;;:20;2695:68;;2747:15;;2729:14;:33;2721:42;;;;;;2821:4;2815:11;2855;2850:3;2843:24;2896:2;2891:3;2884:15;6069:665;6160:16;6188:540;6215:21;6239:23;:4;:21;:23::i;:::-;6215:47;;6278:16;6296:15;6313:10;6327:22;:4;:20;:22::i;:::-;6277:72;;;;;;6455:60;6478:7;6487:8;6497:3;6502:9;6513:1;6455:22;:60::i;:::-;6443:72;;6589:16;6585:133;;;6632:16;:4;:14;:16::i;:::-;6625:23;;6585:133;;;6694:9;6687:16;;;;;;;;6585:133;6188:540;;;;;;;6069:665;;;;:::o;4961:1074::-;5157:16;5203:18;;;;;;;;;5345:22;;5341:55;;5369:15;:27;;;5341:55;5422:31;5430:7;5439:8;5449:3;5422:7;:31::i;:::-;:36;;;5484:4;5557:10;5586:20;:9;:18;:20::i;:::-;5585:21;;5624:22;;;;:157;;5764:17;5624:157;;;5670:10;:70;;5713:27;5670:70;;;5683:27;5670:70;5816:8;5826:3;5831:7;5799:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5422:431;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5422:431:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;5406:623;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5911:22:76;;;5907:50;;5942:15;5935:22;;5907:50;5993:25;6011:6;5993:17;:25::i;:::-;5986:32;;;;;;5406:623;;;4961:1074;;;;;;;;;:::o;420:38:16:-;;;:::o;328:41::-;;;:::o;4267:660:76:-;4356:17;4385:536;4412:21;4436:23;:4;:21;:23::i;:::-;4412:47;;4475:15;4492:16;4510:10;4524:22;:4;:20;:22::i;:::-;4474:72;;;;;;4651:58;4673:7;4682:8;4692:3;4697:8;4707:1;4651:21;:58::i;:::-;4640:69;;4783:16;4779:132;;;4826:16;:4;:14;:16::i;:::-;4819:23;;4385:536;;;;;;3415:818;3609:17;3656:18;;;;;;;;3701:31;3656:7;3666:8;3728:3;3701:7;:31::i;:::-;:36;;;3763:4;3836:10;3864:19;:8;:17;:19::i;:::-;3901:22;;;;:157;;4041:17;3901:157;;;3947:10;:70;;3990:27;3947:70;;;3960:27;3947:70;4093:7;4102:3;4107:8;4076:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3701:429;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3701:429:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;3685:542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4191:25;4209:6;4191:17;:25::i;1779:240:34:-;1846:14;;;1909:17;:4;1846:14;1909;:17::i;:::-;1900:26;-1:-1:-1;1942:24:34;:4;304:2;1942:13;:24::i;:::-;1936:30;-1:-1:-1;1985:27:34;:4;507:20;1985:14;:27::i;:::-;1976:36;;1779:240;;;;;:::o;742:257:32:-;888:17;924:68;939:7;948:43;971:6;979;987:3;948:22;:43::i;:::-;924:14;:68::i;992:138:34:-;1083:11;777:24;-1:-1:-1;1083:40:34;;992:138::o;2561:149::-;2677:11;;2622:12;;2653:50;;2677:4;;507:20;;2677:25;;2653:10;:50::i;1394:245:76:-;1507:12;1551:80;1578:7;1587:43;1610:6;1618;1626:3;1587:22;:43::i;:::-;1551:26;:80::i;:::-;1531:101;1394:245;-1:-1:-1;;;;1394:245:76:o;924:123:11:-;976:8;1008;1004:1;:12;996:21;;;;;;-1:-1:-1;1038:1:11;924:123::o;3009:372:76:-;3079:7;3102:6;:13;3119:2;3102:19;3098:231;;3157:2;3141:6;:13;:18;3137:50;;;3161:26;;;;;;;;;;:::i;:::-;;;;;;;;3137:50;3250:4;3242:6;3238:17;3228:27;;3300:6;3289:28;;;;;;;;;;;;:::i;:::-;3282:36;;;;;;;;;;;:::i;3098:231::-;3356:6;3345:29;;;;;;;;;;;;:::i;3214:416:31:-;3293:7;3335:6;3320;3329:2;3320:11;:21;;3312:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3399:6;3408:2;3399:11;3382:6;:13;:28;;3374:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3524:30:31;3540:4;3524:30;3518:37;3557:27;3514:71;;;3214:416::o;3636:365::-;3714:6;3754;3740;3749:1;3740:10;:20;;3732:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3817:6;3826:1;3817:10;3800:6;:13;:27;;3792:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3929:29:31;3945:3;3929:29;3923:36;;3636:365::o;784:244:35:-;871:14;;:::i;:::-;910:6;901:15;;:6;:15;;;897:56;;;938:6;;946;897:56;-1:-1:-1;970:51:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;784:244::o;1248:269:32:-;1370:17;1419:44;1446:7;1455;1419:26;:44::i;:::-;1399:65;-1:-1:-1;1482:10:32;:27;;;;1474:36;;;;;399:2809:31;491:12;539:7;523;533:2;523:12;:23;;515:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;603:6;592:7;583:6;:16;:26;;575:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;672:7;663:6;:16;646:6;:13;:33;;638:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;712:22;775:15;;803:1967;;;;2911:4;2905:11;2892:24;;3097:1;3086:9;3079:20;3145:4;3134:9;3130:20;3124:4;3117:34;768:2397;;803:1967;985:4;979:11;966:24;;1644:2;1635:7;1631:16;2026:9;2019:17;2013:4;2009:28;1997:9;1986;1982:25;1978:60;2074:7;2070:2;2066:16;2326:6;2312:9;2305:17;2299:4;2295:28;2283:9;2275:6;2271:22;2267:57;2263:70;2100:425;2359:3;2355:2;2352:11;2100:425;;;2497:9;;2486:21;;2400:4;2392:13;;;;2432;2100:425;;;-1:-1:-1;;2543:26:31;;;2751:2;2734:11;2747:7;2730:25;2724:4;2717:39;-1:-1:-1;768:2397:31;-1:-1:-1;3192:9:31;399:2809;-1:-1:-1;;;;399:2809:31:o;1276:512:35:-;1360:12;1405:3;:10;;;1392:23;;:3;:10;;;:23;;;1384:32;;;;;;-1:-1:-1;1639:10:35;;1651;;;;;1663:7;;;;;1628:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1618:54;;;;;;1510:229;;;;;;;;;;;;;;;;;;;;;241:66;1510:229;;;;;;;;;;;;;;;;;;;;;;;;;1479:278;;;;;;1276:512::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:485:89:-;;111:3;104:4;96:6;92:17;88:27;78:2;;133:5;126;119:20;78:2;173:6;160:20;204:49;219:33;249:2;219:33;:::i;:::-;204:49;:::i;:::-;278:2;269:7;262:19;324:3;317:4;312:2;304:6;300:15;296:26;293:35;290:2;;;345:5;338;331:20;290:2;414;407:4;399:6;395:17;388:4;379:7;375:18;362:55;437:16;;;455:4;433:27;426:42;;;;441:7;68:431;-1:-1:-1;;68:431:89:o;504:795::-;;;;;;683:3;671:9;662:7;658:23;654:33;651:2;;;705:6;697;690:22;651:2;749:9;736:23;768:33;795:5;768:33;:::i;:::-;820:5;-1:-1:-1;877:2:89;862:18;;849:32;890:35;849:32;890:35;:::i;:::-;944:7;-1:-1:-1;1003:2:89;988:18;;975:32;1051:8;1038:22;;1026:35;;1016:2;;1080:6;1072;1065:22;1016:2;1108:7;-1:-1:-1;1162:2:89;1147:18;;1134:32;;-1:-1:-1;1218:3:89;1203:19;;1190:33;1232:35;1190:33;1232:35;:::i;:::-;1286:7;1276:17;;;641:658;;;;;;;;:::o;1304:410::-;;;1442:2;1430:9;1421:7;1417:23;1413:32;1410:2;;;1463:6;1455;1448:22;1410:2;1508:9;1495:23;1541:18;1533:6;1530:30;1527:2;;;1578:6;1570;1563:22;1527:2;1606:51;1649:7;1640:6;1629:9;1625:22;1606:51;:::i;:::-;1596:61;1704:2;1689:18;;;;1676:32;;-1:-1:-1;;;;1400:314:89:o;1719:253::-;;;1857:2;1845:9;1836:7;1832:23;1828:32;1825:2;;;1878:6;1870;1863:22;1825:2;-1:-1:-1;;1906:16:89;;1962:2;1947:18;;;1941:25;1906:16;;1941:25;;-1:-1:-1;1815:157:89:o;1977:476::-;;;;2130:2;2118:9;2109:7;2105:23;2101:32;2098:2;;;2151:6;2143;2136:22;2098:2;2192:9;2179:23;2169:33;;2249:2;2238:9;2234:18;2221:32;2211:42;;2304:2;2293:9;2289:18;2276:32;2331:18;2323:6;2320:30;2317:2;;;2368:6;2360;2353:22;2317:2;2396:51;2439:7;2430:6;2419:9;2415:22;2396:51;:::i;:::-;2386:61;;;2088:365;;;;;:::o;2458:676::-;;2591:2;2579:9;2570:7;2566:23;2562:32;2559:2;;;2612:6;2604;2597:22;2559:2;2650:9;2644:16;2683:18;2675:6;2672:30;2669:2;;;2720:6;2712;2705:22;2669:2;2748:22;;2801:4;2793:13;;2789:27;-1:-1:-1;2779:2:89;;2835:6;2827;2820:22;2779:2;2869;2863:9;2894:49;2909:33;2939:2;2909:33;:::i;2894:49::-;2966:2;2959:5;2952:17;3006:7;3001:2;2996;2992;2988:11;2984:20;2981:33;2978:2;;;3032:6;3024;3017:22;2978:2;3050:54;3101:2;3096;3089:5;3085:14;3080:2;3076;3072:11;3050:54;:::i;3139:194::-;;3262:2;3250:9;3241:7;3237:23;3233:32;3230:2;;;3283:6;3275;3268:22;3230:2;-1:-1:-1;3311:16:89;;3220:113;-1:-1:-1;3220:113:89:o;3338:318::-;;3419:5;3413:12;3446:6;3441:3;3434:19;3462:63;3518:6;3511:4;3506:3;3502:14;3495:4;3488:5;3484:16;3462:63;:::i;:::-;3570:2;3558:15;3575:66;3554:88;3545:98;;;;3645:4;3541:109;;3389:267;-1:-1:-1;;3389:267:89:o;3661:514::-;3949:2;3945:15;;;3854:66;3941:24;;;3929:37;;4004:3;4000:16;;;;4018:66;3996:89;3991:2;3982:12;;3975:111;4120:15;;4116:24;4111:2;4102:12;;4095:46;4166:2;4157:12;;3834:341::o;4180:226::-;4356:42;4344:55;;;;4326:74;;4314:2;4299:18;;4281:125::o;4411:593::-;;4654:42;4735:2;4727:6;4723:15;4712:9;4705:34;4789:6;4782:14;4775:22;4770:2;4759:9;4755:18;4748:50;4834:6;4829:2;4818:9;4814:18;4807:34;4889:2;4881:6;4877:15;4872:2;4861:9;4857:18;4850:43;;4930:3;4924;4913:9;4909:19;4902:32;4951:47;4993:3;4982:9;4978:19;4970:6;4951:47;:::i;:::-;4943:55;4634:370;-1:-1:-1;;;;;;;4634:370:89:o;5009:221::-;;5158:2;5147:9;5140:21;5178:46;5220:2;5209:9;5205:18;5197:6;5178:46;:::i;:::-;5170:54;5130:100;-1:-1:-1;;;5130:100:89:o;5235:340::-;5437:2;5419:21;;;5476:2;5456:18;;;5449:30;5515:18;5510:2;5495:18;;5488:46;5566:2;5551:18;;5409:166::o;5580:177::-;5726:25;;;5714:2;5699:18;;5681:76::o;5762:242::-;5832:2;5826:9;5862:17;;;5909:18;5894:34;;5930:22;;;5891:62;5888:2;;;5956:9;5888:2;5983;5976:22;5806:198;;-1:-1:-1;5806:198:89:o;6009:240::-;;6092:18;6084:6;6081:30;6078:2;;;6114:9;6078:2;-1:-1:-1;6162:4:89;6150:17;6169:66;6146:90;6238:4;6142:101;;6068:181::o;6254:258::-;6326:1;6336:113;6350:6;6347:1;6344:13;6336:113;;;6426:11;;;6420:18;6407:11;;;6400:39;6372:2;6365:10;6336:113;;;6467:6;6464:1;6461:13;6458:2;;;6502:1;6493:6;6488:3;6484:16;6477:27;6458:2;;6307:205;;;:::o;6517:156::-;6605:42;6598:5;6594:54;6587:5;6584:65;6574:2;;6663:1;6660;6653:12;6574:2;6564:109;:::o"
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "astraCLSwapCallback(int256,int256,bytes)": "11c17848",
              "factory()": "c45a0155",
              "quoteExactInput(bytes,uint256)": "cdca1753",
              "quoteExactInputSingle(address,address,uint24,uint256,uint160)": "f7729d43",
              "quoteExactOutput(bytes,uint256)": "2f80bb1d",
              "quoteExactOutputSingle(address,address,uint24,uint256,uint160)": "30d07f21"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_SAMB\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"name\":\"astraCLSwapCallback\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"quoteExactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"quoteExactInputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"quoteExactOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"quoteExactOutputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute the swap and check the amounts in the callback.\",\"kind\":\"dev\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IAstraCLPoolActions#swap call\"}},\"quoteExactInput(bytes,uint256)\":{\"params\":{\"amountIn\":\"The amount of the first token to swap\",\"path\":\"The path of the swap, i.e. each token pair and the pool fee\"},\"returns\":{\"amountOut\":\"The amount of the last token that would be received\"}},\"quoteExactInputSingle(address,address,uint24,uint256,uint160)\":{\"params\":{\"amountIn\":\"The desired input amount\",\"fee\":\"The fee of the token pool to consider for the pair\",\"sqrtPriceLimitX96\":\"The price limit of the pool that cannot be exceeded by the swap\",\"tokenIn\":\"The token being swapped in\",\"tokenOut\":\"The token being swapped out\"},\"returns\":{\"amountOut\":\"The amount of `tokenOut` that would be received\"}},\"quoteExactOutput(bytes,uint256)\":{\"params\":{\"amountOut\":\"The amount of the last token to receive\",\"path\":\"The path of the swap, i.e. each token pair and the pool fee. Path must be provided in reverse order\"},\"returns\":{\"amountIn\":\"The amount of first token required to be paid\"}},\"quoteExactOutputSingle(address,address,uint24,uint256,uint160)\":{\"params\":{\"amountOut\":\"The desired output amount\",\"fee\":\"The fee of the token pool to consider for the pair\",\"sqrtPriceLimitX96\":\"The price limit of the pool that cannot be exceeded by the swap\",\"tokenIn\":\"The token being swapped in\",\"tokenOut\":\"The token being swapped out\"},\"returns\":{\"amountIn\":\"The amount required as the input for the swap in order to receive `amountOut`\"}}},\"stateVariables\":{\"amountOutCached\":{\"details\":\"Transient storage variable used to check a safety condition in exact output swaps.\"}},\"title\":\"Provides quotes for swaps\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\"},\"quoteExactInput(bytes,uint256)\":{\"notice\":\"Returns the amount out received for a given exact input swap without executing the swap\"},\"quoteExactInputSingle(address,address,uint24,uint256,uint160)\":{\"notice\":\"Returns the amount out received for a given exact input but for a swap of a single pool\"},\"quoteExactOutput(bytes,uint256)\":{\"notice\":\"Returns the amount in required for a given exact output swap without executing the swap\"},\"quoteExactOutputSingle(address,address,uint24,uint256,uint160)\":{\"notice\":\"Returns the amount in required to receive the given exact output amount but for a swap of a single pool\"}},\"notice\":\"Allows getting the expected amount out or amount in for a given swap without executing the swap\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lens/Quoter.sol\":\"Quoter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":{\"keccak256\":\"0xaa82f63f0c930e51d6aaae0d59e7bf3ef5b32371ac0549f6e07bfcab5b4dcb16\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73419af0b4f35f02c3b89d387d6ac46041637a7133e249de617103b7567bf4c4\",\"dweb:/ipfs/QmTfwEX1dCoUUUMaMFzDnqDcFXihHQnEG1fbkBFpidRs8o\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"@airdao/astra-cl-core/contracts/libraries/SafeCast.sol\":{\"keccak256\":\"0xd4c1c1b67f946b077d7c52a158113763a89a210fc2927b8491055a962ecd18c0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5344400c74320ca8dbe19241db7ff49babbd6c875c1b561c79d6e4315a9fb5f9\",\"dweb:/ipfs/QmRKCNTbkovxK1WvejXZr3iAHhGN97ZT1yWGsWCJFkrT5X\"]},\"@airdao/astra-cl-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xe22d07f1ebf9c8468c81cb6905bfc8f8a54fa2f9b4a50742202a47cdbcb5af80\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d4773ca5008d2a2f496370695942c8ba3d6e1d487adbf5cda1149da12e3a6268\",\"dweb:/ipfs/QmcPYTLpEWfU8e3KAYBfHH7uYR4tGAkvnWrWS1CG8EkyLC\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol\":{\"keccak256\":\"0xed1b8acd0184eb321d5f4b5c2576608d1c12f5db1bb72d950054438f7f1946a6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f55d6aca86dcf1f1ab6413f48964f821306a29914c2117c16f20446faa5d6d0a\",\"dweb:/ipfs/QmWKbbg6kA9kkPVrCh6hJMnPhK1NhuVoHEd9s3vmYWsvTa\"]},\"@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol\":{\"keccak256\":\"0xf21a3d7e2bc14386ce7b072b124b580df53441a32591770845860e8947f942d0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6941e21d9bc52bddc65079c5e7bc9d6ffd6553f6ed7f3d3b340996a55115b46f\",\"dweb:/ipfs/QmaDJ9uafahho77WP5izBCRL4W3mVM7NFL5q5QR5YvAC3A\"]},\"@airdao/astra-cl-periphery/contracts/libraries/Path.sol\":{\"keccak256\":\"0x0a6928608f48763796089e22dfc02a462cce63bb7727663961b3ed8c4f3eb862\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73bb4f107faf873db8700ce8950d2c4c88d41e0e1716da599bb733ad884f95eb\",\"dweb:/ipfs/QmZXSaPVpgDXpkKqYRdByJ3UXaMV2ATkr7V72nRZij8wmB\"]},\"@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0xdd82100913bcb7c490e9e6912ab33994bd97d5a59e67209826ebf917bc8271c1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ecfc24c77d80aa718604d8a2c4d59460b76b5fd567d15206414e3838dd6698b7\",\"dweb:/ipfs/QmVtUC9dnade4RkzXaSqEFdAkiEftJ777jmT619LX2VLGv\"]},\"contracts/interfaces/IQuoter.sol\":{\"keccak256\":\"0x124b4334f058f70afd8f3b04315cc0812961d400957225d0875872b2a31afbff\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://efdc8133033a1596f60f3619a317f8b3af98a6adffd85a9898c5a809c5c22417\",\"dweb:/ipfs/QmRkGjgzgSxhUVxwqiWZuz9M4Ff3TwTbzUgN3yJd4gxMfN\"]},\"contracts/lens/Quoter.sol\":{\"keccak256\":\"0x269ac57e2fd75cc435165be61e6e7fa76ec3f20af53970a9f1ddfd3e43ff65f3\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://32e7e8593b4728817b3e2cf7fdccd7c0a82f82610ac7a98a1d3add2d16329993\",\"dweb:/ipfs/QmXTg7YrsyrX2JFpPjgdSB38pM4JmwNM3ZTnzJjJR1MAjB\"]}},\"version\":1}"
        }
      },
      "contracts/lens/QuoterV2.sol": {
        "QuoterV2": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_factory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_WETH9",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "amount0Delta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1Delta",
                  "type": "int256"
                },
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                }
              ],
              "name": "astraCLSwapCallback",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "name": "quoteExactInput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160[]",
                  "name": "sqrtPriceX96AfterList",
                  "type": "uint160[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "initializedTicksCrossedList",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint256",
                  "name": "gasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct IQuoterV2.QuoteExactInputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "quoteExactInputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96After",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "initializedTicksCrossed",
                  "type": "uint32"
                },
                {
                  "internalType": "uint256",
                  "name": "gasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "name": "quoteExactOutput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160[]",
                  "name": "sqrtPriceX96AfterList",
                  "type": "uint160[]"
                },
                {
                  "internalType": "uint32[]",
                  "name": "initializedTicksCrossedList",
                  "type": "uint32[]"
                },
                {
                  "internalType": "uint256",
                  "name": "gasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct IQuoterV2.QuoteExactOutputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "quoteExactOutputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96After",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "initializedTicksCrossed",
                  "type": "uint32"
                },
                {
                  "internalType": "uint256",
                  "name": "gasEstimate",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:507:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "76:117:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "86:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "101:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "95:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "95:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "86:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "171:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "180:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "183:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "173:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "173:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "173:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "130:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "141:5:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "156:3:89",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "161:1:89",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "152:3:89"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "152:11:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "165:1:89",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "148:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "148:19:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "137:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "137:31:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "127:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "127:42:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "120:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "120:50:89"
                              },
                              "nodeType": "YulIf",
                              "src": "117:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "55:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "66:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:179:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "296:209:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "342:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "351:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "359:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "344:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "344:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "344:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "317:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "326:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "313:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "313:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "338:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "309:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "309:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "306:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "377:52:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "419:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "387:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "387:42:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "377:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "438:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "484:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "495:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "480:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "480:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "448:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "448:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "438:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "254:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "265:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "277:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "285:6:89",
                            "type": ""
                          }
                        ],
                        "src": "198:307:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_t_address_fromMemory(headStart)\n        value1 := abi_decode_t_address_fromMemory(add(headStart, 32))\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60c06040523480156200001157600080fd5b506040516200212c3803806200212c833981016040819052620000349162000070565b6001600160601b0319606092831b8116608052911b1660a052620000a7565b80516001600160a01b03811681146200006b57600080fd5b919050565b6000806040838503121562000083578182fd5b6200008e8362000053565b91506200009e6020840162000053565b90509250929050565b60805160601c60a05160601c612051620000db600039806104dd52508061015a52806107335280610b3f52506120516000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bd21704a1161005b578063bd21704a146100d8578063c45a0155146100fb578063c6a5026a14610103578063cdca1753146101165761007d565b806311c17848146100825780632f80bb1d1461009757806390793ea8146100c3575b600080fd5b610095610090366004611b91565b610129565b005b6100aa6100a5366004611b2b565b6102e5565b6040516100ba9493929190611eac565b60405180910390f35b6100cb6104db565b6040516100ba9190611def565b6100eb6100e6366004611c49565b6104ff565b6040516100ba9493929190611f54565b6100cb610731565b6100eb610111366004611c49565b610755565b6100aa610124366004611b2b565b610910565b60008313806101385750600082135b61014157600080fd5b600080600061014f84610ae8565b9250925092506101817f0000000000000000000000000000000000000000000000000000000000000000848484610b19565b5060008060008089136101c7578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a6000036101fc565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b925092509250600061020f878787610b38565b90506000808273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561025a57600080fd5b505afa15801561026e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102929190611c6b565b50505050509150915085156102b857604051848152826020820152816040820152606081fd5b600054156102ce5760005484146102ce57600080fd5b604051858152826020820152816040820152606081fd5b600060608060006102f586610b76565b67ffffffffffffffff8111801561030b57600080fd5b50604051908082528060200260200182016040528015610335578160200160208202803683370190505b50925061034186610b76565b67ffffffffffffffff8111801561035757600080fd5b50604051908082528060200260200182016040528015610381578160200160208202803683370190505b50915060005b60008060006103958a610ae8565b9250925092506000806000806104186040518060a001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152506104ff565b9350935093509350828b898151811061042d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a898151811061047457fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b926104a18e610ba5565b156104b6576104af8e610bad565b9d506104c6565b8c9b5050505050505050506104d2565b50505050505050610387565b92959194509250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff8082169084161092849261053d9290610b38565b9050866080015173ffffffffffffffffffffffffffffffffffffffff166000141561056b5760408701516000555b60005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb08308561059b8c60400151610be8565b6000038c6080015173ffffffffffffffffffffffffffffffffffffffff166000146105ca578c608001516105f0565b876105e95773fffd8963efd1fc6a506488495d951d5263988d256105f0565b6401000276a45b8d602001518e606001518f6000015160405160200161061193929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610640959493929190611e10565b6040805180830381600087803b15801561065957600080fd5b505af19250505080156106a7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106a491810190611b6e565b60015b610724573d8080156106d5576040519150601f19603f3d011682016040523d82523d6000602084013e6106da565b606091505b505a82039450886080015173ffffffffffffffffffffffffffffffffffffffff166000141561070857600080555b610713818487610c1a565b97509750975097505050505061072a565b50505050505b9193509193565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff808216908416109284926107939290610b38565b905060005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856107c58c60400151610be8565b60808d015173ffffffffffffffffffffffffffffffffffffffff16156107ef578c60800151610815565b8761080e5773fffd8963efd1fc6a506488495d951d5263988d25610815565b6401000276a45b8d600001518e606001518f6020015160405160200161083693929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610865959493929190611e10565b6040805180830381600087803b15801561087e57600080fd5b505af19250505080156108cc575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c991810190611b6e565b60015b610724573d8080156108fa576040519150601f19603f3d011682016040523d82523d6000602084013e6108ff565b606091505b505a82039450610713818487610c1a565b6000606080600061092086610b76565b67ffffffffffffffff8111801561093657600080fd5b50604051908082528060200260200182016040528015610960578160200160208202803683370190505b50925061096c86610b76565b67ffffffffffffffff8111801561098257600080fd5b506040519080825280602002602001820160405280156109ac578160200160208202803683370190505b50915060005b60008060006109c08a610ae8565b925092509250600080600080610a436040518060a001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610755565b9350935093509350828b8981518110610a5857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a8981518110610a9f57fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b92610acc8e610ba5565b156104b657610ada8e610bad565b9d50505050505050506109b2565b60008080610af68482610cee565b9250610b03846014610dee565b9050610b10846017610cee565b91509193909250565b6000610b2f85610b2a868686610ede565b610f5b565b95945050505050565b6000610b6e7f0000000000000000000000000000000000000000000000000000000000000000610b69868686610ede565b610f8b565b949350505050565b805160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec909101045b919050565b516042111590565b8051606090610be29083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9016110c1565b92915050565b60007f80000000000000000000000000000000000000000000000000000000000000008210610c1657600080fd5b5090565b6000806000806000808773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610c6957600080fd5b505afa158015610c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca19190611c6b565b50939650610cb694508d93506112a892505050565b91975095509050610cde73ffffffffffffffffffffffffffffffffffffffff89168383611369565b9350869250505093509350935093565b600081826014011015610d6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015610dd557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015610ed557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b610ee66119fa565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610f1e579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000610f678383610f8b565b90503373ffffffffffffffffffffffffffffffffffffffff821614610be257600080fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610fcd57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b60608182601f01101561113557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8282840110156111a657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561121857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015611237576040519150600082526020820160405261129f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611270578051835260209283019201611258565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60008060008351606014611348576044845110156112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290611e75565b60405180910390fd5b600484019350838060200190518101906113159190611bdf565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f29190611e62565b8380602001905181019061135c9190611d02565b9250925092509193909250565b60008060008060008060008060088b73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156113bd57600080fd5b505afa1580156113d1573d6000803e3d6000fd5b505050506040513d60208110156113e757600080fd5b5051600290810b908c900b816113f957fe5b0560020b901d905060006101008c73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561144c57600080fd5b505afa158015611460573d6000803e3d6000fd5b505050506040513d602081101561147657600080fd5b5051600290810b908d900b8161148857fe5b0560020b8161149357fe5b079050600060088d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114e057600080fd5b505afa1580156114f4573d6000803e3d6000fd5b505050506040513d602081101561150a57600080fd5b5051600290810b908d900b8161151c57fe5b0560020b901d905060006101008e73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d602081101561159957600080fd5b5051600290810b908e900b816115ab57fe5b0560020b816115b657fe5b07905060008160ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296856040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561161757600080fd5b505afa15801561162b573d6000803e3d6000fd5b505050506040513d602081101561164157600080fd5b5051161180156116d457508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561169257600080fd5b505afa1580156116a6573d6000803e3d6000fd5b505050506040513d60208110156116bc57600080fd5b5051600290810b908d900b816116ce57fe5b0760020b155b80156116e557508b60020b8d60020b135b945060008360ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296876040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561174557600080fd5b505afa158015611759573d6000803e3d6000fd5b505050506040513d602081101561176f57600080fd5b50511611801561180257508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117c057600080fd5b505afa1580156117d4573d6000803e3d6000fd5b505050506040513d60208110156117ea57600080fd5b5051600290810b908e900b816117fc57fe5b0760020b155b801561181357508b60020b8d60020b125b95508160010b8460010b128061183f57508160010b8460010b14801561183f57508060ff168360ff1611155b1561185557839950829750819850809650611862565b8199508097508398508296505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff87161b9150505b8560010b8760010b13611999578560010b8760010b14156118d3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff858103161c165b6000818c73ffffffffffffffffffffffffffffffffffffffff16635339c2968a6040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561192a57600080fd5b505afa15801561193e573d6000803e3d6000fd5b505050506040513d602081101561195457600080fd5b5051169050611962816119c1565b61ffff16989098019750506001909501947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61188e565b81156119a6576001880397505b82156119b3576001880397505b505050505050509392505050565b6000805b8215610be2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301909216916001016119c5565b604080516060810182526000808252602082018190529181019190915290565b600082601f830112611a2a578081fd5b8135611a3d611a3882611faf565b611f8b565b818152846020838601011115611a51578283fd5b816020850160208301379081016020019190915292915050565b8051600281900b8114610ba057600080fd5b600060a08284031215611a8e578081fd5b60405160a0810181811067ffffffffffffffff82111715611aab57fe5b6040529050808235611abc8161201f565b81526020830135611acc8161201f565b602082015260408381013590820152606083013562ffffff81168114611af157600080fd5b6060820152611b0260808401611b0e565b60808201525092915050565b8035610ba08161201f565b805161ffff81168114610ba057600080fd5b60008060408385031215611b3d578182fd5b823567ffffffffffffffff811115611b53578283fd5b611b5f85828601611a1a565b95602094909401359450505050565b60008060408385031215611b80578182fd5b505080516020909101519092909150565b600080600060608486031215611ba5578081fd5b8335925060208401359150604084013567ffffffffffffffff811115611bc9578182fd5b611bd586828701611a1a565b9150509250925092565b600060208284031215611bf0578081fd5b815167ffffffffffffffff811115611c06578182fd5b8201601f81018413611c16578182fd5b8051611c24611a3882611faf565b818152856020838501011115611c38578384fd5b610b2f826020830160208601611fef565b600060a08284031215611c5a578081fd5b611c648383611a7d565b9392505050565b600080600080600080600060e0888a031215611c85578283fd5b8751611c908161201f565b9650611c9e60208901611a6b565b9550611cac60408901611b19565b9450611cba60608901611b19565b9350611cc860808901611b19565b925060a088015160ff81168114611cdd578283fd5b60c08901519092508015158114611cf2578182fd5b8091505092959891949750929550565b600080600060608486031215611d16578081fd5b835192506020840151611d288161201f565b9150611d3660408501611a6b565b90509250925092565b60008151808452611d57816020860160208601611fef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152611e5760a0830184611d3f565b979650505050505050565b600060208252611c646020830184611d3f565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611f0257845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611ed0565b505084810360408601528651808252908201925081870190845b81811015611f3e57825163ffffffff1685529383019391830191600101611f1c565b5050505060609290920192909252949350505050565b93845273ffffffffffffffffffffffffffffffffffffffff92909216602084015263ffffffff166040830152606082015260800190565b60405181810167ffffffffffffffff81118282101715611fa757fe5b604052919050565b600067ffffffffffffffff821115611fc357fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381101561200a578181015183820152602001611ff2565b83811115612019576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461204157600080fd5b5056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x212C CODESIZE SUB DUP1 PUSH3 0x212C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x70 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 SHL AND PUSH1 0xA0 MSTORE PUSH3 0xA7 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x83 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH3 0x8E DUP4 PUSH3 0x53 JUMP JUMPDEST SWAP2 POP PUSH3 0x9E PUSH1 0x20 DUP5 ADD PUSH3 0x53 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0x2051 PUSH3 0xDB PUSH1 0x0 CODECOPY DUP1 PUSH2 0x4DD MSTORE POP DUP1 PUSH2 0x15A MSTORE DUP1 PUSH2 0x733 MSTORE DUP1 PUSH2 0xB3F MSTORE POP PUSH2 0x2051 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xBD21704A GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xBD21704A EQ PUSH2 0xD8 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0xFB JUMPI DUP1 PUSH4 0xC6A5026A EQ PUSH2 0x103 JUMPI DUP1 PUSH4 0xCDCA1753 EQ PUSH2 0x116 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x11C17848 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x2F80BB1D EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0xC3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B91 JUMP JUMPDEST PUSH2 0x129 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xAA PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B2B JUMP JUMPDEST PUSH2 0x2E5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBA SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1EAC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCB PUSH2 0x4DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBA SWAP2 SWAP1 PUSH2 0x1DEF JUMP JUMPDEST PUSH2 0xEB PUSH2 0xE6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C49 JUMP JUMPDEST PUSH2 0x4FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBA SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0xCB PUSH2 0x731 JUMP JUMPDEST PUSH2 0xEB PUSH2 0x111 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C49 JUMP JUMPDEST PUSH2 0x755 JUMP JUMPDEST PUSH2 0xAA PUSH2 0x124 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B2B JUMP JUMPDEST PUSH2 0x910 JUMP JUMPDEST PUSH1 0x0 DUP4 SGT DUP1 PUSH2 0x138 JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x14F DUP5 PUSH2 0xAE8 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x181 PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0xB19 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP10 SGT PUSH2 0x1C7 JUMPI DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP9 DUP11 PUSH1 0x0 SUB PUSH2 0x1FC JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 DUP10 PUSH1 0x0 SUB JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x20F DUP8 DUP8 DUP8 PUSH2 0xB38 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x292 SWAP2 SWAP1 PUSH2 0x1C6B JUMP JUMPDEST POP POP POP POP POP SWAP2 POP SWAP2 POP DUP6 ISZERO PUSH2 0x2B8 JUMPI PUSH1 0x40 MLOAD DUP5 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 REVERT JUMPDEST PUSH1 0x0 SLOAD ISZERO PUSH2 0x2CE JUMPI PUSH1 0x0 SLOAD DUP5 EQ PUSH2 0x2CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP6 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x2F5 DUP7 PUSH2 0xB76 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x30B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x335 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0x341 DUP7 PUSH2 0xB76 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x357 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x381 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x395 DUP11 PUSH2 0xAE8 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x418 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH3 0xFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x4FF JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP3 DUP12 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x42D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x474 JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP12 POP SWAP7 DUP3 ADD SWAP7 PUSH1 0x1 SWAP1 SWAP7 ADD SWAP6 DUP12 SWAP3 PUSH2 0x4A1 DUP15 PUSH2 0xBA5 JUMP JUMPDEST ISZERO PUSH2 0x4B6 JUMPI PUSH2 0x4AF DUP15 PUSH2 0xBAD JUMP JUMPDEST SWAP14 POP PUSH2 0x4C6 JUMP JUMPDEST DUP13 SWAP12 POP POP POP POP POP POP POP POP POP PUSH2 0x4D2 JUMP JUMPDEST POP POP POP POP POP POP POP PUSH2 0x387 JUMP JUMPDEST SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP2 MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP1 DUP5 AND LT SWAP3 DUP5 SWAP3 PUSH2 0x53D SWAP3 SWAP1 PUSH2 0xB38 JUMP JUMPDEST SWAP1 POP DUP7 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 EQ ISZERO PUSH2 0x56B JUMPI PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x0 SSTORE JUMPDEST PUSH1 0x0 GAS SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP6 PUSH2 0x59B DUP13 PUSH1 0x40 ADD MLOAD PUSH2 0xBE8 JUMP JUMPDEST PUSH1 0x0 SUB DUP13 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 EQ PUSH2 0x5CA JUMPI DUP13 PUSH1 0x80 ADD MLOAD PUSH2 0x5F0 JUMP JUMPDEST DUP8 PUSH2 0x5E9 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x5F0 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x20 ADD MLOAD DUP15 PUSH1 0x60 ADD MLOAD DUP16 PUSH1 0x0 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x611 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1D89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x640 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E10 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x659 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x6A7 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x6A4 SWAP2 DUP2 ADD SWAP1 PUSH2 0x1B6E JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x724 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x6D5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6DA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP GAS DUP3 SUB SWAP5 POP DUP9 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 EQ ISZERO PUSH2 0x708 JUMPI PUSH1 0x0 DUP1 SSTORE JUMPDEST PUSH2 0x713 DUP2 DUP5 DUP8 PUSH2 0xC1A JUMP JUMPDEST SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP POP POP POP POP PUSH2 0x72A JUMP JUMPDEST POP POP POP POP POP JUMPDEST SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP2 MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP1 DUP5 AND LT SWAP3 DUP5 SWAP3 PUSH2 0x793 SWAP3 SWAP1 PUSH2 0xB38 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 GAS SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP6 PUSH2 0x7C5 DUP13 PUSH1 0x40 ADD MLOAD PUSH2 0xBE8 JUMP JUMPDEST PUSH1 0x80 DUP14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x7EF JUMPI DUP13 PUSH1 0x80 ADD MLOAD PUSH2 0x815 JUMP JUMPDEST DUP8 PUSH2 0x80E JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x815 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x0 ADD MLOAD DUP15 PUSH1 0x60 ADD MLOAD DUP16 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x836 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1D89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E10 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x8CC JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x8C9 SWAP2 DUP2 ADD SWAP1 PUSH2 0x1B6E JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x724 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x8FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x8FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP GAS DUP3 SUB SWAP5 POP PUSH2 0x713 DUP2 DUP5 DUP8 PUSH2 0xC1A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x920 DUP7 PUSH2 0xB76 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x936 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x960 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0x96C DUP7 PUSH2 0xB76 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x982 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x9AC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x9C0 DUP11 PUSH2 0xAE8 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xA43 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH3 0xFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x755 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP3 DUP12 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0xA58 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0xA9F JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP12 POP SWAP7 DUP3 ADD SWAP7 PUSH1 0x1 SWAP1 SWAP7 ADD SWAP6 DUP12 SWAP3 PUSH2 0xACC DUP15 PUSH2 0xBA5 JUMP JUMPDEST ISZERO PUSH2 0x4B6 JUMPI PUSH2 0xADA DUP15 PUSH2 0xBAD JUMP JUMPDEST SWAP14 POP POP POP POP POP POP POP POP PUSH2 0x9B2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xAF6 DUP5 DUP3 PUSH2 0xCEE JUMP JUMPDEST SWAP3 POP PUSH2 0xB03 DUP5 PUSH1 0x14 PUSH2 0xDEE JUMP JUMPDEST SWAP1 POP PUSH2 0xB10 DUP5 PUSH1 0x17 PUSH2 0xCEE JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB2F DUP6 PUSH2 0xB2A DUP7 DUP7 DUP7 PUSH2 0xEDE JUMP JUMPDEST PUSH2 0xF5B JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB6E PUSH32 0x0 PUSH2 0xB69 DUP7 DUP7 DUP7 PUSH2 0xEDE JUMP JUMPDEST PUSH2 0xF8B JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x17 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC SWAP1 SWAP2 ADD DIV JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0xBE2 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x10C1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0xC16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCA1 SWAP2 SWAP1 PUSH2 0x1C6B JUMP JUMPDEST POP SWAP4 SWAP7 POP PUSH2 0xCB6 SWAP5 POP DUP14 SWAP4 POP PUSH2 0x12A8 SWAP3 POP POP POP JUMP JUMPDEST SWAP2 SWAP8 POP SWAP6 POP SWAP1 POP PUSH2 0xCDE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP4 DUP4 PUSH2 0x1369 JUMP JUMPDEST SWAP4 POP DUP7 SWAP3 POP POP POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0xD62 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0xDD5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0xE62 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0xED5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0xEE6 PUSH2 0x19FA JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0xF1E JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF67 DUP4 DUP4 PUSH2 0xF8B JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0xBE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xFCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x203C8EC649B23B7FAF9B73CCADFB1A67AF52A097119C82801F4947EC5DEB6C04 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0x1135 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0x11A6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0x1218 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x1237 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x129F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x1270 JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x1258 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x60 EQ PUSH2 0x1348 JUMPI PUSH1 0x44 DUP5 MLOAD LT ISZERO PUSH2 0x12FB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12F2 SWAP1 PUSH2 0x1E75 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP5 ADD SWAP4 POP DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1315 SWAP2 SWAP1 PUSH2 0x1BDF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12F2 SWAP2 SWAP1 PUSH2 0x1E62 JUMP JUMPDEST DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x135C SWAP2 SWAP1 PUSH2 0x1D02 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x8 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP13 SWAP1 SIGNEXTEND DUP2 PUSH2 0x13F9 JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x144C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1460 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1476 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x1488 JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0x1493 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 PUSH1 0x8 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x150A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x151C JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP15 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x156F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1583 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x15AB JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0x15B6 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1617 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x162B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1641 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x16D4 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x16CE JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x16E5 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SGT JUMPDEST SWAP5 POP PUSH1 0x0 DUP4 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1745 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1759 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x176F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x1802 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x17EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x17FC JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1813 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SLT JUMPDEST SWAP6 POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND SLT DUP1 PUSH2 0x183F JUMPI POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND EQ DUP1 ISZERO PUSH2 0x183F JUMPI POP DUP1 PUSH1 0xFF AND DUP4 PUSH1 0xFF AND GT ISZERO JUMPDEST ISZERO PUSH2 0x1855 JUMPI DUP4 SWAP10 POP DUP3 SWAP8 POP DUP2 SWAP9 POP DUP1 SWAP7 POP PUSH2 0x1862 JUMP JUMPDEST DUP2 SWAP10 POP DUP1 SWAP8 POP DUP4 SWAP9 POP DUP3 SWAP7 POP JUMPDEST POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP8 AND SHL SWAP2 POP POP JUMPDEST DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND SGT PUSH2 0x1999 JUMPI DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND EQ ISZERO PUSH2 0x18D3 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP6 DUP2 SUB AND SHR AND JUMPDEST PUSH1 0x0 DUP2 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x192A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x193E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1954 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND SWAP1 POP PUSH2 0x1962 DUP2 PUSH2 0x19C1 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP9 SWAP1 SWAP9 ADD SWAP8 POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x188E JUMP JUMPDEST DUP2 ISZERO PUSH2 0x19A6 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST DUP3 ISZERO PUSH2 0x19B3 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 ISZERO PUSH2 0xBE2 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD SWAP1 SWAP3 AND SWAP2 PUSH1 0x1 ADD PUSH2 0x19C5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1A2A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1A3D PUSH2 0x1A38 DUP3 PUSH2 0x1FAF JUMP JUMPDEST PUSH2 0x1F8B JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x1A51 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0xBA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A8E JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1AAB JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP1 POP DUP1 DUP3 CALLDATALOAD PUSH2 0x1ABC DUP2 PUSH2 0x201F JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1ACC DUP2 PUSH2 0x201F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1AF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1B02 PUSH1 0x80 DUP5 ADD PUSH2 0x1B0E JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xBA0 DUP2 PUSH2 0x201F JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xBA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B3D JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B53 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x1B5F DUP6 DUP3 DUP7 ADD PUSH2 0x1A1A JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B80 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1BA5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BC9 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1BD5 DUP7 DUP3 DUP8 ADD PUSH2 0x1A1A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BF0 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1C06 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x1C16 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x1C24 PUSH2 0x1A38 DUP3 PUSH2 0x1FAF JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x1C38 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xB2F DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1FEF JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C5A JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1C64 DUP4 DUP4 PUSH2 0x1A7D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1C85 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1C90 DUP2 PUSH2 0x201F JUMP JUMPDEST SWAP7 POP PUSH2 0x1C9E PUSH1 0x20 DUP10 ADD PUSH2 0x1A6B JUMP JUMPDEST SWAP6 POP PUSH2 0x1CAC PUSH1 0x40 DUP10 ADD PUSH2 0x1B19 JUMP JUMPDEST SWAP5 POP PUSH2 0x1CBA PUSH1 0x60 DUP10 ADD PUSH2 0x1B19 JUMP JUMPDEST SWAP4 POP PUSH2 0x1CC8 PUSH1 0x80 DUP10 ADD PUSH2 0x1B19 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1CDD JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0xC0 DUP10 ADD MLOAD SWAP1 SWAP3 POP DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1CF2 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1D16 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x1D28 DUP2 PUSH2 0x201F JUMP JUMPDEST SWAP2 POP PUSH2 0x1D36 PUSH1 0x40 DUP6 ADD PUSH2 0x1A6B JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1D57 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1FEF JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x1E57 PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x1D3F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1C64 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1D3F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD DUP7 DUP4 MSTORE PUSH1 0x20 PUSH1 0x80 DUP2 DUP6 ADD MSTORE DUP2 DUP8 MLOAD DUP1 DUP5 MSTORE PUSH1 0xA0 DUP7 ADD SWAP2 POP DUP3 DUP10 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1F02 JUMPI DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1ED0 JUMP JUMPDEST POP POP DUP5 DUP2 SUB PUSH1 0x40 DUP7 ADD MSTORE DUP7 MLOAD DUP1 DUP3 MSTORE SWAP1 DUP3 ADD SWAP3 POP DUP2 DUP8 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1F3E JUMPI DUP3 MLOAD PUSH4 0xFFFFFFFF AND DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1F1C JUMP JUMPDEST POP POP POP POP PUSH1 0x60 SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1FA7 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1FC3 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x200A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FF2 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2019 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2041 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "1140:9313:77:-:0;;;1462:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;520:18:16;;;;;;;;548:12;;;;;1140:9313:77;;14:179:89;95:13;;-1:-1:-1;;;;;137:31:89;;127:42;;117:2;;183:1;180;173:12;117:2;76:117;;;:::o;198:307::-;;;338:2;326:9;317:7;313:23;309:32;306:2;;;359:6;351;344:22;306:2;387:42;419:9;387:42;:::i;:::-;377:52;;448:51;495:2;484:9;480:18;448:51;:::i;:::-;438:61;;296:209;;;;;:::o;:::-;1140:9313:77;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:10703:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "68:431:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "117:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "126:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "133:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "119:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "119:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "119:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "96:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "104:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "92:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "92:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "111:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "88:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "88:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "81:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "81:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "78:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "150:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "173:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "160:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "160:20:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "154:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "189:64:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "249:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "219:29:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "219:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "204:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "204:49:89"
                              },
                              "variables": [
                                {
                                  "name": "array_1",
                                  "nodeType": "YulTypedName",
                                  "src": "193:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "269:7:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "278:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "262:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "262:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "262:19:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "329:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "338:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "345:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "331:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "331:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "331:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "304:6:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "312:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "300:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "300:15:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "317:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "296:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "296:26:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "324:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "293:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "293:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "290:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "array_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "379:7:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "388:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "375:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "375:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "399:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "407:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "395:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "395:17:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "414:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "362:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "362:55:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "362:55:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "array_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "441:7:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "450:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "437:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "437:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "455:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "433:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "433:27:89"
                                  },
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "462:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "426:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "426:42:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "426:42:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "477:16:89",
                              "value": {
                                "name": "array_1",
                                "nodeType": "YulIdentifier",
                                "src": "486:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "477:5:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "50:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "58:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:485:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "564:106:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "574:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "589:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "583:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "583:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "574:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "648:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "657:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "660:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "650:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "650:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "650:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "618:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "636:1:89",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "639:5:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "625:10:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "625:20:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "615:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "615:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "608:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "608:39:89"
                              },
                              "nodeType": "YulIf",
                              "src": "605:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_int24_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "543:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "554:5:89",
                            "type": ""
                          }
                        ],
                        "src": "504:166:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "762:868:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "806:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "815:5:89"
                                        },
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "822:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "808:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "808:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "808:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "783:3:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "788:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "779:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "779:19:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "800:4:89",
                                    "type": "",
                                    "value": "0xa0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "775:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "775:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "772:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "839:23:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "859:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "853:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "853:9:89"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "843:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "871:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "893:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "901:4:89",
                                    "type": "",
                                    "value": "0xa0"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "889:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "889:17:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "875:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "981:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "983:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "983:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "983:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "924:10:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "936:18:89",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "921:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "921:34:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "960:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "972:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "957:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "957:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "918:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "918:62:89"
                              },
                              "nodeType": "YulIf",
                              "src": "915:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1010:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1014:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1003:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1003:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1003:22:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1034:15:89",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1043:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "1034:5:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1058:38:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1086:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1073:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1073:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1062:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1132:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1105:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1105:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1105:35:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1156:6:89"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1164:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1149:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1149:23:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1149:23:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1181:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1213:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1224:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1209:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1209:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1196:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1196:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1185:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1264:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1237:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1237:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1237:35:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1292:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1300:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1288:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1288:15:89"
                                  },
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1305:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1281:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1281:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1281:32:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1333:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1341:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1329:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1329:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "1363:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1374:2:89",
                                            "type": "",
                                            "value": "64"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1359:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1359:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "1346:12:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1346:32:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1322:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1322:57:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1322:57:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1388:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1420:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1431:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1416:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1416:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1403:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1403:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1392:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1491:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1500:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1503:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1493:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1493:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1493:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "1457:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1470:7:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1479:8:89",
                                            "type": "",
                                            "value": "0xffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "1466:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1466:22:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1454:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1454:35:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1447:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1447:43:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1444:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1527:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1535:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1523:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1523:15:89"
                                  },
                                  {
                                    "name": "value_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1540:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1516:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1516:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1516:32:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1568:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1576:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1564:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1564:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "1607:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1618:3:89",
                                            "type": "",
                                            "value": "128"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1603:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1603:19:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_uint160",
                                      "nodeType": "YulIdentifier",
                                      "src": "1582:20:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1582:41:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1557:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1557:67:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1557:67:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_struct$_QuoteExactInputSingleParams",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "733:9:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "744:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "752:5:89",
                            "type": ""
                          }
                        ],
                        "src": "675:955:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1686:87:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1696:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1718:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1705:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1705:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "1696:5:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1761:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1734:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1734:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1734:33:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1665:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1676:5:89",
                            "type": ""
                          }
                        ],
                        "src": "1635:138:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1839:104:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1849:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1864:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1858:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1858:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "1849:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1921:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1930:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1933:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1923:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1923:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1923:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1893:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "1904:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1911:6:89",
                                            "type": "",
                                            "value": "0xffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "1900:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1900:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1890:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1890:29:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1883:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1883:37:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1880:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint16_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1818:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1829:5:89",
                            "type": ""
                          }
                        ],
                        "src": "1778:165:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2044:314:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2090:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2099:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2107:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2092:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2092:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2092:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2065:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2074:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2061:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2061:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2086:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2057:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2057:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2054:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2125:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2152:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2139:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2139:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2129:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2205:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2214:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2222:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2207:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2207:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2207:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2177:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2185:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2174:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2174:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2171:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2240:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2273:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "2284:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2269:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2269:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2293:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "2250:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2250:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2240:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2310:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2337:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2348:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2333:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2333:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2320:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2320:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2310:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes_memory_ptrt_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2002:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2013:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2025:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2033:6:89",
                            "type": ""
                          }
                        ],
                        "src": "1948:410:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2459:157:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2505:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2514:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2522:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2507:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2507:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2507:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2480:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2489:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2476:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2476:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2501:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2472:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2472:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2469:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2540:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2556:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2550:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2550:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2540:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2575:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2595:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2606:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2591:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2591:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2585:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2585:25:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2575:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int256t_int256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2417:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2428:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2440:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2448:6:89",
                            "type": ""
                          }
                        ],
                        "src": "2363:253:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2732:365:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2778:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2787:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2795:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2780:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2780:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2780:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2753:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2762:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2749:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2749:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2774:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2745:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2745:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2742:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2813:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2836:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2823:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2823:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2813:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2855:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2882:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2893:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2878:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2878:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2865:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2865:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2855:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2906:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2937:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2948:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2933:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2933:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2920:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2920:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2910:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2995:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "3004:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "3012:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2997:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2997:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2997:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2967:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2975:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2964:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2964:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2961:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3030:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3063:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "3074:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3059:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3059:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3083:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "3040:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3040:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3030:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int256t_int256t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2682:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2693:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2705:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2713:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2721:6:89",
                            "type": ""
                          }
                        ],
                        "src": "2621:476:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3193:585:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3239:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3248:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3256:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3241:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3241:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3241:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3214:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3223:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3210:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3210:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3235:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3206:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3206:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3203:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3274:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3294:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3288:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3288:16:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "3278:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3347:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3356:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3364:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3349:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3349:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3349:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "3319:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3327:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3316:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3316:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3313:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3382:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3396:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "3407:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3392:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3392:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3386:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3462:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3471:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3479:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3464:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3464:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3464:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "3441:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3445:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3437:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3437:13:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3452:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "3433:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3433:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "3426:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3426:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3423:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3497:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3513:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3507:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3507:9:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "3501:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3525:62:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "3583:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "3553:29:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3553:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3538:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3538:49:89"
                              },
                              "variables": [
                                {
                                  "name": "array",
                                  "nodeType": "YulTypedName",
                                  "src": "3529:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "3603:5:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3610:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3596:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3596:17:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3596:17:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3659:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3668:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3676:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3661:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3661:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3661:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "3636:2:89"
                                          },
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "3640:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3632:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3632:11:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3645:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3628:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3628:20:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3650:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3625:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3625:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3622:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3720:2:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3724:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3716:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3716:11:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "array",
                                        "nodeType": "YulIdentifier",
                                        "src": "3733:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3740:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3729:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3729:14:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3745:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3694:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3694:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3694:54:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3757:15:89",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "3767:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3757:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3159:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3170:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3182:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3102:676:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3898:166:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3945:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3954:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3962:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3947:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3947:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3947:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3919:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3928:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3915:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3915:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3940:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3911:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3911:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3908:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3980:78:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4039:9:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4050:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_struct$_QuoteExactInputSingleParams",
                                  "nodeType": "YulIdentifier",
                                  "src": "3990:48:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3990:68:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3980:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3864:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3875:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3887:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3783:281:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4185:166:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4232:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4241:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4249:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4234:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4234:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4234:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4206:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4215:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4202:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4202:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4227:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4198:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4198:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4195:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4267:78:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4326:9:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4337:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_struct$_QuoteExactInputSingleParams",
                                  "nodeType": "YulIdentifier",
                                  "src": "4277:48:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4277:68:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4267:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4151:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4162:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4174:6:89",
                            "type": ""
                          }
                        ],
                        "src": "4069:282:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4529:772:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4576:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "4585:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "4593:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4578:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4578:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4578:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4550:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4559:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4546:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4546:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4571:3:89",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4542:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4542:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4539:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4611:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4630:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4624:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4624:16:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4615:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4676:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4649:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4649:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4649:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4691:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4701:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4691:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4715:59:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4759:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4770:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4755:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4755:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_int24_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4725:29:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4725:49:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4715:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4783:60:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4828:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4839:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4824:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4824:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4793:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4793:50:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4783:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4852:60:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4897:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4908:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4893:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4893:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4862:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4862:50:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "4852:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4921:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4966:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4977:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4962:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4962:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4931:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4931:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "4921:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4991:41:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5016:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5027:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5012:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5012:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5006:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5006:26:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4995:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5084:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value5",
                                          "nodeType": "YulIdentifier",
                                          "src": "5093:6:89"
                                        },
                                        {
                                          "name": "value5",
                                          "nodeType": "YulIdentifier",
                                          "src": "5101:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5086:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5086:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5086:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5054:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "5067:7:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5076:4:89",
                                            "type": "",
                                            "value": "0xff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "5063:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5063:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "5051:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5051:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5044:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5044:39:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5041:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5119:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "5129:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "5119:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5145:41:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5170:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5181:3:89",
                                        "type": "",
                                        "value": "192"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5166:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5166:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5160:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5160:26:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "5149:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5243:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value6",
                                          "nodeType": "YulIdentifier",
                                          "src": "5252:6:89"
                                        },
                                        {
                                          "name": "value6",
                                          "nodeType": "YulIdentifier",
                                          "src": "5260:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5245:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5245:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5245:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "5208:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value_2",
                                                "nodeType": "YulIdentifier",
                                                "src": "5231:7:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "5224:6:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5224:15:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "5217:6:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5217:23:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "5205:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5205:36:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5198:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5198:44:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5195:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5278:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "5288:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value6",
                                  "nodeType": "YulIdentifier",
                                  "src": "5278:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4447:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4458:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4470:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4478:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4486:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4494:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "4502:6:89",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "4510:6:89",
                            "type": ""
                          },
                          {
                            "name": "value6",
                            "nodeType": "YulTypedName",
                            "src": "4518:6:89",
                            "type": ""
                          }
                        ],
                        "src": "4356:945:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5419:294:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5465:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "5474:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "5482:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5467:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5467:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5467:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5440:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5449:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5436:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5436:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5461:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5432:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5432:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5429:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5500:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5516:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5510:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5510:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5500:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5535:38:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5558:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5569:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5554:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5554:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5548:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5548:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5539:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5609:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5582:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5582:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5582:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5624:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5634:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5624:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5648:59:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5692:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5703:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5688:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5688:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_int24_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5658:29:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5658:49:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5648:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint160t_int24_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5369:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5380:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5392:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5400:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5408:6:89",
                            "type": ""
                          }
                        ],
                        "src": "5306:407:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5769:267:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5779:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5799:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5793:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5793:12:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "5783:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5821:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5826:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5814:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5814:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5814:19:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5868:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5875:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5864:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5864:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5886:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5891:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5882:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5882:14:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5898:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5842:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5842:63:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5842:63:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5914:116:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5929:3:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "5942:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5950:2:89",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "5938:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5938:15:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5955:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "5934:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5934:88:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5925:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5925:98:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6025:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5921:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5921:109:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "5914:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5746:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "5753:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "5761:3:89",
                            "type": ""
                          }
                        ],
                        "src": "5718:318:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6214:341:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6224:76:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6234:66:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6228:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6316:3:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6329:2:89",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "6333:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "6325:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6325:15:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6342:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6321:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6321:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6309:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6309:37:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6309:37:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6366:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6371:2:89",
                                        "type": "",
                                        "value": "20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6362:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6362:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6384:3:89",
                                            "type": "",
                                            "value": "232"
                                          },
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "6389:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "6380:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6380:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6398:66:89",
                                        "type": "",
                                        "value": "0xffffff0000000000000000000000000000000000000000000000000000000000"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6376:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6376:89:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6355:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6355:111:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6355:111:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6486:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6491:2:89",
                                        "type": "",
                                        "value": "23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6482:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6482:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6504:2:89",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value2",
                                            "nodeType": "YulIdentifier",
                                            "src": "6508:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "6500:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6500:15:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6517:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6496:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6496:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6475:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6475:46:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6475:46:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6530:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6541:3:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6546:2:89",
                                    "type": "",
                                    "value": "43"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6537:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6537:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "6530:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "6174:3:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6179:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6187:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6195:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "6206:3:89",
                            "type": ""
                          }
                        ],
                        "src": "6041:514:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6661:125:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6671:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6683:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6694:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6679:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6679:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6671:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6713:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6728:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6736:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6724:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6724:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6706:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6706:74:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6706:74:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6630:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6641:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6652:4:89",
                            "type": ""
                          }
                        ],
                        "src": "6560:226:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7014:370:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7024:52:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7034:42:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7028:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7092:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7107:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7115:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7103:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7103:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7085:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7085:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7085:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7139:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7150:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7135:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7135:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "7169:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "7162:6:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7162:14:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "7155:6:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7155:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7128:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7128:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7128:50:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7198:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7209:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7194:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7194:18:89"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7214:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7187:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7187:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7187:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7241:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7252:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7237:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7237:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value3",
                                        "nodeType": "YulIdentifier",
                                        "src": "7261:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7269:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7257:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7257:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7230:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7230:43:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7230:43:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7293:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7304:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7289:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7289:19:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7310:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7282:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7282:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7282:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7323:55:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "7350:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7362:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7373:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7358:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7358:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "7331:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7331:47:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7323:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6951:9:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "6962:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "6970:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6978:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6986:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6994:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7005:4:89",
                            "type": ""
                          }
                        ],
                        "src": "6791:593:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7510:100:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7527:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7538:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7520:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7520:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7520:21:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7550:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7577:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7589:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7600:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7585:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7585:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "7558:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7558:46:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7550:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7479:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7490:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7501:4:89",
                            "type": ""
                          }
                        ],
                        "src": "7389:221:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7789:166:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7806:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7817:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7799:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7799:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7799:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7840:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7851:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7836:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7836:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7856:2:89",
                                    "type": "",
                                    "value": "16"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7829:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7829:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7829:30:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7879:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7890:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7875:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7875:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7895:18:89",
                                    "type": "",
                                    "value": "Unexpected error"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7868:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7868:46:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7868:46:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7923:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7935:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7946:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7931:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7931:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7923:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7766:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7780:4:89",
                            "type": ""
                          }
                        ],
                        "src": "7615:340:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8243:1082:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8253:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8271:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8282:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8267:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8267:19:89"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8257:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8302:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8313:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8295:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8295:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8295:25:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8329:12:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8339:2:89",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8333:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8361:9:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8372:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8357:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8357:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8377:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8350:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8350:31:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8350:31:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8390:17:89",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "8401:6:89"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "8394:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8416:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8436:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8430:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8430:13:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "8420:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8459:6:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8467:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8452:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8452:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8452:22:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8483:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8494:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8505:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8490:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8490:19:89"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "8483:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8518:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8536:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8544:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8532:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8532:15:89"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "8522:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8556:13:89",
                              "value": {
                                "name": "tail",
                                "nodeType": "YulIdentifier",
                                "src": "8565:4:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "8560:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8627:169:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "8648:3:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "8663:6:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "8657:5:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "8657:13:89"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "8672:42:89",
                                              "type": "",
                                              "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "8653:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "8653:62:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "8641:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8641:75:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8641:75:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "8729:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "8740:3:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "8745:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "8736:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8736:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "8729:3:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "8761:25:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "8775:6:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "8783:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "8771:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8771:15:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "8761:6:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "8589:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8592:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8586:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8586:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "8600:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "8602:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "8611:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "8614:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "8607:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8607:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "8602:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "8582:3:89",
                                "statements": []
                              },
                              "src": "8578:218:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8816:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8827:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8812:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8812:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "8836:3:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8841:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "8832:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8832:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8805:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8805:47:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8805:47:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8861:16:89",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "8874:3:89"
                              },
                              "variables": [
                                {
                                  "name": "pos_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8865:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8886:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8908:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8902:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8902:13:89"
                              },
                              "variables": [
                                {
                                  "name": "length_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8890:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "8931:3:89"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8936:8:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8924:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8924:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8924:21:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8954:21:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "8967:3:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8972:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8963:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8963:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "pos_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "8954:5:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8984:31:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9004:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9012:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9000:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9000:15:89"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8988:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9024:15:89",
                              "value": {
                                "name": "tail",
                                "nodeType": "YulIdentifier",
                                "src": "9035:4:89"
                              },
                              "variables": [
                                {
                                  "name": "i_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9028:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9105:149:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9126:5:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "9143:8:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "9137:5:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "9137:15:89"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "9154:10:89",
                                              "type": "",
                                              "value": "0xffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "9133:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "9133:32:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "9119:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9119:47:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9119:47:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9179:23:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9192:5:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9199:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9188:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9188:14:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9179:5:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9215:29:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9231:8:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9241:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9227:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9227:17:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9215:8:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9059:3:89"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9064:8:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9056:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9056:17:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "9074:22:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "9076:18:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9087:3:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9092:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9083:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9083:11:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9076:3:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "9052:3:89",
                                "statements": []
                              },
                              "src": "9048:206:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9263:13:89",
                              "value": {
                                "name": "pos_1",
                                "nodeType": "YulIdentifier",
                                "src": "9271:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9263:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9296:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9307:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9292:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9292:18:89"
                                  },
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "9312:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9285:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9285:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9285:34:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_array$_t_uint160_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint256__to_t_uint256_t_array$_t_uint160_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8188:9:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "8199:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8207:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8215:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8223:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8234:4:89",
                            "type": ""
                          }
                        ],
                        "src": "7960:1365:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9513:272:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9523:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9535:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9546:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9531:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9531:19:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9523:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9566:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9577:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9559:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9559:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9559:25:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9604:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9615:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9600:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9600:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9624:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9632:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "9620:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9620:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9593:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9593:83:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9593:83:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9696:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9707:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9692:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9692:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "9716:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9724:10:89",
                                        "type": "",
                                        "value": "0xffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "9712:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9712:23:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9685:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9685:51:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9685:51:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9756:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9767:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9752:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9752:18:89"
                                  },
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "9772:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9745:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9745:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9745:34:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint160_t_uint32_t_uint256__to_t_uint256_t_uint160_t_uint32_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9458:9:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "9469:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "9477:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9485:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9493:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9504:4:89",
                            "type": ""
                          }
                        ],
                        "src": "9330:455:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9834:198:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9844:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9860:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9854:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9854:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "9844:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9872:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "9894:6:89"
                                  },
                                  {
                                    "name": "size",
                                    "nodeType": "YulIdentifier",
                                    "src": "9902:4:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9890:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9890:17:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "9876:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9982:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "9984:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9984:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9984:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "9925:10:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9937:18:89",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "9922:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9922:34:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "9961:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "9973:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "9958:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9958:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "9919:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9919:62:89"
                              },
                              "nodeType": "YulIf",
                              "src": "9916:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10011:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "10015:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10004:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10004:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10004:22:89"
                            }
                          ]
                        },
                        "name": "allocateMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "9814:4:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "9823:6:89",
                            "type": ""
                          }
                        ],
                        "src": "9790:242:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10096:181:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10140:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "10142:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10142:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10142:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10112:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10120:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10109:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10109:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10106:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10162:109:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "10182:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10190:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10178:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10178:17:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10197:66:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "10174:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10174:90:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10266:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10170:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10170:101:89"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "10162:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "10076:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "10087:4:89",
                            "type": ""
                          }
                        ],
                        "src": "10037:240:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10335:205:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10345:10:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10354:1:89",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "10349:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10414:63:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "10439:3:89"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "10444:1:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "10435:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10435:11:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "10458:3:89"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "10463:1:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "10454:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "10454:11:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "10448:5:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10448:18:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10428:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10428:39:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10428:39:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "10375:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10378:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10372:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10372:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "10386:19:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10388:15:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "10397:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10400:2:89",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10393:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10393:10:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "10388:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "10368:3:89",
                                "statements": []
                              },
                              "src": "10364:113:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10503:31:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "10516:3:89"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "10521:6:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "10512:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10512:16:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10530:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10505:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10505:27:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10505:27:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "10492:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10495:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10489:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10489:13:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10486:2:89"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "10313:3:89",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "10318:3:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "10323:6:89",
                            "type": ""
                          }
                        ],
                        "src": "10282:258:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10592:109:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10679:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10688:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10691:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10681:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10681:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10681:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "10615:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "10626:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10633:42:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "10622:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10622:54:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "10612:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10612:65:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10605:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10605:73:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10602:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "10581:5:89",
                            "type": ""
                          }
                        ],
                        "src": "10545:156:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := calldataload(offset)\n        let array_1 := allocateMemory(array_allocation_size_t_bytes(_1))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), array)\n        array := array_1\n    }\n    function abi_decode_t_int24_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, signextend(2, value))) { revert(0, 0) }\n    }\n    function abi_decode_t_struct$_QuoteExactInputSingleParams(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0xa0) { revert(value, value) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        let value_1 := calldataload(headStart)\n        validator_revert_t_address(value_1)\n        mstore(memPtr, value_1)\n        let value_2 := calldataload(add(headStart, 32))\n        validator_revert_t_address(value_2)\n        mstore(add(memPtr, 32), value_2)\n        mstore(add(memPtr, 64), calldataload(add(headStart, 64)))\n        let value_3 := calldataload(add(headStart, 96))\n        if iszero(eq(value_3, and(value_3, 0xffffff))) { revert(0, 0) }\n        mstore(add(memPtr, 96), value_3)\n        mstore(add(memPtr, 128), abi_decode_t_uint160(add(headStart, 128)))\n    }\n    function abi_decode_t_uint160(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n    function abi_decode_t_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        value0 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_int256t_int256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_int256t_int256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        value2 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value0, value0) }\n        let _2 := mload(_1)\n        let array := allocateMemory(array_allocation_size_t_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(value0, value0) }\n        copy_memory_to_memory(add(_1, 32), add(array, 32), _2)\n        value0 := array\n    }\n    function abi_decode_tuple_t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(value0, value0) }\n        value0 := abi_decode_t_struct$_QuoteExactInputSingleParams(headStart, dataEnd)\n    }\n    function abi_decode_tuple_t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(value0, value0) }\n        value0 := abi_decode_t_struct$_QuoteExactInputSingleParams(headStart, dataEnd)\n    }\n    function abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(value4, value4) }\n        let value := mload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := abi_decode_t_int24_fromMemory(add(headStart, 32))\n        value2 := abi_decode_t_uint16_fromMemory(add(headStart, 64))\n        value3 := abi_decode_t_uint16_fromMemory(add(headStart, 96))\n        value4 := abi_decode_t_uint16_fromMemory(add(headStart, 128))\n        let value_1 := mload(add(headStart, 160))\n        if iszero(eq(value_1, and(value_1, 0xff))) { revert(value5, value5) }\n        value5 := value_1\n        let value_2 := mload(add(headStart, 192))\n        if iszero(eq(value_2, iszero(iszero(value_2)))) { revert(value6, value6) }\n        value6 := value_2\n    }\n    function abi_decode_tuple_t_uint256t_uint160t_int24_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := mload(headStart)\n        let value := mload(add(headStart, 32))\n        validator_revert_t_address(value)\n        value1 := value\n        value2 := abi_decode_t_int24_fromMemory(add(headStart, 64))\n    }\n    function abi_encode_t_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000\n        mstore(pos, and(shl(96, value0), _1))\n        mstore(add(pos, 20), and(shl(232, value1), 0xffffff0000000000000000000000000000000000000000000000000000000000))\n        mstore(add(pos, 23), and(shl(96, value2), _1))\n        end := add(pos, 43)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), 160)\n        tail := abi_encode_t_bytes(value4, add(headStart, 160))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_t_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Unexpected error\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_array$_t_uint160_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint256__to_t_uint256_t_array$_t_uint160_$dyn_memory_ptr_t_array$_t_uint32_$dyn_memory_ptr_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 128)\n        mstore(headStart, value0)\n        let _1 := 32\n        mstore(add(headStart, _1), 128)\n        let pos := tail_1\n        let length := mload(value1)\n        mstore(tail_1, length)\n        pos := add(headStart, 160)\n        let srcPtr := add(value1, _1)\n        let i := tail\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        mstore(add(headStart, 64), sub(pos, headStart))\n        let pos_1 := pos\n        let length_1 := mload(value2)\n        mstore(pos, length_1)\n        pos_1 := add(pos, _1)\n        let srcPtr_1 := add(value2, _1)\n        let i_1 := tail\n        for { } lt(i_1, length_1) { i_1 := add(i_1, 1) }\n        {\n            mstore(pos_1, and(mload(srcPtr_1), 0xffffffff))\n            pos_1 := add(pos_1, _1)\n            srcPtr_1 := add(srcPtr_1, _1)\n        }\n        tail := pos_1\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_uint256_t_uint160_t_uint32_t_uint256__to_t_uint256_t_uint160_t_uint32_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), and(value2, 0xffffffff))\n        mstore(add(headStart, 96), value3)\n    }\n    function allocateMemory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, size)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_t_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { invalid() }\n        size := add(and(add(length, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function validator_revert_t_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "2013": [
                  {
                    "length": 32,
                    "start": 346
                  },
                  {
                    "length": 32,
                    "start": 1843
                  },
                  {
                    "length": 32,
                    "start": 2879
                  }
                ],
                "2017": [
                  {
                    "length": 32,
                    "start": 1245
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bd21704a1161005b578063bd21704a146100d8578063c45a0155146100fb578063c6a5026a14610103578063cdca1753146101165761007d565b806311c17848146100825780632f80bb1d1461009757806390793ea8146100c3575b600080fd5b610095610090366004611b91565b610129565b005b6100aa6100a5366004611b2b565b6102e5565b6040516100ba9493929190611eac565b60405180910390f35b6100cb6104db565b6040516100ba9190611def565b6100eb6100e6366004611c49565b6104ff565b6040516100ba9493929190611f54565b6100cb610731565b6100eb610111366004611c49565b610755565b6100aa610124366004611b2b565b610910565b60008313806101385750600082135b61014157600080fd5b600080600061014f84610ae8565b9250925092506101817f0000000000000000000000000000000000000000000000000000000000000000848484610b19565b5060008060008089136101c7578573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610888a6000036101fc565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161089896000035b925092509250600061020f878787610b38565b90506000808273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561025a57600080fd5b505afa15801561026e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102929190611c6b565b50505050509150915085156102b857604051848152826020820152816040820152606081fd5b600054156102ce5760005484146102ce57600080fd5b604051858152826020820152816040820152606081fd5b600060608060006102f586610b76565b67ffffffffffffffff8111801561030b57600080fd5b50604051908082528060200260200182016040528015610335578160200160208202803683370190505b50925061034186610b76565b67ffffffffffffffff8111801561035757600080fd5b50604051908082528060200260200182016040528015610381578160200160208202803683370190505b50915060005b60008060006103958a610ae8565b9250925092506000806000806104186040518060a001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152506104ff565b9350935093509350828b898151811061042d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a898151811061047457fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b926104a18e610ba5565b156104b6576104af8e610bad565b9d506104c6565b8c9b5050505050505050506104d2565b50505050505050610387565b92959194509250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff8082169084161092849261053d9290610b38565b9050866080015173ffffffffffffffffffffffffffffffffffffffff166000141561056b5760408701516000555b60005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb08308561059b8c60400151610be8565b6000038c6080015173ffffffffffffffffffffffffffffffffffffffff166000146105ca578c608001516105f0565b876105e95773fffd8963efd1fc6a506488495d951d5263988d256105f0565b6401000276a45b8d602001518e606001518f6000015160405160200161061193929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610640959493929190611e10565b6040805180830381600087803b15801561065957600080fd5b505af19250505080156106a7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106a491810190611b6e565b60015b610724573d8080156106d5576040519150601f19603f3d011682016040523d82523d6000602084013e6106da565b606091505b505a82039450886080015173ffffffffffffffffffffffffffffffffffffffff166000141561070857600080555b610713818487610c1a565b97509750975097505050505061072a565b50505050505b9193509193565b7f000000000000000000000000000000000000000000000000000000000000000081565b60208101518151606083015160009283928392839273ffffffffffffffffffffffffffffffffffffffff808216908416109284926107939290610b38565b905060005a90508173ffffffffffffffffffffffffffffffffffffffff1663128acb0830856107c58c60400151610be8565b60808d015173ffffffffffffffffffffffffffffffffffffffff16156107ef578c60800151610815565b8761080e5773fffd8963efd1fc6a506488495d951d5263988d25610815565b6401000276a45b8d600001518e606001518f6020015160405160200161083693929190611d89565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610865959493929190611e10565b6040805180830381600087803b15801561087e57600080fd5b505af19250505080156108cc575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c991810190611b6e565b60015b610724573d8080156108fa576040519150601f19603f3d011682016040523d82523d6000602084013e6108ff565b606091505b505a82039450610713818487610c1a565b6000606080600061092086610b76565b67ffffffffffffffff8111801561093657600080fd5b50604051908082528060200260200182016040528015610960578160200160208202803683370190505b50925061096c86610b76565b67ffffffffffffffff8111801561098257600080fd5b506040519080825280602002602001820160405280156109ac578160200160208202803683370190505b50915060005b60008060006109c08a610ae8565b925092509250600080600080610a436040518060a001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018f81526020018762ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815250610755565b9350935093509350828b8981518110610a5857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818a8981518110610a9f57fe5b63ffffffff90921660209283029190910190910152929b50968201966001909601958b92610acc8e610ba5565b156104b657610ada8e610bad565b9d50505050505050506109b2565b60008080610af68482610cee565b9250610b03846014610dee565b9050610b10846017610cee565b91509193909250565b6000610b2f85610b2a868686610ede565b610f5b565b95945050505050565b6000610b6e7f0000000000000000000000000000000000000000000000000000000000000000610b69868686610ede565b610f8b565b949350505050565b805160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec909101045b919050565b516042111590565b8051606090610be29083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9016110c1565b92915050565b60007f80000000000000000000000000000000000000000000000000000000000000008210610c1657600080fd5b5090565b6000806000806000808773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610c6957600080fd5b505afa158015610c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca19190611c6b565b50939650610cb694508d93506112a892505050565b91975095509050610cde73ffffffffffffffffffffffffffffffffffffffff89168383611369565b9350869250505093509350935093565b600081826014011015610d6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015610dd557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015610e6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015610ed557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b610ee66119fa565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610f1e579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000610f678383610f8b565b90503373ffffffffffffffffffffffffffffffffffffffff821614610be257600080fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610fcd57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b60608182601f01101561113557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8282840110156111a657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561121857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015611237576040519150600082526020820160405261129f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611270578051835260209283019201611258565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60008060008351606014611348576044845110156112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290611e75565b60405180910390fd5b600484019350838060200190518101906113159190611bdf565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f29190611e62565b8380602001905181019061135c9190611d02565b9250925092509193909250565b60008060008060008060008060088b73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156113bd57600080fd5b505afa1580156113d1573d6000803e3d6000fd5b505050506040513d60208110156113e757600080fd5b5051600290810b908c900b816113f957fe5b0560020b901d905060006101008c73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561144c57600080fd5b505afa158015611460573d6000803e3d6000fd5b505050506040513d602081101561147657600080fd5b5051600290810b908d900b8161148857fe5b0560020b8161149357fe5b079050600060088d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114e057600080fd5b505afa1580156114f4573d6000803e3d6000fd5b505050506040513d602081101561150a57600080fd5b5051600290810b908d900b8161151c57fe5b0560020b901d905060006101008e73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d602081101561159957600080fd5b5051600290810b908e900b816115ab57fe5b0560020b816115b657fe5b07905060008160ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296856040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561161757600080fd5b505afa15801561162b573d6000803e3d6000fd5b505050506040513d602081101561164157600080fd5b5051161180156116d457508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561169257600080fd5b505afa1580156116a6573d6000803e3d6000fd5b505050506040513d60208110156116bc57600080fd5b5051600290810b908d900b816116ce57fe5b0760020b155b80156116e557508b60020b8d60020b135b945060008360ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296876040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561174557600080fd5b505afa158015611759573d6000803e3d6000fd5b505050506040513d602081101561176f57600080fd5b50511611801561180257508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117c057600080fd5b505afa1580156117d4573d6000803e3d6000fd5b505050506040513d60208110156117ea57600080fd5b5051600290810b908e900b816117fc57fe5b0760020b155b801561181357508b60020b8d60020b125b95508160010b8460010b128061183f57508160010b8460010b14801561183f57508060ff168360ff1611155b1561185557839950829750819850809650611862565b8199508097508398508296505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff87161b9150505b8560010b8760010b13611999578560010b8760010b14156118d3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff858103161c165b6000818c73ffffffffffffffffffffffffffffffffffffffff16635339c2968a6040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561192a57600080fd5b505afa15801561193e573d6000803e3d6000fd5b505050506040513d602081101561195457600080fd5b5051169050611962816119c1565b61ffff16989098019750506001909501947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61188e565b81156119a6576001880397505b82156119b3576001880397505b505050505050509392505050565b6000805b8215610be2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301909216916001016119c5565b604080516060810182526000808252602082018190529181019190915290565b600082601f830112611a2a578081fd5b8135611a3d611a3882611faf565b611f8b565b818152846020838601011115611a51578283fd5b816020850160208301379081016020019190915292915050565b8051600281900b8114610ba057600080fd5b600060a08284031215611a8e578081fd5b60405160a0810181811067ffffffffffffffff82111715611aab57fe5b6040529050808235611abc8161201f565b81526020830135611acc8161201f565b602082015260408381013590820152606083013562ffffff81168114611af157600080fd5b6060820152611b0260808401611b0e565b60808201525092915050565b8035610ba08161201f565b805161ffff81168114610ba057600080fd5b60008060408385031215611b3d578182fd5b823567ffffffffffffffff811115611b53578283fd5b611b5f85828601611a1a565b95602094909401359450505050565b60008060408385031215611b80578182fd5b505080516020909101519092909150565b600080600060608486031215611ba5578081fd5b8335925060208401359150604084013567ffffffffffffffff811115611bc9578182fd5b611bd586828701611a1a565b9150509250925092565b600060208284031215611bf0578081fd5b815167ffffffffffffffff811115611c06578182fd5b8201601f81018413611c16578182fd5b8051611c24611a3882611faf565b818152856020838501011115611c38578384fd5b610b2f826020830160208601611fef565b600060a08284031215611c5a578081fd5b611c648383611a7d565b9392505050565b600080600080600080600060e0888a031215611c85578283fd5b8751611c908161201f565b9650611c9e60208901611a6b565b9550611cac60408901611b19565b9450611cba60608901611b19565b9350611cc860808901611b19565b925060a088015160ff81168114611cdd578283fd5b60c08901519092508015158114611cf2578182fd5b8091505092959891949750929550565b600080600060608486031215611d16578081fd5b835192506020840151611d288161201f565b9150611d3660408501611a6b565b90509250925092565b60008151808452611d57816020860160208601611fef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152611e5760a0830184611d3f565b979650505050505050565b600060208252611c646020830184611d3f565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611f0257845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611ed0565b505084810360408601528651808252908201925081870190845b81811015611f3e57825163ffffffff1685529383019391830191600101611f1c565b5050505060609290920192909252949350505050565b93845273ffffffffffffffffffffffffffffffffffffffff92909216602084015263ffffffff166040830152606082015260800190565b60405181810167ffffffffffffffff81118282101715611fa757fe5b604052919050565b600067ffffffffffffffff821115611fc357fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381101561200a578181015183820152602001611ff2565b83811115612019576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461204157600080fd5b5056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xBD21704A GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xBD21704A EQ PUSH2 0xD8 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0xFB JUMPI DUP1 PUSH4 0xC6A5026A EQ PUSH2 0x103 JUMPI DUP1 PUSH4 0xCDCA1753 EQ PUSH2 0x116 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x11C17848 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x2F80BB1D EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0xC3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B91 JUMP JUMPDEST PUSH2 0x129 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xAA PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B2B JUMP JUMPDEST PUSH2 0x2E5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBA SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1EAC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCB PUSH2 0x4DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBA SWAP2 SWAP1 PUSH2 0x1DEF JUMP JUMPDEST PUSH2 0xEB PUSH2 0xE6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C49 JUMP JUMPDEST PUSH2 0x4FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBA SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0xCB PUSH2 0x731 JUMP JUMPDEST PUSH2 0xEB PUSH2 0x111 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C49 JUMP JUMPDEST PUSH2 0x755 JUMP JUMPDEST PUSH2 0xAA PUSH2 0x124 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B2B JUMP JUMPDEST PUSH2 0x910 JUMP JUMPDEST PUSH1 0x0 DUP4 SGT DUP1 PUSH2 0x138 JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x14F DUP5 PUSH2 0xAE8 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x181 PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0xB19 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP10 SGT PUSH2 0x1C7 JUMPI DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP9 DUP11 PUSH1 0x0 SUB PUSH2 0x1FC JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 DUP10 PUSH1 0x0 SUB JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x20F DUP8 DUP8 DUP8 PUSH2 0xB38 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x292 SWAP2 SWAP1 PUSH2 0x1C6B JUMP JUMPDEST POP POP POP POP POP SWAP2 POP SWAP2 POP DUP6 ISZERO PUSH2 0x2B8 JUMPI PUSH1 0x40 MLOAD DUP5 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 REVERT JUMPDEST PUSH1 0x0 SLOAD ISZERO PUSH2 0x2CE JUMPI PUSH1 0x0 SLOAD DUP5 EQ PUSH2 0x2CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP6 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x2F5 DUP7 PUSH2 0xB76 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x30B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x335 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0x341 DUP7 PUSH2 0xB76 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x357 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x381 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x395 DUP11 PUSH2 0xAE8 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x418 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH3 0xFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x4FF JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP3 DUP12 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x42D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x474 JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP12 POP SWAP7 DUP3 ADD SWAP7 PUSH1 0x1 SWAP1 SWAP7 ADD SWAP6 DUP12 SWAP3 PUSH2 0x4A1 DUP15 PUSH2 0xBA5 JUMP JUMPDEST ISZERO PUSH2 0x4B6 JUMPI PUSH2 0x4AF DUP15 PUSH2 0xBAD JUMP JUMPDEST SWAP14 POP PUSH2 0x4C6 JUMP JUMPDEST DUP13 SWAP12 POP POP POP POP POP POP POP POP POP PUSH2 0x4D2 JUMP JUMPDEST POP POP POP POP POP POP POP PUSH2 0x387 JUMP JUMPDEST SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP2 MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP1 DUP5 AND LT SWAP3 DUP5 SWAP3 PUSH2 0x53D SWAP3 SWAP1 PUSH2 0xB38 JUMP JUMPDEST SWAP1 POP DUP7 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 EQ ISZERO PUSH2 0x56B JUMPI PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x0 SSTORE JUMPDEST PUSH1 0x0 GAS SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP6 PUSH2 0x59B DUP13 PUSH1 0x40 ADD MLOAD PUSH2 0xBE8 JUMP JUMPDEST PUSH1 0x0 SUB DUP13 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 EQ PUSH2 0x5CA JUMPI DUP13 PUSH1 0x80 ADD MLOAD PUSH2 0x5F0 JUMP JUMPDEST DUP8 PUSH2 0x5E9 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x5F0 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x20 ADD MLOAD DUP15 PUSH1 0x60 ADD MLOAD DUP16 PUSH1 0x0 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x611 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1D89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x640 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E10 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x659 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x6A7 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x6A4 SWAP2 DUP2 ADD SWAP1 PUSH2 0x1B6E JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x724 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x6D5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6DA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP GAS DUP3 SUB SWAP5 POP DUP9 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 EQ ISZERO PUSH2 0x708 JUMPI PUSH1 0x0 DUP1 SSTORE JUMPDEST PUSH2 0x713 DUP2 DUP5 DUP8 PUSH2 0xC1A JUMP JUMPDEST SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 POP POP POP POP POP PUSH2 0x72A JUMP JUMPDEST POP POP POP POP POP JUMPDEST SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP2 MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP1 DUP5 AND LT SWAP3 DUP5 SWAP3 PUSH2 0x793 SWAP3 SWAP1 PUSH2 0xB38 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 GAS SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 ADDRESS DUP6 PUSH2 0x7C5 DUP13 PUSH1 0x40 ADD MLOAD PUSH2 0xBE8 JUMP JUMPDEST PUSH1 0x80 DUP14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x7EF JUMPI DUP13 PUSH1 0x80 ADD MLOAD PUSH2 0x815 JUMP JUMPDEST DUP8 PUSH2 0x80E JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x815 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x0 ADD MLOAD DUP15 PUSH1 0x60 ADD MLOAD DUP16 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x836 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1D89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E10 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x8CC JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x8C9 SWAP2 DUP2 ADD SWAP1 PUSH2 0x1B6E JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x724 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x8FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x8FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP GAS DUP3 SUB SWAP5 POP PUSH2 0x713 DUP2 DUP5 DUP8 PUSH2 0xC1A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x920 DUP7 PUSH2 0xB76 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x936 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x960 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0x96C DUP7 PUSH2 0xB76 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x982 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x9AC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x9C0 DUP11 PUSH2 0xAE8 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xA43 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP16 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH3 0xFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x755 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP3 DUP12 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0xA58 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0xA9F JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP12 POP SWAP7 DUP3 ADD SWAP7 PUSH1 0x1 SWAP1 SWAP7 ADD SWAP6 DUP12 SWAP3 PUSH2 0xACC DUP15 PUSH2 0xBA5 JUMP JUMPDEST ISZERO PUSH2 0x4B6 JUMPI PUSH2 0xADA DUP15 PUSH2 0xBAD JUMP JUMPDEST SWAP14 POP POP POP POP POP POP POP POP PUSH2 0x9B2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xAF6 DUP5 DUP3 PUSH2 0xCEE JUMP JUMPDEST SWAP3 POP PUSH2 0xB03 DUP5 PUSH1 0x14 PUSH2 0xDEE JUMP JUMPDEST SWAP1 POP PUSH2 0xB10 DUP5 PUSH1 0x17 PUSH2 0xCEE JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB2F DUP6 PUSH2 0xB2A DUP7 DUP7 DUP7 PUSH2 0xEDE JUMP JUMPDEST PUSH2 0xF5B JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB6E PUSH32 0x0 PUSH2 0xB69 DUP7 DUP7 DUP7 PUSH2 0xEDE JUMP JUMPDEST PUSH2 0xF8B JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x17 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC SWAP1 SWAP2 ADD DIV JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0xBE2 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x10C1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0xC16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCA1 SWAP2 SWAP1 PUSH2 0x1C6B JUMP JUMPDEST POP SWAP4 SWAP7 POP PUSH2 0xCB6 SWAP5 POP DUP14 SWAP4 POP PUSH2 0x12A8 SWAP3 POP POP POP JUMP JUMPDEST SWAP2 SWAP8 POP SWAP6 POP SWAP1 POP PUSH2 0xCDE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP4 DUP4 PUSH2 0x1369 JUMP JUMPDEST SWAP4 POP DUP7 SWAP3 POP POP POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0xD62 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0xDD5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0xE62 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0xED5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0xEE6 PUSH2 0x19FA JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0xF1E JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF67 DUP4 DUP4 PUSH2 0xF8B JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0xBE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xFCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x203C8EC649B23B7FAF9B73CCADFB1A67AF52A097119C82801F4947EC5DEB6C04 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0x1135 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0x11A6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0x1218 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x1237 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x129F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x1270 JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x1258 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x60 EQ PUSH2 0x1348 JUMPI PUSH1 0x44 DUP5 MLOAD LT ISZERO PUSH2 0x12FB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12F2 SWAP1 PUSH2 0x1E75 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP5 ADD SWAP4 POP DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1315 SWAP2 SWAP1 PUSH2 0x1BDF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12F2 SWAP2 SWAP1 PUSH2 0x1E62 JUMP JUMPDEST DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x135C SWAP2 SWAP1 PUSH2 0x1D02 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x8 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP13 SWAP1 SIGNEXTEND DUP2 PUSH2 0x13F9 JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x144C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1460 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1476 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x1488 JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0x1493 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 PUSH1 0x8 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x150A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x151C JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP15 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x156F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1583 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x15AB JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0x15B6 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1617 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x162B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1641 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x16D4 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x16CE JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x16E5 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SGT JUMPDEST SWAP5 POP PUSH1 0x0 DUP4 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1745 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1759 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x176F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x1802 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x17EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x17FC JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1813 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SLT JUMPDEST SWAP6 POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND SLT DUP1 PUSH2 0x183F JUMPI POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND EQ DUP1 ISZERO PUSH2 0x183F JUMPI POP DUP1 PUSH1 0xFF AND DUP4 PUSH1 0xFF AND GT ISZERO JUMPDEST ISZERO PUSH2 0x1855 JUMPI DUP4 SWAP10 POP DUP3 SWAP8 POP DUP2 SWAP9 POP DUP1 SWAP7 POP PUSH2 0x1862 JUMP JUMPDEST DUP2 SWAP10 POP DUP1 SWAP8 POP DUP4 SWAP9 POP DUP3 SWAP7 POP JUMPDEST POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP8 AND SHL SWAP2 POP POP JUMPDEST DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND SGT PUSH2 0x1999 JUMPI DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND EQ ISZERO PUSH2 0x18D3 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP6 DUP2 SUB AND SHR AND JUMPDEST PUSH1 0x0 DUP2 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x192A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x193E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1954 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND SWAP1 POP PUSH2 0x1962 DUP2 PUSH2 0x19C1 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP9 SWAP1 SWAP9 ADD SWAP8 POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x188E JUMP JUMPDEST DUP2 ISZERO PUSH2 0x19A6 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST DUP3 ISZERO PUSH2 0x19B3 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 ISZERO PUSH2 0xBE2 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD SWAP1 SWAP3 AND SWAP2 PUSH1 0x1 ADD PUSH2 0x19C5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1A2A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1A3D PUSH2 0x1A38 DUP3 PUSH2 0x1FAF JUMP JUMPDEST PUSH2 0x1F8B JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x1A51 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0xBA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A8E JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1AAB JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP1 POP DUP1 DUP3 CALLDATALOAD PUSH2 0x1ABC DUP2 PUSH2 0x201F JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1ACC DUP2 PUSH2 0x201F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1AF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1B02 PUSH1 0x80 DUP5 ADD PUSH2 0x1B0E JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xBA0 DUP2 PUSH2 0x201F JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xBA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B3D JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B53 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x1B5F DUP6 DUP3 DUP7 ADD PUSH2 0x1A1A JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B80 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1BA5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BC9 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1BD5 DUP7 DUP3 DUP8 ADD PUSH2 0x1A1A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BF0 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1C06 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x1C16 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x1C24 PUSH2 0x1A38 DUP3 PUSH2 0x1FAF JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x1C38 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xB2F DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1FEF JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C5A JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1C64 DUP4 DUP4 PUSH2 0x1A7D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1C85 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1C90 DUP2 PUSH2 0x201F JUMP JUMPDEST SWAP7 POP PUSH2 0x1C9E PUSH1 0x20 DUP10 ADD PUSH2 0x1A6B JUMP JUMPDEST SWAP6 POP PUSH2 0x1CAC PUSH1 0x40 DUP10 ADD PUSH2 0x1B19 JUMP JUMPDEST SWAP5 POP PUSH2 0x1CBA PUSH1 0x60 DUP10 ADD PUSH2 0x1B19 JUMP JUMPDEST SWAP4 POP PUSH2 0x1CC8 PUSH1 0x80 DUP10 ADD PUSH2 0x1B19 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1CDD JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0xC0 DUP10 ADD MLOAD SWAP1 SWAP3 POP DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1CF2 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1D16 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x1D28 DUP2 PUSH2 0x201F JUMP JUMPDEST SWAP2 POP PUSH2 0x1D36 PUSH1 0x40 DUP6 ADD PUSH2 0x1A6B JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1D57 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1FEF JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x1E57 PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x1D3F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1C64 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1D3F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD DUP7 DUP4 MSTORE PUSH1 0x20 PUSH1 0x80 DUP2 DUP6 ADD MSTORE DUP2 DUP8 MLOAD DUP1 DUP5 MSTORE PUSH1 0xA0 DUP7 ADD SWAP2 POP DUP3 DUP10 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1F02 JUMPI DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1ED0 JUMP JUMPDEST POP POP DUP5 DUP2 SUB PUSH1 0x40 DUP7 ADD MSTORE DUP7 MLOAD DUP1 DUP3 MSTORE SWAP1 DUP3 ADD SWAP3 POP DUP2 DUP8 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1F3E JUMPI DUP3 MLOAD PUSH4 0xFFFFFFFF AND DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1F1C JUMP JUMPDEST POP POP POP POP PUSH1 0x60 SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1FA7 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1FC3 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x200A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FF2 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2019 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2041 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "1140:9313:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1850:1601;;;;;;:::i;:::-;;:::i;:::-;;8831:1620;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;420:38:16;;;:::i;:::-;;;;;;;:::i;7452:1373:77:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;328:41:16:-;;;:::i;4720:1102:77:-;;;;;;:::i;:::-;;:::i;5828:1618::-;;;;;;:::i;:::-;;:::i;1850:1601::-;2026:1;2011:12;:16;:36;;;;2046:1;2031:12;:16;2011:36;2003:45;;;;;;2122:15;2139:16;2157:10;2171:22;:4;:20;:22::i;:::-;2121:72;;;;;;2203:66;2237:7;2246;2255:8;2265:3;2203:33;:66::i;:::-;;2281:17;2300:19;2321:22;2374:1;2359:12;:16;:188;;2492:7;2481:18;;:8;:18;;;2509:12;2533;2532:13;;2359:188;;;2405:8;2395:18;;:7;:18;;;2423:12;2447;2446:13;;2359:188;2280:267;;;;;;2558:17;2578:31;2586:7;2595:8;2605:3;2578:7;:31::i;:::-;2558:51;;2620:25;2647:15;2676:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2619:69;;;;;;;;;2703:12;2699:746;;;2775:4;2769:11;2809:14;2804:3;2797:27;2864:17;2857:4;2852:3;2848:14;2841:41;2922:9;2915:4;2910:3;2906:14;2899:33;2961:2;2956:3;2949:15;2740:238;3113:15;;:20;3109:68;;3161:15;;3143:14;:33;3135:42;;;;;;3235:4;3229:11;3269;3264:3;3257:24;3321:17;3314:4;3309:3;3305:14;3298:41;3379:9;3372:4;3367:3;3363:14;3356:33;3418:2;3413:3;3406:15;8831:1620;8957:16;8987:38;9039:43;9096:19;9178:15;:4;:13;:15::i;:::-;9164:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9164:30:77;;9140:54;;9247:15;:4;:13;:15::i;:::-;9234:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9234:29:77;;9204:59;;9274:9;9297:1148;9325:16;9343:15;9360:10;9374:22;:4;:20;:22::i;:::-;9324:72;;;;;;9491:17;9510:26;9538:31;9571:20;9611:323;9655:261;;;;;;;;9719:7;9655:261;;;;;;9762:8;9655:261;;;;;;9804:9;9655:261;;;;9844:3;9655:261;;;;;;9892:1;9655:261;;;;;9611:22;:323::i;:::-;9490:444;;;;;;;;9976:18;9949:21;9971:1;9949:24;;;;;;;;;;;;;:45;;;;;;;;;;;10041:24;10008:27;10036:1;10008:30;;;;;;;;:57;;;;:30;;;;;;;;;;;:57;10091:9;;-1:-1:-1;10114:27:77;;;;10155:3;;;;;10091:9;;10232:23;:4;:21;:23::i;:::-;10228:207;;;10282:16;:4;:14;:16::i;:::-;10275:23;;10228:207;;;10345:9;10337:83;;;;;;;;;;;;10228:207;9297:1148;;;;;;;;;8831:1620;;;;;;;;:::o;420:38:16:-;;;:::o;7452:1373:77:-;7782:15;;;;7765:14;;7868:10;;;;7590:16;;;;;;;;7765:32;;;;;;;;;7590:16;;7827:52;;7782:15;7827:7;:52::i;:::-;7807:72;;8003:6;:24;;;:29;;8031:1;8003:29;7999:66;;;8052:13;;;;8034:15;:31;7999:66;8075:17;8095:9;8075:29;;8130:4;:9;;;8165:4;8238:10;8267:24;:6;:13;;;:22;:24::i;:::-;8266:25;;8309:6;:24;;;:29;;8337:1;8309:29;:171;;8456:6;:24;;;8309:171;;;8362:10;:70;;8405:27;8362:70;;;8375:27;8362:70;8515:6;:15;;;8532:6;:10;;;8544:6;:14;;;8498:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8130:443;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8130:443:77;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;8114:705;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8653:9;8641;:21;8627:35;;8680:6;:24;;;:29;;8708:1;8680:29;8676:57;;;8718:15;8711:22;;8676:57;8769:39;8782:6;8790:4;8796:11;8769:12;:39::i;:::-;8762:46;;;;;;;;;;;;;;8114:705;;;7452:1373;;;;;;;;;:::o;328:41:16:-;;;:::o;4720:1102:77:-;5049:15;;;;5032:14;;5135:10;;;;4856:17;;;;;;;;5032:32;;;;;;;;;4856:17;;5094:52;;5049:15;5094:7;:52::i;:::-;5074:72;;5157:17;5177:9;5157:29;;5212:4;:9;;;5247:4;5320:10;5348:26;:6;:15;;;:24;:26::i;:::-;5392:24;;;;:29;;;:171;;5539:6;:24;;;5392:171;;;5445:10;:70;;5488:27;5445:70;;;5458:27;5445:70;5598:6;:14;;;5614:6;:10;;;5626:6;:15;;;5581:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5212:444;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5212:444:77;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;5196:620;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5736:9;5724;:21;5710:35;;5766:39;5779:6;5787:4;5793:11;5766:12;:39::i;5828:1618::-;5952:17;5983:38;6035:43;6092:19;6174:15;:4;:13;:15::i;:::-;6160:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6160:30:77;;6136:54;;6243:15;:4;:13;:15::i;:::-;6230:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6230:29:77;;6200:59;;6270:9;6293:1147;6321:15;6338:16;6356:10;6370:22;:4;:20;:22::i;:::-;6320:72;;;;;;6487:18;6507:26;6535:31;6568:20;6608:322;6651:261;;;;;;;;6714:7;6651:261;;;;;;6757:8;6651:261;;;;;;6835:8;6651:261;;;;6796:3;6651:261;;;;;;6888:1;6651:261;;;;;6608:21;:322::i;:::-;6486:444;;;;;;;;6972:18;6945:21;6967:1;6945:24;;;;;;;;;;;;;:45;;;;;;;;;;;7037:24;7004:27;7032:1;7004:30;;;;;;;;:57;;;;:30;;;;;;;;;;;:57;7086:10;;-1:-1:-1;7110:27:77;;;;7151:3;;;;;7086:10;;7228:23;:4;:21;:23::i;:::-;7224:206;;;7278:16;:4;:14;:16::i;:::-;7271:23;;6293:1147;;;;;;;;;1779:240:34;1846:14;;;1909:17;:4;1846:14;1909;:17::i;:::-;1900:26;-1:-1:-1;1942:24:34;:4;304:2;1942:13;:24::i;:::-;1936:30;-1:-1:-1;1985:27:34;:4;507:20;1985:14;:27::i;:::-;1976:36;;1779:240;;;;;:::o;742:257:32:-;888:17;924:68;939:7;948:43;971:6;979;987:3;948:22;:43::i;:::-;924:14;:68::i;:::-;917:75;742:257;-1:-1:-1;;;;;742:257:32:o;1558:245:77:-;1671:12;1715:80;1742:7;1751:43;1774:6;1782;1790:3;1751:22;:43::i;:::-;1715:26;:80::i;:::-;1695:101;1558:245;-1:-1:-1;;;;1558:245:77:o;1282:235:34:-;1471:11;;507:20;1471:23;;;;1470:39;1282:235;;;;:::o;992:138::-;1083:11;777:24;-1:-1:-1;1083:40:34;;992:138::o;2561:149::-;2677:11;;2622:12;;2653:50;;2677:4;;507:20;;2677:25;;2653:10;:50::i;:::-;2646:57;2561:149;-1:-1:-1;;2561:149:34:o;924:123:11:-;976:8;1008;1004:1;:12;996:21;;;;;;-1:-1:-1;1038:1:11;924:123::o;4050:664:77:-;4222:14;4250:25;4289:30;4333:7;4365:16;4391:15;4443:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4416:39:77;;-1:-1:-1;4506:25:77;;-1:-1:-1;4524:6:77;;-1:-1:-1;4506:17:77;;-1:-1:-1;;;4506:25:77:i;:::-;4465:66;;-1:-1:-1;4465:66:77;-1:-1:-1;4465:66:77;-1:-1:-1;4568:56:77;:33;;;4602:10;4465:66;4568:33;:56::i;:::-;4542:82;-1:-1:-1;4695:11:77;;-1:-1:-1;;;4050:664:77;;;;;;;:::o;3214:416:31:-;3293:7;3335:6;3320;3329:2;3320:11;:21;;3312:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3399:6;3408:2;3399:11;3382:6;:13;:28;;3374:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3524:30:31;3540:4;3524:30;3518:37;3557:27;3514:71;;;3214:416::o;3636:365::-;3714:6;3754;3740;3749:1;3740:10;:20;;3732:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3817:6;3826:1;3817:10;3800:6;:13;:27;;3792:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3929:29:31;3945:3;3929:29;3923:36;;3636:365::o;784:244:35:-;871:14;;:::i;:::-;910:6;901:15;;:6;:15;;;897:56;;;938:6;;946;897:56;-1:-1:-1;970:51:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;784:244::o;1248:269:32:-;1370:17;1419:44;1446:7;1455;1419:26;:44::i;:::-;1399:65;-1:-1:-1;1482:10:32;:27;;;;1474:36;;;;;1276:512:35;1360:12;1405:3;:10;;;1392:23;;:3;:10;;;:23;;;1384:32;;;;;;-1:-1:-1;1639:10:35;;1651;;;;;1663:7;;;;;1628:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1618:54;;;;;;1510:229;;;;;;;;;;;;;;;;;;;;;241:66;1510:229;;;;;;;;;;;;;;;;;;;;;;;;;1479:278;;;;;;1276:512::o;399:2809:31:-;491:12;539:7;523;533:2;523:12;:23;;515:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;603:6;592:7;583:6;:16;:26;;575:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;672:7;663:6;:16;646:6;:13;:33;;638:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;712:22;775:15;;803:1967;;;;2911:4;2905:11;2892:24;;3097:1;3086:9;3079:20;3145:4;3134:9;3130:20;3124:4;3117:34;768:2397;;803:1967;985:4;979:11;966:24;;1644:2;1635:7;1631:16;2026:9;2019:17;2013:4;2009:28;1997:9;1986;1982:25;1978:60;2074:7;2070:2;2066:16;2326:6;2312:9;2305:17;2299:4;2295:28;2283:9;2275:6;2271:22;2267:57;2263:70;2100:425;2359:3;2355:2;2352:11;2100:425;;;2497:9;;2486:21;;2400:4;2392:13;;;;2432;2100:425;;;-1:-1:-1;;2543:26:31;;;2751:2;2734:11;2747:7;2730:25;2724:4;2717:39;-1:-1:-1;768:2397:31;-1:-1:-1;3192:9:31;399:2809;-1:-1:-1;;;;399:2809:31:o;3531:513:77:-;3638:14;3666:25;3705:15;3749:6;:13;3766:2;3749:19;3745:231;;3804:2;3788:6;:13;:18;3784:50;;;3808:26;;;;;;;;;;:::i;:::-;;;;;;;;3784:50;3897:4;3889:6;3885:17;3875:27;;3947:6;3936:28;;;;;;;;;;;;:::i;:::-;3929:36;;;;;;;;;;;:::i;3745:231::-;4003:6;3992:45;;;;;;;;;;;;:::i;:::-;3985:52;;;;;;3531:513;;;;;:::o;640:3303:81:-;785:30;827:18;855:19;884:17;911:18;939:26;975:25;1128:13;1187:1;1164:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1164:18:81;1151:31;;;;;;;;;;;;;;1150:38;;;;1128:61;;1203:12;1260:3;1238:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1238:18:81;1225:31;;;;;;;;;;;;;;1224:39;;;;;;;;1203:61;;1279:18;1342:1;1319:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1319:18:81;1307:30;;;;;;;;;;;;;;1306:37;;;;1279:65;;1358:17;1419:3;1397:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1397:18:81;1385:30;;;;;;;;;;;;;;1384:38;;;;;;;;1358:65;;1898:1;1882:11;1877:16;;:1;:16;;1844:4;:15;;;1860:12;1844:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1844:29:81;:50;1843:56;1842:117;;;;;1934:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1934:18:81;1922:30;;;;;;;;;;;;;;1921:37;;;1842:117;:161;;;;;1993:9;1980:22;;:10;:22;;;1842:161;1803:200;;2313:1;2302:6;2297:11;;:1;:11;;2269:4;:15;;;2285:7;2269:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2269:24:81;:40;2268:46;2267:108;;;;;2350:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2350:18:81;2337:31;;;;;;;;;;;;;;2336:38;;;2267:108;:152;;;;;2409:9;2396:22;;:10;:22;;;2267:152;2227:192;;2448:12;2438:22;;:7;:22;;;:76;;;;2476:12;2465:23;;:7;:23;;;:48;;;;;2502:11;2492:21;;:6;:21;;;;2465:48;2434:454;;;2549:7;2534:22;;2588:6;2574:20;;2628:12;2612:28;;2673:11;2658:26;;2434:454;;;2738:12;2723:27;;2782:11;2768:25;;2827:7;2811:23;;2867:6;2852:21;;2434:454;-1:-1:-1;;3102:17:81;:32;;;;;-1:-1:-1;;3144:573:81;3167:13;3151:29;;:12;:29;;;3144:573;;3330:13;3314:29;;:12;:29;;;3310:125;;;3378:17;3400:3;:18;;;3378:41;;3370:50;3310:125;3449:14;3498:4;3466;:15;;;3482:12;3466:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3466:29:81;:36;;-1:-1:-1;3543:20:81;3466:36;3543:12;:20::i;:::-;3516:47;;;;;;;-1:-1:-1;;3577:14:81;;;;;3689:17;3144:573;;;3731:20;3727:79;;;3794:1;3767:28;;;;3727:79;3820:21;3816:80;;;3884:1;3857:28;;;;3816:80;3906:30;;;;;;;640:3303;;;;;:::o;3949:197::-;4004:6;;4047:72;4054:6;;4047:72;;4102:5;;;4096:12;;;;4076:6;;4047:72;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:485:89:-;;111:3;104:4;96:6;92:17;88:27;78:2;;133:5;126;119:20;78:2;173:6;160:20;204:49;219:33;249:2;219:33;:::i;:::-;204:49;:::i;:::-;278:2;269:7;262:19;324:3;317:4;312:2;304:6;300:15;296:26;293:35;290:2;;;345:5;338;331:20;290:2;414;407:4;399:6;395:17;388:4;379:7;375:18;362:55;437:16;;;455:4;433:27;426:42;;;;441:7;68:431;-1:-1:-1;;68:431:89:o;504:166::-;583:13;;636:1;625:20;;;615:31;;605:2;;660:1;657;650:12;675:955;;800:4;788:9;783:3;779:19;775:30;772:2;;;822:5;815;808:20;772:2;859;853:9;901:4;893:6;889:17;972:6;960:10;957:22;936:18;924:10;921:34;918:62;915:2;;;983:9;915:2;1010;1003:22;1043:6;-1:-1:-1;1043:6:89;1073:23;;1105:35;1073:23;1105:35;:::i;:::-;1149:23;;1224:2;1209:18;;1196:32;1237:35;1196:32;1237:35;:::i;:::-;1300:2;1288:15;;1281:32;1374:2;1359:18;;;1346:32;1329:15;;;1322:57;1431:2;1416:18;;1403:32;1479:8;1466:22;;1454:35;;1444:2;;1503:1;1500;1493:12;1444:2;1535;1523:15;;1516:32;1582:41;1618:3;1603:19;;1582:41;:::i;:::-;1576:3;1568:6;1564:16;1557:67;;762:868;;;;:::o;1635:138::-;1705:20;;1734:33;1705:20;1734:33;:::i;1778:165::-;1858:13;;1911:6;1900:18;;1890:29;;1880:2;;1933:1;1930;1923:12;1948:410;;;2086:2;2074:9;2065:7;2061:23;2057:32;2054:2;;;2107:6;2099;2092:22;2054:2;2152:9;2139:23;2185:18;2177:6;2174:30;2171:2;;;2222:6;2214;2207:22;2171:2;2250:51;2293:7;2284:6;2273:9;2269:22;2250:51;:::i;:::-;2240:61;2348:2;2333:18;;;;2320:32;;-1:-1:-1;;;;2044:314:89:o;2363:253::-;;;2501:2;2489:9;2480:7;2476:23;2472:32;2469:2;;;2522:6;2514;2507:22;2469:2;-1:-1:-1;;2550:16:89;;2606:2;2591:18;;;2585:25;2550:16;;2585:25;;-1:-1:-1;2459:157:89:o;2621:476::-;;;;2774:2;2762:9;2753:7;2749:23;2745:32;2742:2;;;2795:6;2787;2780:22;2742:2;2836:9;2823:23;2813:33;;2893:2;2882:9;2878:18;2865:32;2855:42;;2948:2;2937:9;2933:18;2920:32;2975:18;2967:6;2964:30;2961:2;;;3012:6;3004;2997:22;2961:2;3040:51;3083:7;3074:6;3063:9;3059:22;3040:51;:::i;:::-;3030:61;;;2732:365;;;;;:::o;3102:676::-;;3235:2;3223:9;3214:7;3210:23;3206:32;3203:2;;;3256:6;3248;3241:22;3203:2;3294:9;3288:16;3327:18;3319:6;3316:30;3313:2;;;3364:6;3356;3349:22;3313:2;3392:22;;3445:4;3437:13;;3433:27;-1:-1:-1;3423:2:89;;3479:6;3471;3464:22;3423:2;3513;3507:9;3538:49;3553:33;3583:2;3553:33;:::i;3538:49::-;3610:2;3603:5;3596:17;3650:7;3645:2;3640;3636;3632:11;3628:20;3625:33;3622:2;;;3676:6;3668;3661:22;3622:2;3694:54;3745:2;3740;3733:5;3729:14;3724:2;3720;3716:11;3694:54;:::i;3783:281::-;;3940:3;3928:9;3919:7;3915:23;3911:33;3908:2;;;3962:6;3954;3947:22;3908:2;3990:68;4050:7;4039:9;3990:68;:::i;:::-;3980:78;3898:166;-1:-1:-1;;;3898:166:89:o;4356:945::-;;;;;;;;4571:3;4559:9;4550:7;4546:23;4542:33;4539:2;;;4593:6;4585;4578:22;4539:2;4630:9;4624:16;4649:33;4676:5;4649:33;:::i;:::-;4701:5;-1:-1:-1;4725:49:89;4770:2;4755:18;;4725:49;:::i;:::-;4715:59;;4793:50;4839:2;4828:9;4824:18;4793:50;:::i;:::-;4783:60;;4862:50;4908:2;4897:9;4893:18;4862:50;:::i;:::-;4852:60;;4931:51;4977:3;4966:9;4962:19;4931:51;:::i;:::-;4921:61;;5027:3;5016:9;5012:19;5006:26;5076:4;5067:7;5063:18;5054:7;5051:31;5041:2;;5101:6;5093;5086:22;5041:2;5181:3;5166:19;;5160:26;5129:7;;-1:-1:-1;5224:15:89;;5217:23;5205:36;;5195:2;;5260:6;5252;5245:22;5195:2;5288:7;5278:17;;;4529:772;;;;;;;;;;:::o;5306:407::-;;;;5461:2;5449:9;5440:7;5436:23;5432:32;5429:2;;;5482:6;5474;5467:22;5429:2;5516:9;5510:16;5500:26;;5569:2;5558:9;5554:18;5548:25;5582:33;5609:5;5582:33;:::i;:::-;5634:5;-1:-1:-1;5658:49:89;5703:2;5688:18;;5658:49;:::i;:::-;5648:59;;5419:294;;;;;:::o;5718:318::-;;5799:5;5793:12;5826:6;5821:3;5814:19;5842:63;5898:6;5891:4;5886:3;5882:14;5875:4;5868:5;5864:16;5842:63;:::i;:::-;5950:2;5938:15;5955:66;5934:88;5925:98;;;;6025:4;5921:109;;5769:267;-1:-1:-1;;5769:267:89:o;6041:514::-;6329:2;6325:15;;;6234:66;6321:24;;;6309:37;;6384:3;6380:16;;;;6398:66;6376:89;6371:2;6362:12;;6355:111;6500:15;;6496:24;6491:2;6482:12;;6475:46;6546:2;6537:12;;6214:341::o;6560:226::-;6736:42;6724:55;;;;6706:74;;6694:2;6679:18;;6661:125::o;6791:593::-;;7034:42;7115:2;7107:6;7103:15;7092:9;7085:34;7169:6;7162:14;7155:22;7150:2;7139:9;7135:18;7128:50;7214:6;7209:2;7198:9;7194:18;7187:34;7269:2;7261:6;7257:15;7252:2;7241:9;7237:18;7230:43;;7310:3;7304;7293:9;7289:19;7282:32;7331:47;7373:3;7362:9;7358:19;7350:6;7331:47;:::i;:::-;7323:55;7014:370;-1:-1:-1;;;;;;;7014:370:89:o;7389:221::-;;7538:2;7527:9;7520:21;7558:46;7600:2;7589:9;7585:18;7577:6;7558:46;:::i;7615:340::-;7817:2;7799:21;;;7856:2;7836:18;;;7829:30;7895:18;7890:2;7875:18;;7868:46;7946:2;7931:18;;7789:166::o;7960:1365::-;;8282:3;8271:9;8267:19;8313:6;8302:9;8295:25;8339:2;8377:3;8372:2;8361:9;8357:18;8350:31;8401:6;8436;8430:13;8467:6;8459;8452:22;8505:3;8494:9;8490:19;8483:26;;8544:2;8536:6;8532:15;8518:29;;8565:4;8578:218;8592:6;8589:1;8586:13;8578:218;;;8657:13;;8672:42;8653:62;8641:75;;8771:15;;;;8736:12;;;;8614:1;8607:9;8578:218;;;-1:-1:-1;;8832:19:89;;;8827:2;8812:18;;8805:47;8902:13;;8924:21;;;8963:12;;;;-1:-1:-1;9000:15:89;;;;9035:4;9048:206;9064:8;9059:3;9056:17;9048:206;;;9137:15;;9154:10;9133:32;9119:47;;9188:14;;;;9227:17;;;;9092:1;9083:11;9048:206;;;-1:-1:-1;;;;9307:2:89;9292:18;;;;9285:34;;;;9271:5;8243:1082;-1:-1:-1;;;;8243:1082:89:o;9330:455::-;9559:25;;;9632:42;9620:55;;;;9615:2;9600:18;;9593:83;9724:10;9712:23;9707:2;9692:18;;9685:51;9767:2;9752:18;;9745:34;9546:3;9531:19;;9513:272::o;9790:242::-;9860:2;9854:9;9890:17;;;9937:18;9922:34;;9958:22;;;9919:62;9916:2;;;9984:9;9916:2;10011;10004:22;9834:198;;-1:-1:-1;9834:198:89:o;10037:240::-;;10120:18;10112:6;10109:30;10106:2;;;10142:9;10106:2;-1:-1:-1;10190:4:89;10178:17;10197:66;10174:90;10266:4;10170:101;;10096:181::o;10282:258::-;10354:1;10364:113;10378:6;10375:1;10372:13;10364:113;;;10454:11;;;10448:18;10435:11;;;10428:39;10400:2;10393:10;10364:113;;;10495:6;10492:1;10489:13;10486:2;;;10530:1;10521:6;10516:3;10512:16;10505:27;10486:2;;10335:205;;;:::o;10545:156::-;10633:42;10626:5;10622:54;10615:5;10612:65;10602:2;;10691:1;10688;10681:12;10602:2;10592:109;:::o"
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "astraCLSwapCallback(int256,int256,bytes)": "11c17848",
              "factory()": "c45a0155",
              "quoteExactInput(bytes,uint256)": "cdca1753",
              "quoteExactInputSingle((address,address,uint256,uint24,uint160))": "c6a5026a",
              "quoteExactOutput(bytes,uint256)": "2f80bb1d",
              "quoteExactOutputSingle((address,address,uint256,uint24,uint160))": "bd21704a"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_WETH9\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"name\":\"astraCLSwapCallback\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"quoteExactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160[]\",\"name\":\"sqrtPriceX96AfterList\",\"type\":\"uint160[]\"},{\"internalType\":\"uint32[]\",\"name\":\"initializedTicksCrossedList\",\"type\":\"uint32[]\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct IQuoterV2.QuoteExactInputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"quoteExactInputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96After\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"initializedTicksCrossed\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"quoteExactOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint160[]\",\"name\":\"sqrtPriceX96AfterList\",\"type\":\"uint160[]\"},{\"internalType\":\"uint32[]\",\"name\":\"initializedTicksCrossedList\",\"type\":\"uint32[]\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct IQuoterV2.QuoteExactOutputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"quoteExactOutputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96After\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"initializedTicksCrossed\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute the swap and check the amounts in the callback.\",\"kind\":\"dev\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IAstraCLPoolActions#swap call\"}},\"quoteExactInput(bytes,uint256)\":{\"params\":{\"amountIn\":\"The amount of the first token to swap\",\"path\":\"The path of the swap, i.e. each token pair and the pool fee\"},\"returns\":{\"amountOut\":\"The amount of the last token that would be received\",\"gasEstimate\":\"The estimate of the gas that the swap consumes\",\"initializedTicksCrossedList\":\"List of the initialized ticks that the swap crossed for each pool in the path\",\"sqrtPriceX96AfterList\":\"List of the sqrt price after the swap for each pool in the path\"}},\"quoteExactInputSingle((address,address,uint256,uint24,uint160))\":{\"params\":{\"params\":\"The params for the quote, encoded as `QuoteExactInputSingleParams` tokenIn The token being swapped in tokenOut The token being swapped out fee The fee of the token pool to consider for the pair amountIn The desired input amount sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\"},\"returns\":{\"amountOut\":\"The amount of `tokenOut` that would be received\",\"gasEstimate\":\"The estimate of the gas that the swap consumes\",\"initializedTicksCrossed\":\"The number of initialized ticks that the swap crossed\",\"sqrtPriceX96After\":\"The sqrt price of the pool after the swap\"}},\"quoteExactOutput(bytes,uint256)\":{\"params\":{\"amountOut\":\"The amount of the last token to receive\",\"path\":\"The path of the swap, i.e. each token pair and the pool fee. Path must be provided in reverse order\"},\"returns\":{\"amountIn\":\"The amount of first token required to be paid\",\"gasEstimate\":\"The estimate of the gas that the swap consumes\",\"initializedTicksCrossedList\":\"List of the initialized ticks that the swap crossed for each pool in the path\",\"sqrtPriceX96AfterList\":\"List of the sqrt price after the swap for each pool in the path\"}},\"quoteExactOutputSingle((address,address,uint256,uint24,uint160))\":{\"params\":{\"params\":\"The params for the quote, encoded as `QuoteExactOutputSingleParams` tokenIn The token being swapped in tokenOut The token being swapped out fee The fee of the token pool to consider for the pair amountOut The desired output amount sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\"},\"returns\":{\"amountIn\":\"The amount required as the input for the swap in order to receive `amountOut`\",\"gasEstimate\":\"The estimate of the gas that the swap consumes\",\"initializedTicksCrossed\":\"The number of initialized ticks that the swap crossed\",\"sqrtPriceX96After\":\"The sqrt price of the pool after the swap\"}}},\"stateVariables\":{\"amountOutCached\":{\"details\":\"Transient storage variable used to check a safety condition in exact output swaps.\"}},\"title\":\"Provides quotes for swaps\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\"},\"quoteExactInput(bytes,uint256)\":{\"notice\":\"Returns the amount out received for a given exact input swap without executing the swap\"},\"quoteExactInputSingle((address,address,uint256,uint24,uint160))\":{\"notice\":\"Returns the amount out received for a given exact input but for a swap of a single pool\"},\"quoteExactOutput(bytes,uint256)\":{\"notice\":\"Returns the amount in required for a given exact output swap without executing the swap\"},\"quoteExactOutputSingle((address,address,uint256,uint24,uint160))\":{\"notice\":\"Returns the amount in required to receive the given exact output amount but for a swap of a single pool\"}},\"notice\":\"Allows getting the expected amount out or amount in for a given swap without executing the swap\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lens/QuoterV2.sol\":\"QuoterV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":{\"keccak256\":\"0xaa82f63f0c930e51d6aaae0d59e7bf3ef5b32371ac0549f6e07bfcab5b4dcb16\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73419af0b4f35f02c3b89d387d6ac46041637a7133e249de617103b7567bf4c4\",\"dweb:/ipfs/QmTfwEX1dCoUUUMaMFzDnqDcFXihHQnEG1fbkBFpidRs8o\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"@airdao/astra-cl-core/contracts/libraries/BitMath.sol\":{\"keccak256\":\"0x82e425066110aac05ed8a9fc90f9ee85142b6f434769447e49d4438a8d9fcd82\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://77a97078bc992c18c59cb61e07fa4632c8a26b6babf00f3b16eabb5dcaa953b4\",\"dweb:/ipfs/QmTj15ufLWk6AxedSVXBcLp5cYf2DCJAeDi94cVemCkm54\"]},\"@airdao/astra-cl-core/contracts/libraries/SafeCast.sol\":{\"keccak256\":\"0xd4c1c1b67f946b077d7c52a158113763a89a210fc2927b8491055a962ecd18c0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5344400c74320ca8dbe19241db7ff49babbd6c875c1b561c79d6e4315a9fb5f9\",\"dweb:/ipfs/QmRKCNTbkovxK1WvejXZr3iAHhGN97ZT1yWGsWCJFkrT5X\"]},\"@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol\":{\"keccak256\":\"0x47b7551bec8cd09091ae50a34c1ed576e317e404fbc1901593283b1cbd3be7c7\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://486b70ed46a9389da18f93654d069024941ce8373b1b8fb30e5051cf2f014a1d\",\"dweb:/ipfs/QmecffKV1nSbd2LfobgR7eqJQSuL5ER5ApAgNbe4sWVFBG\"]},\"@airdao/astra-cl-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xe22d07f1ebf9c8468c81cb6905bfc8f8a54fa2f9b4a50742202a47cdbcb5af80\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d4773ca5008d2a2f496370695942c8ba3d6e1d487adbf5cda1149da12e3a6268\",\"dweb:/ipfs/QmcPYTLpEWfU8e3KAYBfHH7uYR4tGAkvnWrWS1CG8EkyLC\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol\":{\"keccak256\":\"0xed1b8acd0184eb321d5f4b5c2576608d1c12f5db1bb72d950054438f7f1946a6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f55d6aca86dcf1f1ab6413f48964f821306a29914c2117c16f20446faa5d6d0a\",\"dweb:/ipfs/QmWKbbg6kA9kkPVrCh6hJMnPhK1NhuVoHEd9s3vmYWsvTa\"]},\"@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol\":{\"keccak256\":\"0xf21a3d7e2bc14386ce7b072b124b580df53441a32591770845860e8947f942d0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6941e21d9bc52bddc65079c5e7bc9d6ffd6553f6ed7f3d3b340996a55115b46f\",\"dweb:/ipfs/QmaDJ9uafahho77WP5izBCRL4W3mVM7NFL5q5QR5YvAC3A\"]},\"@airdao/astra-cl-periphery/contracts/libraries/Path.sol\":{\"keccak256\":\"0x0a6928608f48763796089e22dfc02a462cce63bb7727663961b3ed8c4f3eb862\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73bb4f107faf873db8700ce8950d2c4c88d41e0e1716da599bb733ad884f95eb\",\"dweb:/ipfs/QmZXSaPVpgDXpkKqYRdByJ3UXaMV2ATkr7V72nRZij8wmB\"]},\"@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0xdd82100913bcb7c490e9e6912ab33994bd97d5a59e67209826ebf917bc8271c1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ecfc24c77d80aa718604d8a2c4d59460b76b5fd567d15206414e3838dd6698b7\",\"dweb:/ipfs/QmVtUC9dnade4RkzXaSqEFdAkiEftJ777jmT619LX2VLGv\"]},\"contracts/interfaces/IQuoterV2.sol\":{\"keccak256\":\"0x7e931f0cd34811851031c4f1318f59b4a4b427a2d2e2968b8e5ed87a9f7f89d6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://63a8d7dcdd081004356b39e1b8e19ee56b02b3abd3e4165781bde1a100a35bed\",\"dweb:/ipfs/QmdfpYkMxoaeEd646aSioLZcPodnCnpZy9Ny4j98uAba2J\"]},\"contracts/lens/QuoterV2.sol\":{\"keccak256\":\"0xefae22c58fd0ab947f9485dc76ee72e5587a60de3bf1ae9de68625f49bd7045d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://93f476879446c2afc770b07efa73b7afc2d81ff492eafc06afaef56ea8dddcde\",\"dweb:/ipfs/Qmc9tXgaAuSW66ZSMD8vGMtaDVaSwCoRkHUYBqzZCsUiLx\"]},\"contracts/libraries/PoolTicksCounter.sol\":{\"keccak256\":\"0x64582f3e6588d786a37e03b48f61725720652a2284308e0dffd5f28c9a3bdd15\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1ad4197021a4fcdee55402bab2a7a934ead5ea04a24262b1dcc8a08f44735eff\",\"dweb:/ipfs/QmfGC9JcqbY3C1cxBFhgLH7hJsqmCLjHwqPPYWn1S3PF1E\"]}},\"version\":1}"
        }
      },
      "contracts/lens/TokenValidator.sol": {
        "TokenValidator": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_factoryClassic",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_positionManager",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "astraCall",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address[]",
                  "name": "tokens",
                  "type": "address[]"
                },
                {
                  "internalType": "address[]",
                  "name": "baseTokens",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256",
                  "name": "amountToBorrow",
                  "type": "uint256"
                }
              ],
              "name": "batchValidate",
              "outputs": [
                {
                  "internalType": "enum ITokenValidator.Status[]",
                  "name": "isFotResults",
                  "type": "uint8[]"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factoryClassic",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "positionManager",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "baseTokens",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256",
                  "name": "amountToBorrow",
                  "type": "uint256"
                }
              ],
              "name": "validate",
              "outputs": [
                {
                  "internalType": "enum ITokenValidator.Status",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:507:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "76:117:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "86:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "101:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "95:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "95:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "86:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "171:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "180:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "183:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "173:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "173:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "173:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "130:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "141:5:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "156:3:89",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "161:1:89",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "152:3:89"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "152:11:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "165:1:89",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "148:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "148:19:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "137:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "137:31:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "127:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "127:42:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "120:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "120:50:89"
                              },
                              "nodeType": "YulIf",
                              "src": "117:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "55:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "66:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:179:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "296:209:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "342:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "351:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "359:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "344:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "344:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "344:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "317:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "326:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "313:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "313:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "338:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "309:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "309:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "306:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "377:52:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "419:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "387:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "387:42:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "377:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "438:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "484:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "495:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "480:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "480:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "448:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "448:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "438:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "254:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "265:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "277:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "285:6:89",
                            "type": ""
                          }
                        ],
                        "src": "198:307:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_t_address_fromMemory(headStart)\n        value1 := abi_decode_t_address_fromMemory(add(headStart, 32))\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60c060405234801561001057600080fd5b506040516110e03803806110e083398101604081905261002f91610069565b6001600160601b0319606092831b8116608052911b1660a05261009b565b80516001600160a01b038116811461006457600080fd5b919050565b6000806040838503121561007b578182fd5b6100848361004d565b91506100926020840161004d565b90509250929050565b60805160601c60a05160601c61101c6100c46000398061019252508061016e525061101c6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063791b98bc11610050578063791b98bc146100aa578063be7672e5146100b2578063ee906f6b146100d257610067565b80630143aace1461006c5780634f04a0db14610095575b600080fd5b61007f61007a366004610b75565b6100e7565b60405161008c9190610dea565b60405180910390f35b61009d61016c565b60405161008c9190610d7e565b61009d610190565b6100c56100c0366004610c60565b6101b4565b60405161008c9190610d9f565b6100e56100e0366004610bcf565b610272565b005b6000805b8381101561015e5760006101208787878581811061010557fe5b905060200201602081019061011a9190610b3d565b866104d6565b9050600181600281111561013057fe5b14806101475750600281600281111561014557fe5b145b156101555791506101649050565b506001016100eb565b50600090505b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60608467ffffffffffffffff811180156101cd57600080fd5b506040519080825280602002602001820160405280156101f7578160200160208202803683370190505b50905060005b858110156102685761023187878381811061021457fe5b90506020020160208101906102299190610b3d565b8686866100e7565b82828151811061023d57fe5b6020026020010190600281111561025057fe5b9081600281111561025d57fe5b9052506001016101fd565b5095945050505050565b60003390506000808273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156102c057600080fd5b505afa1580156102d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f89190610b59565b8373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561033e57600080fd5b505afa158015610352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103769190610b59565b915091506000808811610389578161038b565b825b905060008061039c87890189610ce9565b915091506000828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103dc9190610d7e565b60206040518083038186803b1580156103f457600080fd5b505afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c9190610cd1565b0390508181146104a457604080518082018252600381527f464f540000000000000000000000000000000000000000000000000000000000602082015290517f08c379a000000000000000000000000000000000000000000000000000000000815261049b9190600401610dfe565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049b90610e11565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561051457506000610895565b600061059e3073ffffffffffffffffffffffffffffffffffffffff16634f04a0db6040518163ffffffff1660e01b815260040160206040518083038186803b15801561055f57600080fd5b505afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610b59565b868661089c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0dfe168100000000000000000000000000000000000000000000000000000000179052905191925060009173ffffffffffffffffffffffffffffffffffffffff84169161061d91610d62565b6000604051808303816000865af19150503d806000811461065a576040519150601f19603f3d011682016040523d82523d6000602084013e61065f565b606091505b5091505080516000141561067857600092505050610895565b60008180602001905181019061068e9190610b59565b90506000808273ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146106ce576000876106d2565b8660005b9150915060008973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107119190610d7e565b60206040518083038186803b15801561072957600080fd5b505afa15801561073d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107619190610cd1565b905060008690508073ffffffffffffffffffffffffffffffffffffffff1663022c0d9f858530868e60405160200161079a929190610e7f565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016107c89493929190610e8d565b600060405180830381600087803b1580156107e257600080fd5b505af19250505080156107f3575060015b610863576107ff610f08565b8061080a5750610859565b61081381610987565b1561082957600198505050505050505050610895565b610832816109ea565b1561084857600298505050505050505050610895565b600098505050505050505050610895565b3d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049b90610e48565b9392505050565b60008060006108ab8585610a56565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60408051808201909152600381527f464f5400000000000000000000000000000000000000000000000000000000006020918201528151908201207f0d441c7cb74abc94cc606c98870ca9174ef5b167b2f7ffed505658cf4574b003145b919050565b60408051808201909152600f8082527f5452414e534645525f4641494c45440000000000000000000000000000000000602083015282516000929180821015610a3957600093505050506109e5565b602092830181902091819003850190920191909120149050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a9257600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610acc578284610acf565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610af457600080fd5b9250929050565b60008083601f840112610b0c578182fd5b50813567ffffffffffffffff811115610b23578182fd5b6020830191508360208083028501011115610af457600080fd5b600060208284031215610b4e578081fd5b813561089581610fea565b600060208284031215610b6a578081fd5b815161089581610fea565b60008060008060608587031215610b8a578283fd5b8435610b9581610fea565b9350602085013567ffffffffffffffff811115610bb0578384fd5b610bbc87828801610afb565b9598909750949560400135949350505050565b600080600080600060808688031215610be6578081fd5b8535610bf181610fea565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610c1b578283fd5b818801915088601f830112610c2e578283fd5b813581811115610c3c578384fd5b896020828501011115610c4d578384fd5b9699959850939650602001949392505050565b600080600080600060608688031215610c77578081fd5b853567ffffffffffffffff80821115610c8e578283fd5b610c9a89838a01610afb565b90975095506020880135915080821115610cb2578283fd5b50610cbf88828901610afb565b96999598509660400135949350505050565b600060208284031215610ce2578081fd5b5051919050565b60008060408385031215610cfb578182fd5b50508035926020909101359150565b60008151808452610d22816020860160208601610ed2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60038110610d5e57fe5b9052565b60008251610d74818460208701610ed2565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015610dde57610dce838551610d54565b9284019291840191600101610dbb565b50909695505050505050565b60208101610df88284610d54565b92915050565b6000602082526108956020830184610d0a565b60208082526007908201527f556e6b6e6f776e00000000000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b918252602082015260400190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152610ec86080830184610d0a565b9695505050505050565b60005b83811015610eed578181015183820152602001610ed5565b83811115610efc576000848401525b50505050565b60e01c90565b600060443d1015610f1857610fe7565b600481823e6308c379a0610f2c8251610f02565b14610f3657610fe7565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff8160248401118184111715610f845750505050610fe7565b82840192508251915080821115610f9e5750505050610fe7565b503d83016020828401011115610fb657505050610fe7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150505b90565b73ffffffffffffffffffffffffffffffffffffffff8116811461100c57600080fd5b5056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x10E0 CODESIZE SUB DUP1 PUSH2 0x10E0 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x69 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 SHL AND PUSH1 0xA0 MSTORE PUSH2 0x9B JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7B JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x84 DUP4 PUSH2 0x4D JUMP JUMPDEST SWAP2 POP PUSH2 0x92 PUSH1 0x20 DUP5 ADD PUSH2 0x4D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0x101C PUSH2 0xC4 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x192 MSTORE POP DUP1 PUSH2 0x16E MSTORE POP PUSH2 0x101C PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x791B98BC GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x791B98BC EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0xBE7672E5 EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0xEE906F6B EQ PUSH2 0xD2 JUMPI PUSH2 0x67 JUMP JUMPDEST DUP1 PUSH4 0x143AACE EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x4F04A0DB EQ PUSH2 0x95 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0xB75 JUMP JUMPDEST PUSH2 0xE7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0xDEA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x9D PUSH2 0x16C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0xD7E JUMP JUMPDEST PUSH2 0x9D PUSH2 0x190 JUMP JUMPDEST PUSH2 0xC5 PUSH2 0xC0 CALLDATASIZE PUSH1 0x4 PUSH2 0xC60 JUMP JUMPDEST PUSH2 0x1B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0xD9F JUMP JUMPDEST PUSH2 0xE5 PUSH2 0xE0 CALLDATASIZE PUSH1 0x4 PUSH2 0xBCF JUMP JUMPDEST PUSH2 0x272 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15E JUMPI PUSH1 0x0 PUSH2 0x120 DUP8 DUP8 DUP8 DUP6 DUP2 DUP2 LT PUSH2 0x105 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x11A SWAP2 SWAP1 PUSH2 0xB3D JUMP JUMPDEST DUP7 PUSH2 0x4D6 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x130 JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x147 JUMPI POP PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x145 JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0x155 JUMPI SWAP2 POP PUSH2 0x164 SWAP1 POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xEB JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x60 DUP5 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1F7 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x268 JUMPI PUSH2 0x231 DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x214 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x229 SWAP2 SWAP1 PUSH2 0xB3D JUMP JUMPDEST DUP7 DUP7 DUP7 PUSH2 0xE7 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x23D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x250 JUMPI INVALID JUMPDEST SWAP1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x25D JUMPI INVALID JUMPDEST SWAP1 MSTORE POP PUSH1 0x1 ADD PUSH2 0x1FD JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F8 SWAP2 SWAP1 PUSH2 0xB59 JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x352 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x376 SWAP2 SWAP1 PUSH2 0xB59 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 DUP9 GT PUSH2 0x389 JUMPI DUP2 PUSH2 0x38B JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x39C DUP8 DUP10 ADD DUP10 PUSH2 0xCE9 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DC SWAP2 SWAP1 PUSH2 0xD7E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x408 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x42C SWAP2 SWAP1 PUSH2 0xCD1 JUMP JUMPDEST SUB SWAP1 POP DUP2 DUP2 EQ PUSH2 0x4A4 JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x3 DUP2 MSTORE PUSH32 0x464F540000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH2 0x49B SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0xDFE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x49B SWAP1 PUSH2 0xE11 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x514 JUMPI POP PUSH1 0x0 PUSH2 0x895 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x59E ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4F04A0DB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x55F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x573 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x597 SWAP2 SWAP1 PUSH2 0xB59 JUMP JUMPDEST DUP7 DUP7 PUSH2 0x89C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP2 MSTORE PUSH1 0x24 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDFE168100000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 PUSH2 0x61D SWAP2 PUSH2 0xD62 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x65A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x65F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP POP DUP1 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x678 JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x895 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x68E SWAP2 SWAP1 PUSH2 0xB59 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x6CE JUMPI PUSH1 0x0 DUP8 PUSH2 0x6D2 JUMP JUMPDEST DUP7 PUSH1 0x0 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x711 SWAP2 SWAP1 PUSH2 0xD7E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x729 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x73D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x761 SWAP2 SWAP1 PUSH2 0xCD1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x22C0D9F DUP6 DUP6 ADDRESS DUP7 DUP15 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x79A SWAP3 SWAP2 SWAP1 PUSH2 0xE7F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xE8D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x7F3 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x863 JUMPI PUSH2 0x7FF PUSH2 0xF08 JUMP JUMPDEST DUP1 PUSH2 0x80A JUMPI POP PUSH2 0x859 JUMP JUMPDEST PUSH2 0x813 DUP2 PUSH2 0x987 JUMP JUMPDEST ISZERO PUSH2 0x829 JUMPI PUSH1 0x1 SWAP9 POP POP POP POP POP POP POP POP POP PUSH2 0x895 JUMP JUMPDEST PUSH2 0x832 DUP2 PUSH2 0x9EA JUMP JUMPDEST ISZERO PUSH2 0x848 JUMPI PUSH1 0x2 SWAP9 POP POP POP POP POP POP POP POP POP PUSH2 0x895 JUMP JUMPDEST PUSH1 0x0 SWAP9 POP POP POP POP POP POP POP POP POP PUSH2 0x895 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x49B SWAP1 PUSH2 0xE48 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x8AB DUP6 DUP6 PUSH2 0xA56 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 DUP6 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP6 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP11 SWAP1 SWAP5 SHL SWAP1 SWAP4 AND PUSH1 0x69 DUP5 ADD MSTORE PUSH1 0x7D DUP4 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH32 0x400E13FC6C59224F20228F0C0561806856AC34B7318F337F8012707C880C351F PUSH1 0x9D DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP3 ADD SWAP1 SWAP8 MSTORE DUP1 MLOAD SWAP7 ADD SWAP6 SWAP1 SWAP6 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 MSTORE PUSH32 0x464F540000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH32 0xD441C7CB74ABC94CC606C98870CA9174EF5B167B2F7FFED505658CF4574B003 EQ JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xF DUP1 DUP3 MSTORE PUSH32 0x5452414E534645525F4641494C45440000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x0 SWAP3 SWAP2 DUP1 DUP3 LT ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x9E5 JUMP JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD DUP2 SWAP1 KECCAK256 SWAP2 DUP2 SWAP1 SUB DUP6 ADD SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 EQ SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xA92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xACC JUMPI DUP3 DUP5 PUSH2 0xACF JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xAF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xB0C JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB23 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0xAF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB4E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x895 DUP2 PUSH2 0xFEA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB6A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x895 DUP2 PUSH2 0xFEA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB8A JUMPI DUP3 DUP4 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0xB95 DUP2 PUSH2 0xFEA JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBB0 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xBBC DUP8 DUP3 DUP9 ADD PUSH2 0xAFB JUMP JUMPDEST SWAP6 SWAP9 SWAP1 SWAP8 POP SWAP5 SWAP6 PUSH1 0x40 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xBE6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xBF1 DUP2 PUSH2 0xFEA JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xC1B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xC2E JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xC3C JUMPI DUP4 DUP5 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xC4D JUMPI DUP4 DUP5 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP PUSH1 0x20 ADD SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xC77 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xC8E JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xC9A DUP10 DUP4 DUP11 ADD PUSH2 0xAFB JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xCB2 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0xCBF DUP9 DUP3 DUP10 ADD PUSH2 0xAFB JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP7 PUSH1 0x40 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCE2 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCFB JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xD22 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xED2 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0xD5E JUMPI INVALID JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xD74 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xED2 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDDE JUMPI PUSH2 0xDCE DUP4 DUP6 MLOAD PUSH2 0xD54 JUMP JUMPDEST SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xDBB JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xDF8 DUP3 DUP5 PUSH2 0xD54 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x895 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xD0A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x7 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6B6E6F776E00000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0xEC8 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0xD0A JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xEED JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xED5 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xEFC JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0xE0 SHR SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x44 RETURNDATASIZE LT ISZERO PUSH2 0xF18 JUMPI PUSH2 0xFE7 JUMP JUMPDEST PUSH1 0x4 DUP2 DUP3 RETURNDATACOPY PUSH4 0x8C379A0 PUSH2 0xF2C DUP3 MLOAD PUSH2 0xF02 JUMP JUMPDEST EQ PUSH2 0xF36 JUMPI PUSH2 0xFE7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC RETURNDATASIZE ADD PUSH1 0x4 DUP3 RETURNDATACOPY DUP1 MLOAD RETURNDATASIZE PUSH8 0xFFFFFFFFFFFFFFFF DUP2 PUSH1 0x24 DUP5 ADD GT DUP2 DUP5 GT OR ISZERO PUSH2 0xF84 JUMPI POP POP POP POP PUSH2 0xFE7 JUMP JUMPDEST DUP3 DUP5 ADD SWAP3 POP DUP3 MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xF9E JUMPI POP POP POP POP PUSH2 0xFE7 JUMP JUMPDEST POP RETURNDATASIZE DUP4 ADD PUSH1 0x20 DUP3 DUP5 ADD ADD GT ISZERO PUSH2 0xFB6 JUMPI POP POP POP PUSH2 0xFE7 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP2 POP POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x100C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "1563:4807:78:-:0;;;1774:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;507:32:56;;;;;;;;549:34;;;;;1563:4807:78;;14:179:89;95:13;;-1:-1:-1;;;;;137:31:89;;127:42;;117:2;;183:1;180;173:12;117:2;76:117;;;:::o;198:307::-;;;338:2;326:9;317:7;313:23;309:32;306:2;;;359:6;351;344:22;306:2;387:42;419:9;387:42;:::i;:::-;377:52;;448:51;495:2;484:9;480:18;448:51;:::i;:::-;438:61;;296:209;;;;;:::o;:::-;1563:4807:78;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:9070:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "104:314:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "153:30:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "162:8:89"
                                        },
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "172:8:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "155:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "155:26:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "155:26:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "132:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "140:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "128:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "128:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "147:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "124:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "124:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "117:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "117:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "114:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "192:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "215:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "202:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "202:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "192:6:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "265:30:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "274:8:89"
                                        },
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "284:8:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "267:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "267:26:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "267:26:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "237:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "245:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "234:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "234:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "231:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "304:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "320:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "328:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "316:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "316:17:89"
                              },
                              "variableNames": [
                                {
                                  "name": "arrayPos",
                                  "nodeType": "YulIdentifier",
                                  "src": "304:8:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "396:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "405:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "408:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "398:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "398:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "398:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "356:6:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "368:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "376:4:89",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mul",
                                              "nodeType": "YulIdentifier",
                                              "src": "364:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "364:17:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "352:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "352:30:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "384:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "348:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "348:41:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "391:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "345:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "345:50:89"
                              },
                              "nodeType": "YulIf",
                              "src": "342:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "67:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "75:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "arrayPos",
                            "nodeType": "YulTypedName",
                            "src": "83:8:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "93:6:89",
                            "type": ""
                          }
                        ],
                        "src": "14:404:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "493:189:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "539:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "548:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "556:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "541:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "541:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "541:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "514:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "523:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "510:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "510:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "535:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "506:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "506:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "503:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "574:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "600:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "587:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "587:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "578:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "646:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "619:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "619:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "619:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "661:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "671:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "661:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "459:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "470:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "482:6:89",
                            "type": ""
                          }
                        ],
                        "src": "423:259:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "768:182:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "814:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "823:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "831:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "816:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "816:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "816:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "789:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "798:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "785:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "785:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "810:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "781:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "781:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "778:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "849:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "868:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "862:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "862:16:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "853:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "914:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "887:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "887:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "887:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "929:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "939:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "929:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "734:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "745:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "757:6:89",
                            "type": ""
                          }
                        ],
                        "src": "687:263:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1044:182:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1090:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1099:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1107:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1092:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1092:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1092:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1065:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1074:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1061:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1061:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1086:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1057:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1057:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1054:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1125:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1144:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1138:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1138:16:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1129:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1190:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1163:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1163:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1163:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1205:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1215:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1205:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_payable_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1010:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1021:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1033:6:89",
                            "type": ""
                          }
                        ],
                        "src": "955:271:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1370:529:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1416:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1425:6:89"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1433:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1418:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1418:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1418:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1391:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1400:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1387:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1387:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1412:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1383:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1383:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1380:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1451:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1477:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1464:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1464:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1455:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1523:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1496:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1496:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1496:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1538:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1548:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1538:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1562:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1593:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1604:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1589:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1589:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1576:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1576:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1566:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1651:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1660:6:89"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1668:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1653:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1653:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1653:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1623:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1631:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1620:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1620:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1617:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1686:102:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1760:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1771:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1756:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1756:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1780:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "1712:43:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1712:76:89"
                              },
                              "variables": [
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1690:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1700:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1797:18:89",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "1807:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1797:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1824:18:89",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "1834:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1824:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1851:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1878:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1889:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1874:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1874:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1861:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1861:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "1851:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1312:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1323:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1335:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1343:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1351:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "1359:6:89",
                            "type": ""
                          }
                        ],
                        "src": "1231:668:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2044:775:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2091:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "2100:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "2108:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2093:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2093:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2093:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2065:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2074:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2061:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2061:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2086:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2057:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2057:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2054:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2126:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2152:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2139:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2139:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2130:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2198:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2171:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2171:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2171:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2213:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2223:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2213:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2237:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2264:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2275:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2260:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2260:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2247:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2247:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2237:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2288:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2315:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2326:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2311:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2311:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2298:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2298:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2288:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2339:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2370:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2381:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2366:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2366:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2353:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2353:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2343:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2394:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2404:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2398:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2449:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "2458:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "2466:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2451:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2451:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2451:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2437:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2445:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2434:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2434:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2431:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2484:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2498:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2509:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2494:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2494:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2488:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2564:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "2573:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "2581:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2566:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2566:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2566:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2543:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2547:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2539:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2539:13:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2554:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2535:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2535:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2528:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2528:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2525:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2599:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2626:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2613:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2613:16:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "2603:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2656:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "2665:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "2673:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2658:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2658:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2658:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2644:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2652:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2641:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2641:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2638:2:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2732:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "2741:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "2749:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2734:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2734:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2734:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2705:2:89"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "2709:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2701:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2701:15:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2718:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2697:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2697:24:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2723:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2694:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2694:37:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2691:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2767:21:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2781:2:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2785:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2777:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2777:11:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "2767:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2797:16:89",
                              "value": {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "2807:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "2797:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_uint256t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1978:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1989:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2001:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2009:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2017:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2025:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "2033:6:89",
                            "type": ""
                          }
                        ],
                        "src": "1904:915:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2998:709:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3044:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "3053:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "3061:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3046:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3046:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3046:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3019:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3028:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3015:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3015:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3040:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3011:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3011:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3008:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3079:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3106:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3093:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3093:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "3083:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3125:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3135:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3129:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3180:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "3189:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "3197:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3182:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3182:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3182:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "3168:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3176:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3165:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3165:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3162:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3215:102:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3289:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "3300:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3285:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3285:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3309:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "3241:43:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3241:76:89"
                              },
                              "variables": [
                                {
                                  "name": "value0_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3219:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3229:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3326:18:89",
                              "value": {
                                "name": "value0_1",
                                "nodeType": "YulIdentifier",
                                "src": "3336:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3326:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3353:18:89",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "3363:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3353:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3380:48:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3413:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3424:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3409:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3409:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3396:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3396:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3384:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3457:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "3466:6:89"
                                        },
                                        {
                                          "name": "value4",
                                          "nodeType": "YulIdentifier",
                                          "src": "3474:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3459:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3459:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3459:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3443:8:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3453:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3440:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3440:16:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3437:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3492:104:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3566:9:89"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3577:8:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3562:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3562:24:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3588:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "3518:43:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3518:78:89"
                              },
                              "variables": [
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3496:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value3_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3506:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3605:18:89",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "3615:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3605:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3632:18:89",
                              "value": {
                                "name": "value3_1",
                                "nodeType": "YulIdentifier",
                                "src": "3642:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "3632:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3659:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3686:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3697:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3682:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3682:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3669:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3669:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3659:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptrt_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2932:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2943:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2955:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2963:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2971:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2979:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "2987:6:89",
                            "type": ""
                          }
                        ],
                        "src": "2824:883:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3793:113:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3839:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3848:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3856:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3841:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3841:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3841:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3814:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3823:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3810:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3810:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3835:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3806:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3806:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3803:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3874:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3890:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3884:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3884:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3874:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3759:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3770:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3782:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3712:194:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3998:171:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4044:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4053:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4061:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4046:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4046:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4046:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4019:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4028:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4015:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4015:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4040:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4011:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4011:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4008:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4079:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4102:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4089:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4089:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4079:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4121:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4148:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4159:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4144:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4144:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4131:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4131:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4121:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3956:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3967:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3979:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3987:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3911:258:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4225:267:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4235:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4255:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4249:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4249:12:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4239:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4277:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4282:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4270:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4270:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4270:19:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "4324:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4331:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4320:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4320:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "4342:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4347:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4338:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4338:14:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4354:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4298:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4298:63:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4298:63:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4370:116:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "4385:3:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "4398:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4406:2:89",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "4394:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4394:15:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4411:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "4390:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4390:88:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4381:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4381:98:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4481:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4377:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4377:109:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "4370:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "4202:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "4209:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "4217:3:89",
                            "type": ""
                          }
                        ],
                        "src": "4174:318:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4548:80:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4582:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "4584:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4584:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4584:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "4571:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4578:1:89",
                                        "type": "",
                                        "value": "3"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4568:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4568:12:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "4561:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4561:20:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4558:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4611:3:89"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4616:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4604:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4604:18:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4604:18:89"
                            }
                          ]
                        },
                        "name": "abi_encode_t_enum$_Status",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "4532:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "4539:3:89",
                            "type": ""
                          }
                        ],
                        "src": "4497:131:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4770:137:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4780:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4800:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4794:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4794:13:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4784:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4842:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4850:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4838:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4838:17:89"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4857:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4862:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4816:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4816:53:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4816:53:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4878:23:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4889:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4894:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4885:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4885:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "4878:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "4746:3:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4751:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "4762:3:89",
                            "type": ""
                          }
                        ],
                        "src": "4633:274:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5013:125:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5023:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5035:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5046:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5031:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5031:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5023:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5065:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5080:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5088:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5076:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5076:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5058:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5058:74:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5058:74:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4982:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4993:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5004:4:89",
                            "type": ""
                          }
                        ],
                        "src": "4912:226:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5303:503:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5313:12:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5323:2:89",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5317:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5334:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5352:9:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5363:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5348:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5348:18:89"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5338:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5382:9:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5393:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5375:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5375:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5375:21:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5405:17:89",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "5416:6:89"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "5409:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5431:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5451:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5445:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5445:13:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "5435:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5474:6:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5482:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5467:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5467:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5467:22:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5498:25:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5509:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5520:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5505:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5505:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "5498:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5532:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5550:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5558:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5546:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5546:15:89"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "5536:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5570:13:89",
                              "value": {
                                "name": "tail",
                                "nodeType": "YulIdentifier",
                                "src": "5579:4:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "5574:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5641:139:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "srcPtr",
                                              "nodeType": "YulIdentifier",
                                              "src": "5687:6:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "5681:5:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5681:13:89"
                                        },
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "5696:3:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "abi_encode_t_enum$_Status",
                                        "nodeType": "YulIdentifier",
                                        "src": "5655:25:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5655:45:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5655:45:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5713:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "5724:3:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5729:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5720:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5720:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5713:3:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5745:25:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "5759:6:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5767:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5755:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5755:15:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5745:6:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "5603:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5606:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5600:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5600:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "5614:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5616:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "5625:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5628:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5621:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5621:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "5616:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "5596:3:89",
                                "statements": []
                              },
                              "src": "5592:188:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5789:11:89",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "5797:3:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5789:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_enum$_Status_$9061_$dyn_memory_ptr__to_t_array$_t_uint8_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5272:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5283:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5294:4:89",
                            "type": ""
                          }
                        ],
                        "src": "5143:663:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5921:95:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5931:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5943:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5954:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5939:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5939:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5931:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5992:6:89"
                                  },
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6000:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_enum$_Status",
                                  "nodeType": "YulIdentifier",
                                  "src": "5966:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5966:44:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5966:44:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_enum$_Status_$9061__to_t_uint8__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5890:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5901:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5912:4:89",
                            "type": ""
                          }
                        ],
                        "src": "5811:205:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6142:100:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6159:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6170:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6152:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6152:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6152:21:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6182:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6209:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6221:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6232:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6217:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6217:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "6190:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6190:46:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6182:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6111:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6122:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6133:4:89",
                            "type": ""
                          }
                        ],
                        "src": "6021:221:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6421:156:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6438:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6449:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6431:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6431:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6431:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6472:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6483:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6468:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6468:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6488:1:89",
                                    "type": "",
                                    "value": "7"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6461:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6461:29:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6461:29:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6510:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6521:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6506:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6506:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "6526:9:89",
                                    "type": "",
                                    "value": "Unknown"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6499:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6499:37:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6499:37:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6545:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6557:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6568:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6553:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6553:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6545:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_6ff165d3fe0272c13129fc9e1aecd998364a5fdcad04c6ae84a7d1dfc3d06a17__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6398:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6412:4:89",
                            "type": ""
                          }
                        ],
                        "src": "6247:330:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6756:166:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6773:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6784:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6766:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6766:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6766:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6807:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6818:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6803:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6803:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6823:2:89",
                                    "type": "",
                                    "value": "16"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6796:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6796:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6796:30:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6846:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6857:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6842:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6842:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "6862:18:89",
                                    "type": "",
                                    "value": "Unexpected error"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6835:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6835:46:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6835:46:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6890:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6902:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6913:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6898:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6898:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6890:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6733:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6747:4:89",
                            "type": ""
                          }
                        ],
                        "src": "6582:340:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7056:119:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7066:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7078:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7089:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7074:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7074:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7066:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7108:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7119:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7101:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7101:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7101:25:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7146:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7157:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7142:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7142:18:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7162:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7135:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7135:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7135:34:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7017:9:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7028:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7036:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7047:4:89",
                            "type": ""
                          }
                        ],
                        "src": "6927:248:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7383:280:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7400:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7411:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7393:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7393:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7393:25:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7438:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7449:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7434:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7434:18:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7454:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7427:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7427:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7427:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7481:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7492:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7477:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7477:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "7501:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7509:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7497:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7497:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7470:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7470:83:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7470:83:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7573:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7584:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7569:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7569:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7589:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7562:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7562:31:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7562:31:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7602:55:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "7629:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7641:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7652:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7637:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7637:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "7610:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7610:47:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7602:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7328:9:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "7339:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7347:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7355:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7363:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7374:4:89",
                            "type": ""
                          }
                        ],
                        "src": "7180:483:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7721:205:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7731:10:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7740:1:89",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "7735:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7800:63:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "7825:3:89"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "7830:1:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "7821:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7821:11:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "7844:3:89"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "7849:1:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "7840:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "7840:11:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "7834:5:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7834:18:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7814:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7814:39:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7814:39:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "7761:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7764:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7758:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7758:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "7772:19:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7774:15:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "7783:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7786:2:89",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7779:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7779:10:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "7774:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "7754:3:89",
                                "statements": []
                              },
                              "src": "7750:113:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7889:31:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "7902:3:89"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "7907:6:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "7898:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7898:16:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7916:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7891:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7891:27:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7891:27:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "7878:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7881:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7875:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7875:13:89"
                              },
                              "nodeType": "YulIf",
                              "src": "7872:2:89"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "7699:3:89",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "7704:3:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "7709:6:89",
                            "type": ""
                          }
                        ],
                        "src": "7668:258:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7988:31:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7990:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8006:3:89",
                                    "type": "",
                                    "value": "224"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "8011:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "8002:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8002:15:89"
                              },
                              "variableNames": [
                                {
                                  "name": "newValue",
                                  "nodeType": "YulIdentifier",
                                  "src": "7990:8:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "shift_right_224_unsigned",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "7965:5:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "newValue",
                            "nodeType": "YulTypedName",
                            "src": "7975:8:89",
                            "type": ""
                          }
                        ],
                        "src": "7931:88:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8071:836:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8111:9:89",
                                "statements": [
                                  {
                                    "nodeType": "YulLeave",
                                    "src": "8113:5:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "8087:14:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8087:16:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8105:4:89",
                                    "type": "",
                                    "value": "0x44"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8084:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8084:26:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8081:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "ret",
                                    "nodeType": "YulIdentifier",
                                    "src": "8144:3:89"
                                  },
                                  {
                                    "name": "ret",
                                    "nodeType": "YulIdentifier",
                                    "src": "8149:3:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8154:1:89",
                                    "type": "",
                                    "value": "4"
                                  }
                                ],
                                "functionName": {
                                  "name": "returndatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "8129:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8129:27:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8129:27:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8229:9:89",
                                "statements": [
                                  {
                                    "nodeType": "YulLeave",
                                    "src": "8231:5:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "ret",
                                                "nodeType": "YulIdentifier",
                                                "src": "8209:3:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nodeType": "YulIdentifier",
                                              "src": "8203:5:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8203:10:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shift_right_224_unsigned",
                                          "nodeType": "YulIdentifier",
                                          "src": "8178:24:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8178:36:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8216:10:89",
                                        "type": "",
                                        "value": "0x08c379a0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "8175:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8175:52:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "8168:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8168:60:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8165:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8247:21:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8265:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8259:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8259:9:89"
                              },
                              "variables": [
                                {
                                  "name": "data",
                                  "nodeType": "YulTypedName",
                                  "src": "8251:4:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "8292:4:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8298:1:89",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "returndatasize",
                                          "nodeType": "YulIdentifier",
                                          "src": "8305:14:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8305:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8323:66:89",
                                        "type": "",
                                        "value": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8301:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8301:89:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "returndatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "8277:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8277:114:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8277:114:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8400:25:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "8420:4:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8414:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8414:11:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "8404:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8434:26:89",
                              "value": {
                                "arguments": [],
                                "functionName": {
                                  "name": "returndatasize",
                                  "nodeType": "YulIdentifier",
                                  "src": "8444:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8444:16:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8438:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8469:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8479:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "8473:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8555:9:89",
                                "statements": [
                                  {
                                    "nodeType": "YulLeave",
                                    "src": "8557:5:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "8515:6:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "8523:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "8512:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8512:14:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "8535:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "8543:4:89",
                                            "type": "",
                                            "value": "0x24"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "8531:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8531:17:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8550:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "8528:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8528:25:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "8509:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8509:45:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8506:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8573:28:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "8588:4:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "8594:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8584:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8584:17:89"
                              },
                              "variables": [
                                {
                                  "name": "msg",
                                  "nodeType": "YulTypedName",
                                  "src": "8577:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8610:24:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msg",
                                    "nodeType": "YulIdentifier",
                                    "src": "8630:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8624:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8624:10:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "8614:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8661:9:89",
                                "statements": [
                                  {
                                    "nodeType": "YulLeave",
                                    "src": "8663:5:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8649:6:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8657:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8646:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8646:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8643:2:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8743:9:89",
                                "statements": [
                                  {
                                    "nodeType": "YulLeave",
                                    "src": "8745:5:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "msg",
                                            "nodeType": "YulIdentifier",
                                            "src": "8693:3:89"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "8698:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "8689:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8689:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8707:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8685:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8685:27:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "data",
                                        "nodeType": "YulIdentifier",
                                        "src": "8718:4:89"
                                      },
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "returndatasize",
                                          "nodeType": "YulIdentifier",
                                          "src": "8724:14:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8724:16:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8714:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8714:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8682:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8682:60:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8679:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8768:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "msg",
                                            "nodeType": "YulIdentifier",
                                            "src": "8780:3:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "length",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "8793:6:89"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "8801:2:89",
                                                    "type": "",
                                                    "value": "31"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "8789:3:89"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "8789:15:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8806:66:89",
                                                "type": "",
                                                "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "8785:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8785:88:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "8776:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8776:98:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8876:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8772:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8772:109:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8761:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8761:121:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8761:121:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8891:10:89",
                              "value": {
                                "name": "msg",
                                "nodeType": "YulIdentifier",
                                "src": "8898:3:89"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "8891:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "try_decode_error_message",
                        "nodeType": "YulFunctionDefinition",
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "8063:3:89",
                            "type": ""
                          }
                        ],
                        "src": "8024:883:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8959:109:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9046:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9055:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9058:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9048:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9048:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9048:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "8982:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "8993:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9000:42:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "8989:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8989:54:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "8979:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8979:65:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "8972:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8972:73:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8969:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "8948:5:89",
                            "type": ""
                          }
                        ],
                        "src": "8912:156:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_array$_t_address_$dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(arrayPos, arrayPos) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(arrayPos, arrayPos) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, mul(length, 0x20)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := mload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := mload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value1, value1) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(value1, value1) }\n        let value1_1, value2_1 := abi_decode_t_array$_t_address_$dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        value3 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value4, value4) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value4, value4) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value4, value4) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(value4, value4) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(value4, value4) }\n        value3 := add(_2, 32)\n        value4 := length\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value4, value4) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value4, value4) }\n        let value0_1, value1_1 := abi_decode_t_array$_t_address_$dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(value4, value4) }\n        let value2_1, value3_1 := abi_decode_t_array$_t_address_$dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        value4 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_t_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_t_enum$_Status(value, pos)\n    {\n        if iszero(lt(value, 3)) { invalid() }\n        mstore(pos, value)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_array$_t_enum$_Status_$9061_$dyn_memory_ptr__to_t_array$_t_uint8_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := tail\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            abi_encode_t_enum$_Status(mload(srcPtr), pos)\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_enum$_Status_$9061__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        abi_encode_t_enum$_Status(value0, headStart)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_t_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_6ff165d3fe0272c13129fc9e1aecd998364a5fdcad04c6ae84a7d1dfc3d06a17__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"Unknown\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Unexpected error\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_t_bytes(value3, add(headStart, 128))\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function shift_right_224_unsigned(value) -> newValue\n    { newValue := shr(224, value) }\n    function try_decode_error_message() -> ret\n    {\n        if lt(returndatasize(), 0x44) { leave }\n        returndatacopy(ret, ret, 4)\n        if iszero(eq(shift_right_224_unsigned(mload(ret)), 0x08c379a0)) { leave }\n        let data := mload(64)\n        returndatacopy(data, 4, add(returndatasize(), 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc))\n        let offset := mload(data)\n        let _1 := returndatasize()\n        let _2 := 0xffffffffffffffff\n        if or(gt(offset, _2), gt(add(offset, 0x24), _1)) { leave }\n        let msg := add(data, offset)\n        let length := mload(msg)\n        if gt(length, _2) { leave }\n        if gt(add(add(msg, length), 0x20), add(data, returndatasize())) { leave }\n        mstore(64, add(add(msg, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20))\n        ret := msg\n    }\n    function validator_revert_t_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "7689": [
                  {
                    "length": 32,
                    "start": 366
                  }
                ],
                "7693": [
                  {
                    "length": 32,
                    "start": 402
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100675760003560e01c8063791b98bc11610050578063791b98bc146100aa578063be7672e5146100b2578063ee906f6b146100d257610067565b80630143aace1461006c5780634f04a0db14610095575b600080fd5b61007f61007a366004610b75565b6100e7565b60405161008c9190610dea565b60405180910390f35b61009d61016c565b60405161008c9190610d7e565b61009d610190565b6100c56100c0366004610c60565b6101b4565b60405161008c9190610d9f565b6100e56100e0366004610bcf565b610272565b005b6000805b8381101561015e5760006101208787878581811061010557fe5b905060200201602081019061011a9190610b3d565b866104d6565b9050600181600281111561013057fe5b14806101475750600281600281111561014557fe5b145b156101555791506101649050565b506001016100eb565b50600090505b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60608467ffffffffffffffff811180156101cd57600080fd5b506040519080825280602002602001820160405280156101f7578160200160208202803683370190505b50905060005b858110156102685761023187878381811061021457fe5b90506020020160208101906102299190610b3d565b8686866100e7565b82828151811061023d57fe5b6020026020010190600281111561025057fe5b9081600281111561025d57fe5b9052506001016101fd565b5095945050505050565b60003390506000808273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156102c057600080fd5b505afa1580156102d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f89190610b59565b8373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561033e57600080fd5b505afa158015610352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103769190610b59565b915091506000808811610389578161038b565b825b905060008061039c87890189610ce9565b915091506000828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103dc9190610d7e565b60206040518083038186803b1580156103f457600080fd5b505afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c9190610cd1565b0390508181146104a457604080518082018252600381527f464f540000000000000000000000000000000000000000000000000000000000602082015290517f08c379a000000000000000000000000000000000000000000000000000000000815261049b9190600401610dfe565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049b90610e11565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561051457506000610895565b600061059e3073ffffffffffffffffffffffffffffffffffffffff16634f04a0db6040518163ffffffff1660e01b815260040160206040518083038186803b15801561055f57600080fd5b505afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610b59565b868661089c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0dfe168100000000000000000000000000000000000000000000000000000000179052905191925060009173ffffffffffffffffffffffffffffffffffffffff84169161061d91610d62565b6000604051808303816000865af19150503d806000811461065a576040519150601f19603f3d011682016040523d82523d6000602084013e61065f565b606091505b5091505080516000141561067857600092505050610895565b60008180602001905181019061068e9190610b59565b90506000808273ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146106ce576000876106d2565b8660005b9150915060008973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107119190610d7e565b60206040518083038186803b15801561072957600080fd5b505afa15801561073d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107619190610cd1565b905060008690508073ffffffffffffffffffffffffffffffffffffffff1663022c0d9f858530868e60405160200161079a929190610e7f565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016107c89493929190610e8d565b600060405180830381600087803b1580156107e257600080fd5b505af19250505080156107f3575060015b610863576107ff610f08565b8061080a5750610859565b61081381610987565b1561082957600198505050505050505050610895565b610832816109ea565b1561084857600298505050505050505050610895565b600098505050505050505050610895565b3d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049b90610e48565b9392505050565b60008060006108ab8585610a56565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60408051808201909152600381527f464f5400000000000000000000000000000000000000000000000000000000006020918201528151908201207f0d441c7cb74abc94cc606c98870ca9174ef5b167b2f7ffed505658cf4574b003145b919050565b60408051808201909152600f8082527f5452414e534645525f4641494c45440000000000000000000000000000000000602083015282516000929180821015610a3957600093505050506109e5565b602092830181902091819003850190920191909120149050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a9257600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610acc578284610acf565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610af457600080fd5b9250929050565b60008083601f840112610b0c578182fd5b50813567ffffffffffffffff811115610b23578182fd5b6020830191508360208083028501011115610af457600080fd5b600060208284031215610b4e578081fd5b813561089581610fea565b600060208284031215610b6a578081fd5b815161089581610fea565b60008060008060608587031215610b8a578283fd5b8435610b9581610fea565b9350602085013567ffffffffffffffff811115610bb0578384fd5b610bbc87828801610afb565b9598909750949560400135949350505050565b600080600080600060808688031215610be6578081fd5b8535610bf181610fea565b94506020860135935060408601359250606086013567ffffffffffffffff80821115610c1b578283fd5b818801915088601f830112610c2e578283fd5b813581811115610c3c578384fd5b896020828501011115610c4d578384fd5b9699959850939650602001949392505050565b600080600080600060608688031215610c77578081fd5b853567ffffffffffffffff80821115610c8e578283fd5b610c9a89838a01610afb565b90975095506020880135915080821115610cb2578283fd5b50610cbf88828901610afb565b96999598509660400135949350505050565b600060208284031215610ce2578081fd5b5051919050565b60008060408385031215610cfb578182fd5b50508035926020909101359150565b60008151808452610d22816020860160208601610ed2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60038110610d5e57fe5b9052565b60008251610d74818460208701610ed2565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015610dde57610dce838551610d54565b9284019291840191600101610dbb565b50909695505050505050565b60208101610df88284610d54565b92915050565b6000602082526108956020830184610d0a565b60208082526007908201527f556e6b6e6f776e00000000000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f556e6578706563746564206572726f7200000000000000000000000000000000604082015260600190565b918252602082015260400190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152610ec86080830184610d0a565b9695505050505050565b60005b83811015610eed578181015183820152602001610ed5565b83811115610efc576000848401525b50505050565b60e01c90565b600060443d1015610f1857610fe7565b600481823e6308c379a0610f2c8251610f02565b14610f3657610fe7565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff8160248401118184111715610f845750505050610fe7565b82840192508251915080821115610f9e5750505050610fe7565b503d83016020828401011115610fb657505050610fe7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150505b90565b73ffffffffffffffffffffffffffffffffffffffff8116811461100c57600080fd5b5056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x791B98BC GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x791B98BC EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0xBE7672E5 EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0xEE906F6B EQ PUSH2 0xD2 JUMPI PUSH2 0x67 JUMP JUMPDEST DUP1 PUSH4 0x143AACE EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x4F04A0DB EQ PUSH2 0x95 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0xB75 JUMP JUMPDEST PUSH2 0xE7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0xDEA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x9D PUSH2 0x16C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0xD7E JUMP JUMPDEST PUSH2 0x9D PUSH2 0x190 JUMP JUMPDEST PUSH2 0xC5 PUSH2 0xC0 CALLDATASIZE PUSH1 0x4 PUSH2 0xC60 JUMP JUMPDEST PUSH2 0x1B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0xD9F JUMP JUMPDEST PUSH2 0xE5 PUSH2 0xE0 CALLDATASIZE PUSH1 0x4 PUSH2 0xBCF JUMP JUMPDEST PUSH2 0x272 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15E JUMPI PUSH1 0x0 PUSH2 0x120 DUP8 DUP8 DUP8 DUP6 DUP2 DUP2 LT PUSH2 0x105 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x11A SWAP2 SWAP1 PUSH2 0xB3D JUMP JUMPDEST DUP7 PUSH2 0x4D6 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x130 JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x147 JUMPI POP PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x145 JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0x155 JUMPI SWAP2 POP PUSH2 0x164 SWAP1 POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xEB JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x60 DUP5 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1F7 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x268 JUMPI PUSH2 0x231 DUP8 DUP8 DUP4 DUP2 DUP2 LT PUSH2 0x214 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x229 SWAP2 SWAP1 PUSH2 0xB3D JUMP JUMPDEST DUP7 DUP7 DUP7 PUSH2 0xE7 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x23D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x250 JUMPI INVALID JUMPDEST SWAP1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x25D JUMPI INVALID JUMPDEST SWAP1 MSTORE POP PUSH1 0x1 ADD PUSH2 0x1FD JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F8 SWAP2 SWAP1 PUSH2 0xB59 JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x352 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x376 SWAP2 SWAP1 PUSH2 0xB59 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 DUP9 GT PUSH2 0x389 JUMPI DUP2 PUSH2 0x38B JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x39C DUP8 DUP10 ADD DUP10 PUSH2 0xCE9 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3DC SWAP2 SWAP1 PUSH2 0xD7E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x408 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x42C SWAP2 SWAP1 PUSH2 0xCD1 JUMP JUMPDEST SUB SWAP1 POP DUP2 DUP2 EQ PUSH2 0x4A4 JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x3 DUP2 MSTORE PUSH32 0x464F540000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH2 0x49B SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0xDFE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x49B SWAP1 PUSH2 0xE11 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x514 JUMPI POP PUSH1 0x0 PUSH2 0x895 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x59E ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4F04A0DB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x55F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x573 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x597 SWAP2 SWAP1 PUSH2 0xB59 JUMP JUMPDEST DUP7 DUP7 PUSH2 0x89C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP2 MSTORE PUSH1 0x24 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDFE168100000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 PUSH2 0x61D SWAP2 PUSH2 0xD62 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x65A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x65F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP POP DUP1 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x678 JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x895 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x68E SWAP2 SWAP1 PUSH2 0xB59 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x6CE JUMPI PUSH1 0x0 DUP8 PUSH2 0x6D2 JUMP JUMPDEST DUP7 PUSH1 0x0 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x711 SWAP2 SWAP1 PUSH2 0xD7E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x729 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x73D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x761 SWAP2 SWAP1 PUSH2 0xCD1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x22C0D9F DUP6 DUP6 ADDRESS DUP7 DUP15 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x79A SWAP3 SWAP2 SWAP1 PUSH2 0xE7F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xE8D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x7F3 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x863 JUMPI PUSH2 0x7FF PUSH2 0xF08 JUMP JUMPDEST DUP1 PUSH2 0x80A JUMPI POP PUSH2 0x859 JUMP JUMPDEST PUSH2 0x813 DUP2 PUSH2 0x987 JUMP JUMPDEST ISZERO PUSH2 0x829 JUMPI PUSH1 0x1 SWAP9 POP POP POP POP POP POP POP POP POP PUSH2 0x895 JUMP JUMPDEST PUSH2 0x832 DUP2 PUSH2 0x9EA JUMP JUMPDEST ISZERO PUSH2 0x848 JUMPI PUSH1 0x2 SWAP9 POP POP POP POP POP POP POP POP POP PUSH2 0x895 JUMP JUMPDEST PUSH1 0x0 SWAP9 POP POP POP POP POP POP POP POP POP PUSH2 0x895 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x49B SWAP1 PUSH2 0xE48 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x8AB DUP6 DUP6 PUSH2 0xA56 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 DUP6 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP6 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP11 SWAP1 SWAP5 SHL SWAP1 SWAP4 AND PUSH1 0x69 DUP5 ADD MSTORE PUSH1 0x7D DUP4 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH32 0x400E13FC6C59224F20228F0C0561806856AC34B7318F337F8012707C880C351F PUSH1 0x9D DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP3 ADD SWAP1 SWAP8 MSTORE DUP1 MLOAD SWAP7 ADD SWAP6 SWAP1 SWAP6 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 MSTORE PUSH32 0x464F540000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH32 0xD441C7CB74ABC94CC606C98870CA9174EF5B167B2F7FFED505658CF4574B003 EQ JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xF DUP1 DUP3 MSTORE PUSH32 0x5452414E534645525F4641494C45440000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x0 SWAP3 SWAP2 DUP1 DUP3 LT ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x9E5 JUMP JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD DUP2 SWAP1 KECCAK256 SWAP2 DUP2 SWAP1 SUB DUP6 ADD SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 EQ SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xA92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0xACC JUMPI DUP3 DUP5 PUSH2 0xACF JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xAF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xB0C JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB23 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0xAF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB4E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x895 DUP2 PUSH2 0xFEA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB6A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x895 DUP2 PUSH2 0xFEA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB8A JUMPI DUP3 DUP4 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0xB95 DUP2 PUSH2 0xFEA JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBB0 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xBBC DUP8 DUP3 DUP9 ADD PUSH2 0xAFB JUMP JUMPDEST SWAP6 SWAP9 SWAP1 SWAP8 POP SWAP5 SWAP6 PUSH1 0x40 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xBE6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xBF1 DUP2 PUSH2 0xFEA JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xC1B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xC2E JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xC3C JUMPI DUP4 DUP5 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xC4D JUMPI DUP4 DUP5 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP PUSH1 0x20 ADD SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xC77 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xC8E JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xC9A DUP10 DUP4 DUP11 ADD PUSH2 0xAFB JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xCB2 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0xCBF DUP9 DUP3 DUP10 ADD PUSH2 0xAFB JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP7 PUSH1 0x40 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCE2 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCFB JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xD22 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xED2 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0xD5E JUMPI INVALID JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xD74 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xED2 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDDE JUMPI PUSH2 0xDCE DUP4 DUP6 MLOAD PUSH2 0xD54 JUMP JUMPDEST SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xDBB JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xDF8 DUP3 DUP5 PUSH2 0xD54 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x895 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xD0A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x7 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6B6E6F776E00000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6578706563746564206572726F7200000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0xEC8 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0xD0A JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xEED JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xED5 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xEFC JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0xE0 SHR SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x44 RETURNDATASIZE LT ISZERO PUSH2 0xF18 JUMPI PUSH2 0xFE7 JUMP JUMPDEST PUSH1 0x4 DUP2 DUP3 RETURNDATACOPY PUSH4 0x8C379A0 PUSH2 0xF2C DUP3 MLOAD PUSH2 0xF02 JUMP JUMPDEST EQ PUSH2 0xF36 JUMPI PUSH2 0xFE7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC RETURNDATASIZE ADD PUSH1 0x4 DUP3 RETURNDATACOPY DUP1 MLOAD RETURNDATASIZE PUSH8 0xFFFFFFFFFFFFFFFF DUP2 PUSH1 0x24 DUP5 ADD GT DUP2 DUP5 GT OR ISZERO PUSH2 0xF84 JUMPI POP POP POP POP PUSH2 0xFE7 JUMP JUMPDEST DUP3 DUP5 ADD SWAP3 POP DUP3 MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xF9E JUMPI POP POP POP POP PUSH2 0xFE7 JUMP JUMPDEST POP RETURNDATASIZE DUP4 ADD PUSH1 0x20 DUP3 DUP5 ADD ADD GT ISZERO PUSH2 0xFB6 JUMPI POP POP POP PUSH2 0xFE7 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP2 POP POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x100C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "1563:4807:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2293:440;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;288:48:56;;;:::i;:::-;;;;;;;:::i;378:49::-;;;:::i;1895:392:78:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5255:1113::-;;;;;;:::i;:::-;;:::i;:::-;;2293:440;2436:6;;2454:245;2474:21;;;2454:245;;;2516:13;2532:47;2542:5;2549:10;;2560:1;2549:13;;;;;;;;;;;;;;;;;;;;:::i;:::-;2564:14;2532:9;:47::i;:::-;2516:63;-1:-1:-1;2607:10:78;2597:6;:20;;;;;;;;;:44;;;-1:-1:-1;2631:10:78;2621:6;:20;;;;;;;;;2597:44;2593:96;;;2668:6;-1:-1:-1;2661:13:78;;-1:-1:-1;2661:13:78;2593:96;-1:-1:-1;2497:3:78;;2454:245;;;;2715:11;2708:18;;2293:440;;;;;;;:::o;288:48:56:-;;;:::o;378:49::-;;;:::o;1895:392:78:-;2055:28;2123:6;2110:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2110:27:78;;2095:42;;2152:9;2147:134;2167:17;;;2147:134;;;2223:47;2232:6;;2239:1;2232:9;;;;;;;;;;;;;;;;;;;;:::i;:::-;2243:10;;2255:14;2223:8;:47::i;:::-;2205:12;2218:1;2205:15;;;;;;;;;;;;;:65;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2186:3:78;;2147:134;;;;1895:392;;;;;;;:::o;5255:1113::-;5401:15;5430:10;5401:40;;5452:14;5468;5487:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5502:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5451:65;;;;5527:20;5567:1;5557:7;:11;:29;;5580:6;5557:29;;;5571:6;5557:29;5527:60;-1:-1:-1;5599:25:78;;5661:36;;;;5672:4;5661:36;:::i;:::-;5598:99;;;;5707:22;5773:17;5732:13;:23;;;5764:4;5732:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;5707:83;;5972:23;5954:14;:41;5950:97;;6018:17;;;;;;;;;;;;;;;;6011:25;;;;;;;6018:17;6011:25;;;:::i;:::-;;;;;;;;5950:97;6344:17;;;;;;;;;;:::i;2739:1545::-;2864:6;2895:9;2886:18;;:5;:18;;;2882:67;;;-1:-1:-1;2927:11:78;2920:18;;2882:67;2959:19;2981:68;3009:4;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3032:5;3039:9;2981:27;:68::i;:::-;3275:50;;;;;;;;;;;;;;;;;;3298:26;3275:50;;;3249:77;;2959:90;;-1:-1:-1;3222:23:78;;3249:25;;;;:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3219:107;;;3341:10;:17;3362:1;3341:22;3337:71;;;3386:11;3379:18;;;;;;3337:71;3418:21;3453:10;3442:33;;;;;;;;;;;;:::i;:::-;3418:57;;3526:18;3546;3589:13;3580:22;;:5;:22;;;:84;;3645:1;3649:14;3580:84;;;3606:14;3630:1;3580:84;3525:139;;;;3675:25;3710:5;3703:23;;;3735:4;3703:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3675:66;;3752:15;3781:11;3752:41;;3820:4;:9;;;3830:10;3842;3862:4;3880:17;3899:14;3869:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3820:95;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3804:383;;;;:::i;:::-;;;;;;;;3979:19;3991:6;3979:11;:19::i;:::-;3975:75;;;4025:10;4018:17;;;;;;;;;;;;3975:75;4068:24;4085:6;4068:16;:24::i;:::-;4064:80;;;4119:10;4112:17;;;;;;;;;;;;4064:80;4165:11;4158:18;;;;;;;;;;;;3804:383;;;;;;;;;4251:26;;;;;;;;;;:::i;2739:1545::-;;;;;;:::o;750:633:79:-;869:12;894:14;910;928:26;939:6;947;928:10;:26::i;:::-;1166:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:43;;;;;;1048:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1017:335;;;;;;;;;750:633;-1:-1:-1;;;;;750:633:79:o;4290:159:78:-;4423:17;;;;;;;;;;;;;;;;;;4379:24;;;;;;4407:35;4379:63;4290:159;;;;:::o;4455:794::-;4684:24;;;;;;;;;;;;;;;;;;4742:20;;4526:4;;4684:24;4826:27;;;4822:70;;;4876:5;4869:12;;;;;;;4822:70;4940:2;5090:12;;;5166:34;;;4940:32;;;;5041:19;;;;;5136:28;;;;5133:68;;-1:-1:-1;4455:794:78;;;:::o;391:270:79:-;466:14;482;526:6;516:16;;:6;:16;;;;508:25;;;;;;571:6;562:15;;:6;:15;;;:53;;600:6;608;562:53;;;581:6;589;562:53;543:72;;-1:-1:-1;543:72:79;-1:-1:-1;633:20:79;;;625:29;;;;;;391:270;;;;;:::o;14:404:89:-;;;147:3;140:4;132:6;128:17;124:27;114:2;;172:8;162;155:26;114:2;-1:-1:-1;202:20:89;;245:18;234:30;;231:2;;;284:8;274;267:26;231:2;328:4;320:6;316:17;304:29;;391:3;384:4;376;368:6;364:17;356:6;352:30;348:41;345:50;342:2;;;408:1;405;398:12;423:259;;535:2;523:9;514:7;510:23;506:32;503:2;;;556:6;548;541:22;503:2;600:9;587:23;619:33;646:5;619:33;:::i;687:263::-;;810:2;798:9;789:7;785:23;781:32;778:2;;;831:6;823;816:22;778:2;868:9;862:16;887:33;914:5;887:33;:::i;1231:668::-;;;;;1412:2;1400:9;1391:7;1387:23;1383:32;1380:2;;;1433:6;1425;1418:22;1380:2;1477:9;1464:23;1496:33;1523:5;1496:33;:::i;:::-;1548:5;-1:-1:-1;1604:2:89;1589:18;;1576:32;1631:18;1620:30;;1617:2;;;1668:6;1660;1653:22;1617:2;1712:76;1780:7;1771:6;1760:9;1756:22;1712:76;:::i;:::-;1370:529;;1807:8;;-1:-1:-1;1686:102:89;;1889:2;1874:18;1861:32;;1370:529;-1:-1:-1;;;;1370:529:89:o;1904:915::-;;;;;;2086:3;2074:9;2065:7;2061:23;2057:33;2054:2;;;2108:6;2100;2093:22;2054:2;2152:9;2139:23;2171:33;2198:5;2171:33;:::i;:::-;2223:5;-1:-1:-1;2275:2:89;2260:18;;2247:32;;-1:-1:-1;2326:2:89;2311:18;;2298:32;;-1:-1:-1;2381:2:89;2366:18;;2353:32;2404:18;2434:14;;;2431:2;;;2466:6;2458;2451:22;2431:2;2509:6;2498:9;2494:22;2484:32;;2554:7;2547:4;2543:2;2539:13;2535:27;2525:2;;2581:6;2573;2566:22;2525:2;2626;2613:16;2652:2;2644:6;2641:14;2638:2;;;2673:6;2665;2658:22;2638:2;2723:7;2718:2;2709:6;2705:2;2701:15;2697:24;2694:37;2691:2;;;2749:6;2741;2734:22;2691:2;2044:775;;;;-1:-1:-1;2044:775:89;;-1:-1:-1;2785:2:89;2777:11;;2807:6;2044:775;-1:-1:-1;;;2044:775:89:o;2824:883::-;;;;;;3040:2;3028:9;3019:7;3015:23;3011:32;3008:2;;;3061:6;3053;3046:22;3008:2;3106:9;3093:23;3135:18;3176:2;3168:6;3165:14;3162:2;;;3197:6;3189;3182:22;3162:2;3241:76;3309:7;3300:6;3289:9;3285:22;3241:76;:::i;:::-;3336:8;;-1:-1:-1;3215:102:89;-1:-1:-1;3424:2:89;3409:18;;3396:32;;-1:-1:-1;3440:16:89;;;3437:2;;;3474:6;3466;3459:22;3437:2;;3518:78;3588:7;3577:8;3566:9;3562:24;3518:78;:::i;:::-;2998:709;;;;-1:-1:-1;3615:8:89;3697:2;3682:18;3669:32;;2998:709;-1:-1:-1;;;;2998:709:89:o;3712:194::-;;3835:2;3823:9;3814:7;3810:23;3806:32;3803:2;;;3856:6;3848;3841:22;3803:2;-1:-1:-1;3884:16:89;;3793:113;-1:-1:-1;3793:113:89:o;3911:258::-;;;4040:2;4028:9;4019:7;4015:23;4011:32;4008:2;;;4061:6;4053;4046:22;4008:2;-1:-1:-1;;4089:23:89;;;4159:2;4144:18;;;4131:32;;-1:-1:-1;3998:171:89:o;4174:318::-;;4255:5;4249:12;4282:6;4277:3;4270:19;4298:63;4354:6;4347:4;4342:3;4338:14;4331:4;4324:5;4320:16;4298:63;:::i;:::-;4406:2;4394:15;4411:66;4390:88;4381:98;;;;4481:4;4377:109;;4225:267;-1:-1:-1;;4225:267:89:o;4497:131::-;4578:1;4571:5;4568:12;4558:2;;4584:9;4558:2;4604:18;;4548:80::o;4633:274::-;;4800:6;4794:13;4816:53;4862:6;4857:3;4850:4;4842:6;4838:17;4816:53;:::i;:::-;4885:16;;;;;4770:137;-1:-1:-1;;4770:137:89:o;4912:226::-;5088:42;5076:55;;;;5058:74;;5046:2;5031:18;;5013:125::o;5143:663::-;5323:2;5375:21;;;5445:13;;5348:18;;;5467:22;;;5143:663;;5323:2;5546:15;;;;5520:2;5505:18;;;5143:663;5592:188;5606:6;5603:1;5600:13;5592:188;;;5655:45;5696:3;5687:6;5681:13;5655:45;:::i;:::-;5755:15;;;;5720:12;;;;5628:1;5621:9;5592:188;;;-1:-1:-1;5797:3:89;;5303:503;-1:-1:-1;;;;;;5303:503:89:o;5811:205::-;5954:2;5939:18;;5966:44;5943:9;5992:6;5966:44;:::i;:::-;5921:95;;;;:::o;6021:221::-;;6170:2;6159:9;6152:21;6190:46;6232:2;6221:9;6217:18;6209:6;6190:46;:::i;6247:330::-;6449:2;6431:21;;;6488:1;6468:18;;;6461:29;6526:9;6521:2;6506:18;;6499:37;6568:2;6553:18;;6421:156::o;6582:340::-;6784:2;6766:21;;;6823:2;6803:18;;;6796:30;6862:18;6857:2;6842:18;;6835:46;6913:2;6898:18;;6756:166::o;6927:248::-;7101:25;;;7157:2;7142:18;;7135:34;7089:2;7074:18;;7056:119::o;7180:483::-;;7411:6;7400:9;7393:25;7454:6;7449:2;7438:9;7434:18;7427:34;7509:42;7501:6;7497:55;7492:2;7481:9;7477:18;7470:83;7589:3;7584:2;7573:9;7569:18;7562:31;7610:47;7652:3;7641:9;7637:19;7629:6;7610:47;:::i;:::-;7602:55;7383:280;-1:-1:-1;;;;;;7383:280:89:o;7668:258::-;7740:1;7750:113;7764:6;7761:1;7758:13;7750:113;;;7840:11;;;7834:18;7821:11;;;7814:39;7786:2;7779:10;7750:113;;;7881:6;7878:1;7875:13;7872:2;;;7916:1;7907:6;7902:3;7898:16;7891:27;7872:2;;7721:205;;;:::o;7931:88::-;8006:3;8002:15;;7988:31::o;8024:883::-;;8105:4;8087:16;8084:26;8081:2;;;8113:5;;8081:2;8154:1;8149:3;8144;8129:27;8216:10;8178:36;8209:3;8203:10;8178:36;:::i;:::-;8175:52;8165:2;;8231:5;;8165:2;8265;8259:9;8323:66;8305:16;8301:89;8298:1;8292:4;8277:114;8420:4;8414:11;8444:16;8479:18;8550:2;8543:4;8535:6;8531:17;8528:25;8523:2;8515:6;8512:14;8509:45;8506:2;;;8557:5;;;;;;8506:2;8594:6;8588:4;8584:17;8573:28;;8630:3;8624:10;8610:24;;8657:2;8649:6;8646:14;8643:2;;;8663:5;;;;;;8643:2;;8724:16;8718:4;8714:27;8707:4;8698:6;8693:3;8689:16;8685:27;8682:60;8679:2;;;8745:5;;;;;8679:2;8801;8789:15;8806:66;8785:88;8776:98;;8876:4;8772:109;8768:2;8761:121;8780:3;-1:-1:-1;;8071:836:89;;:::o;8912:156::-;9000:42;8993:5;8989:54;8982:5;8979:65;8969:2;;9058:1;9055;9048:12;8969:2;8959:109;:::o"
            },
            "methodIdentifiers": {
              "astraCall(address,uint256,uint256,bytes)": "ee906f6b",
              "batchValidate(address[],address[],uint256)": "be7672e5",
              "factoryClassic()": "4f04a0db",
              "positionManager()": "791b98bc",
              "validate(address,address[],uint256)": "0143aace"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factoryClassic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_positionManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"astraCall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"baseTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amountToBorrow\",\"type\":\"uint256\"}],\"name\":\"batchValidate\",\"outputs\":[{\"internalType\":\"enum ITokenValidator.Status[]\",\"name\":\"isFotResults\",\"type\":\"uint8[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factoryClassic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"positionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"baseTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amountToBorrow\",\"type\":\"uint256\"}],\"name\":\"validate\",\"outputs\":[{\"internalType\":\"enum ITokenValidator.Status\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"We can not guarantee the result of this lens is correct for a few reasons:1/ Some tokens take fees or allow transfers under specific conditions, for example some have an allowlistof addresses that do/dont require fees. Therefore the result is not guaranteed to be correctin all circumstances.2/ It is possible that the token does not have any pools on V2 therefore we are not able to performa flashloan to test the token.\",\"kind\":\"dev\",\"methods\":{\"batchValidate(address[],address[],uint256)\":{\"params\":{\"amountToBorrow\":\"The amount to try flash borrowing from the pools\",\"baseTokens\":\"The addresses of the tokens to try pairing with token when looking for a pool to flash loan from.\",\"tokens\":\"The addresses of the tokens to check for fee on transfer\"},\"returns\":{\"isFotResults\":\"The status of the token\"}},\"validate(address,address[],uint256)\":{\"params\":{\"amountToBorrow\":\"The amount to try flash borrowing from the pools\",\"baseTokens\":\"The addresses of the tokens to try pairing with token when looking for a pool to flash loan from.\",\"token\":\"The address of the token to check for fee on transfer\"},\"returns\":{\"_0\":\"The status of the token\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"batchValidate(address[],address[],uint256)\":{\"notice\":\"Validates each token by detecting if its transferable or takes a fee on transfer\"},\"validate(address,address[],uint256)\":{\"notice\":\"Validates a token by detecting if its transferable or takes a fee on transfer\"}},\"notice\":\"Validates tokens by flash borrowing from the token/<base token> pool on V2.Returns     Status.FOT if we detected a fee is taken on transfer.     Status.STF if transfer failed for the token.     Status.UNKN if we did not detect any issues with the token.A return value of Status.UNKN does not mean the token is definitely not a fee on transfer token     or definitely has no problems with its transfer. It just means we cant say for sure that it has any     issues.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lens/TokenValidator.sol\":\"TokenValidator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":{\"keccak256\":\"0xaa82f63f0c930e51d6aaae0d59e7bf3ef5b32371ac0549f6e07bfcab5b4dcb16\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73419af0b4f35f02c3b89d387d6ac46041637a7133e249de617103b7567bf4c4\",\"dweb:/ipfs/QmTfwEX1dCoUUUMaMFzDnqDcFXihHQnEG1fbkBFpidRs8o\"]},\"@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0x86715eb960f18e01ac94e3bba4614ed51a887fa3c5bd1c43bf80aa98e019cf2d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bfc1d5d58e59015086b0e65a6c3a2ddad312e2350480510f6c0c8167f3d71a37\",\"dweb:/ipfs/QmQndULYjFsHKHjMAKLMfc12vWbVB5FawtioHtvwcWRJZp\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol\":{\"keccak256\":\"0xa8f9d0061ee730a522dc4bae6bd5cabb3e997e2c5983da183e912bdca93dfa7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://496b68d4f72d58cc83cf51bd9cc9c99aaa46dc3c3df7c951a9e50ba29ee33016\",\"dweb:/ipfs/Qmc3bkXwuRP8mDpcKgvLgbCKn8tD8PGCaBjnLHSPMJCRGD\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol\":{\"keccak256\":\"0x402d04301ffd41853f4949a574b8853c46d076910ed734f5e4478bf64369a3ed\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6a5536d179ff3777920ff8ed60cfc457f7a4dda1373c8f0394b2a8e0fe537525\",\"dweb:/ipfs/QmdaYGikTmmi2vbECnoomZ8vS8PBiD4Bq8BoFCYqFZmKgR\"]},\"@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol\":{\"keccak256\":\"0xf5d820076bb4d5760e8e8370c9527a2b2f41e890abbfd3f33dd84081bc75eaf4\",\"urls\":[\"bzz-raw://802e26558411dccbe8f716957fa42d240edb1b7750fab48c844179c2a5e42ff0\",\"dweb:/ipfs/QmacHZo2nvJWxD9tbfmNTf3keLAMH9QB5TXrSwhEFQiGpG\"]},\"@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol\":{\"keccak256\":\"0xd2259aac0746706697d6e8097a48b592308fb1e1e78077cc3e0540234dee6648\",\"urls\":[\"bzz-raw://525ef590cf7e5c54030527703a7409b74c70497715aebf8dae0b877ee136dac7\",\"dweb:/ipfs/QmVgR4Pk3i8X8oS8xxNnVsFkDXXGP2wu4YvhG23e3z5K9q\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"contracts/base/ImmutableState.sol\":{\"keccak256\":\"0xa52c8265326bed23bab067cfaf4a260d12a1b653618920534bb3e6d65c51e047\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1579ffa9db15cb07f0dfc0947feaee663c992455ba719373ac358254aad879ca\",\"dweb:/ipfs/QmSyStKaiERPMswqVFsn37CAGanBoTYNA6FUVWyZr9xDtK\"]},\"contracts/interfaces/IApproveAndCall.sol\":{\"keccak256\":\"0x7d3824ad9a4090e2f4bb98d844f6ceb720f8c2608a909e4c0d86584be32d7fce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8230cdc6fd9171081943821d71888cec07bf4bae0b5fb85fa7c450f3c2b1ad44\",\"dweb:/ipfs/QmXF9NtVtCjr92ngVwwDjSGpiktGz2BDPHsvVoFPgkSP4K\"]},\"contracts/interfaces/ICLSwapRouter.sol\":{\"keccak256\":\"0xf21791d14cb0fa67db54f04c322e294616240fef896fec0214be7aa196b767ad\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f3d1acf197037424a8e4901b64b4a35381d88ae361c09c5f3660ae59c5cac190\",\"dweb:/ipfs/QmaAHSbWfriiUsiiArgSiuJqw6s9BeP6Mfy3rZsoTzQoiL\"]},\"contracts/interfaces/IClassicSwapRouter.sol\":{\"keccak256\":\"0x5b35aa4bb97961db53c1f178c034c40a9ae4ce2606356b06620b918a5f91ae5a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8e63d5f61b1b28deddeddc89da42e85429966732a661bd53738ca6fb1a478d15\",\"dweb:/ipfs/QmVX5sjGijDfGFNP767L4rtsiL5DC84yJSfUpWiwJN84CP\"]},\"contracts/interfaces/IImmutableState.sol\":{\"keccak256\":\"0x25fee5bdbdbbb57ffb91c3ab66b9c2db351e7f6061ad2f98ef2991f6b27a15e0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7bf237158fbcfabf64bb0da5c7ff0b0161ed76c45c7197ecc5ac54b338786bfc\",\"dweb:/ipfs/QmT74A24bW9qu1dJUxPQLaqLBnSe57PVgfUJxpu3sEf9fg\"]},\"contracts/interfaces/IMulticallExtended.sol\":{\"keccak256\":\"0x0fee6c8fe77db406ea3a2c34767322d4170108596d877fcf9601315de8df502a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://32eb6261abd448977034e5ed22c7e1757f4fd1d667362bb1ad7a972169ce78b8\",\"dweb:/ipfs/QmazeBaXFvy3dTPsoaeuaEsxHEruikeSAXcXkFzyTUvmvQ\"]},\"contracts/interfaces/ISwapRouter02.sol\":{\"keccak256\":\"0x366b171042947689893be1ef6934e86a9a5739df07fad70ce3c53bd379435b82\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c707e5b60692f3214f02e1a30dce6215af9c5fcd8e9003f844a43f9ed348900b\",\"dweb:/ipfs/QmZZbwcZymjh34YXP1fEsQcFCZyGWGW8UAGdrkLM31EYFh\"]},\"contracts/interfaces/ITokenValidator.sol\":{\"keccak256\":\"0xf58c6fd42f5a94295958d70842578e2f23fc888a0fea00b028c5f16cfe8be753\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://092899260ed33495bc76d13b8b10c521fa90c426db681e49388c80cb8710e197\",\"dweb:/ipfs/QmQbXJovdUmLqmuUsBziYjWv28tnxo9P6kryCMCF2YqeBW\"]},\"contracts/lens/TokenValidator.sol\":{\"keccak256\":\"0xcb24c3d9d63b8b39344172150353983f06c487e094f5ebcf89b4671d1a5dc018\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0710c13669cc133297aac72b2b4d2166b2dbbad2a913bbb255d899a2df3bc6df\",\"dweb:/ipfs/QmRABnLiBmYqbs72rcE22hCBjAKAFE1nsv1S4AoNX5jeZF\"]},\"contracts/libraries/AstraClassicLibrary.sol\":{\"keccak256\":\"0xa0206fe7bc64db0582ab194bf47755b617a204e7e7768593968f9c6e7e7e5d87\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://be4c4afea9bef22f244b7ed926651026515c385410fb469876eff92a21548036\",\"dweb:/ipfs/QmeqP6cPs2igCKpQsA7D8sUiniJtTGXRx5K3rc3XAbVWL3\"]}},\"version\":1}"
        }
      },
      "contracts/libraries/AstraClassicLibrary.sol": {
        "AstraClassicLibrary": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "218:3453:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "218:3453:79:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/AstraClassicLibrary.sol\":\"AstraClassicLibrary\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0x86715eb960f18e01ac94e3bba4614ed51a887fa3c5bd1c43bf80aa98e019cf2d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bfc1d5d58e59015086b0e65a6c3a2ddad312e2350480510f6c0c8167f3d71a37\",\"dweb:/ipfs/QmQndULYjFsHKHjMAKLMfc12vWbVB5FawtioHtvwcWRJZp\"]},\"@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol\":{\"keccak256\":\"0xd2259aac0746706697d6e8097a48b592308fb1e1e78077cc3e0540234dee6648\",\"urls\":[\"bzz-raw://525ef590cf7e5c54030527703a7409b74c70497715aebf8dae0b877ee136dac7\",\"dweb:/ipfs/QmVgR4Pk3i8X8oS8xxNnVsFkDXXGP2wu4YvhG23e3z5K9q\"]},\"contracts/libraries/AstraClassicLibrary.sol\":{\"keccak256\":\"0xa0206fe7bc64db0582ab194bf47755b617a204e7e7768593968f9c6e7e7e5d87\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://be4c4afea9bef22f244b7ed926651026515c385410fb469876eff92a21548036\",\"dweb:/ipfs/QmeqP6cPs2igCKpQsA7D8sUiniJtTGXRx5K3rc3XAbVWL3\"]}},\"version\":1}"
        }
      },
      "contracts/libraries/Constants.sol": {
        "Constants": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "147:464:80:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "147:464:80:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ADDRESS_THIS\":{\"details\":\"Used as a flag for identifying address(this), saves gas by sending more 0 bytes\"},\"CONTRACT_BALANCE\":{\"details\":\"Used for identifying cases when this contract's balance of a token is to be used\"},\"MSG_SENDER\":{\"details\":\"Used as a flag for identifying msg.sender, saves gas by sending more 0 bytes\"}},\"title\":\"Constant state\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Constant state used by the swap router\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/Constants.sol\":\"Constants\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/libraries/Constants.sol\":{\"keccak256\":\"0x6eeb0392bef0afeb03e18f0e2824a96e76e55282176ea8b64e14a0fba91c9bf2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7ed2216986be881a9924e6efb5f3848367d0fad8cc60c4eb1772791773fedc45\",\"dweb:/ipfs/QmemwuJYDGRheUQxtzxH6mV18xTBFYtVJK26DNtbSSaC9k\"]}},\"version\":1}"
        }
      },
      "contracts/libraries/PoolTicksCounter.sol": {
        "PoolTicksCounter": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "142:4006:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "142:4006:81:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/PoolTicksCounter.sol\":\"PoolTicksCounter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"contracts/libraries/PoolTicksCounter.sol\":{\"keccak256\":\"0x64582f3e6588d786a37e03b48f61725720652a2284308e0dffd5f28c9a3bdd15\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1ad4197021a4fcdee55402bab2a7a934ead5ea04a24262b1dcc8a08f44735eff\",\"dweb:/ipfs/QmfGC9JcqbY3C1cxBFhgLH7hJsqmCLjHwqPPYWn1S3PF1E\"]}},\"version\":1}"
        }
      },
      "contracts/test/ImmutableStateTest.sol": {
        "ImmutableStateTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_factoryClassic",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_positionManager",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "factoryClassic",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "positionManager",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "60c060405234801561001057600080fd5b5060405161013b38038061013b8339818101604052604081101561003357600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c60c161007a600039806092525080606e525060c16000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80634f04a0db146037578063791b98bc146066575b600080fd5b603d606c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b603d6090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000008156fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x13B CODESIZE SUB DUP1 PUSH2 0x13B DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 SHL AND PUSH1 0xA0 MSTORE PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC1 PUSH2 0x7A PUSH1 0x0 CODECOPY DUP1 PUSH1 0x92 MSTORE POP DUP1 PUSH1 0x6E MSTORE POP PUSH1 0xC1 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x32 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4F04A0DB EQ PUSH1 0x37 JUMPI DUP1 PUSH4 0x791B98BC EQ PUSH1 0x66 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3D PUSH1 0x6C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x3D PUSH1 0x90 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "108:169:82:-:0;;;160:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;160:115:82;;;;;;;-1:-1:-1;;;;;;507:32:56;;;;;;;;549:34;;;;;108:169:82;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {
                "7689": [
                  {
                    "length": 32,
                    "start": 110
                  }
                ],
                "7693": [
                  {
                    "length": 32,
                    "start": 146
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052348015600f57600080fd5b506004361060325760003560e01c80634f04a0db146037578063791b98bc146066575b600080fd5b603d606c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b603d6090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000008156fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x32 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4F04A0DB EQ PUSH1 0x37 JUMPI DUP1 PUSH4 0x791B98BC EQ PUSH1 0x66 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3D PUSH1 0x6C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x3D PUSH1 0x90 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "108:169:82:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;288:48:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;378:49;;;:::i;288:48::-;;;:::o;378:49::-;;;:::o"
            },
            "methodIdentifiers": {
              "factoryClassic()": "4f04a0db",
              "positionManager()": "791b98bc"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factoryClassic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_positionManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"factoryClassic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"positionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/ImmutableStateTest.sol\":\"ImmutableStateTest\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/base/ImmutableState.sol\":{\"keccak256\":\"0xa52c8265326bed23bab067cfaf4a260d12a1b653618920534bb3e6d65c51e047\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1579ffa9db15cb07f0dfc0947feaee663c992455ba719373ac358254aad879ca\",\"dweb:/ipfs/QmSyStKaiERPMswqVFsn37CAGanBoTYNA6FUVWyZr9xDtK\"]},\"contracts/interfaces/IImmutableState.sol\":{\"keccak256\":\"0x25fee5bdbdbbb57ffb91c3ab66b9c2db351e7f6061ad2f98ef2991f6b27a15e0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7bf237158fbcfabf64bb0da5c7ff0b0161ed76c45c7197ecc5ac54b338786bfc\",\"dweb:/ipfs/QmT74A24bW9qu1dJUxPQLaqLBnSe57PVgfUJxpu3sEf9fg\"]},\"contracts/test/ImmutableStateTest.sol\":{\"keccak256\":\"0x0401142f9aeed368db8462ed19d948fd22f909b40488e9f927bbdca915e26895\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://678b468aebe14ed5b98ca707bba6cef742469b528fbc34553bd8f51e9c5d77ab\",\"dweb:/ipfs/QmSRZBFbUJgNrj9aSAhaUpexh3xJJt5qhQEMJfv1nyi2hx\"]}},\"version\":1}"
        }
      },
      "contracts/test/MockTimeSwapRouter.sol": {
        "MockTimeSwapRouter02": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_factoryClassic",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "factoryCL",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_positionManager",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_SAMB",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveMax",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveMaxMinusOne",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveZeroThenMax",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "approveZeroThenMaxMinusOne",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "amount0Delta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1Delta",
                  "type": "int256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "type": "bytes"
                }
              ],
              "name": "astraCLSwapCallback",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "callPositionManager",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "paths",
                  "type": "bytes[]"
                },
                {
                  "internalType": "uint128[]",
                  "name": "amounts",
                  "type": "uint128[]"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes",
                      "name": "path",
                      "type": "bytes"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOutMinimum",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactInputParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactInput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountIn",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOutMinimum",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactInputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactInputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "bytes",
                      "name": "path",
                      "type": "bytes"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOut",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountInMaximum",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactOutputParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactOutput",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenIn",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountOut",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amountInMaximum",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint160",
                      "name": "sqrtPriceLimitX96",
                      "type": "uint160"
                    }
                  ],
                  "internalType": "struct ICLSwapRouter.ExactOutputSingleParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "exactOutputSingle",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factoryClassic",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "getApprovalType",
              "outputs": [
                {
                  "internalType": "enum IApproveAndCall.ApprovalType",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token0",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "token1",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IApproveAndCall.IncreaseLiquidityParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "increaseLiquidity",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token0",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "token1",
                      "type": "address"
                    },
                    {
                      "internalType": "uint24",
                      "name": "fee",
                      "type": "uint24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickLower",
                      "type": "int24"
                    },
                    {
                      "internalType": "int24",
                      "name": "tickUpper",
                      "type": "int24"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount0Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount1Min",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct IApproveAndCall.MintParams",
                  "name": "params",
                  "type": "tuple"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "bytes",
                  "name": "result",
                  "type": "bytes"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "previousBlockhash",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "positionManager",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "pull",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "refundAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermit",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitAllowed",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "expiry",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitAllowedIfNecessary",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "selfPermitIfNecessary",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_time",
                  "type": "uint256"
                }
              ],
              "name": "setTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountOutMin",
                  "type": "uint256"
                },
                {
                  "internalType": "address[]",
                  "name": "path",
                  "type": "address[]"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "swapExactTokensForTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amountInMax",
                  "type": "uint256"
                },
                {
                  "internalType": "address[]",
                  "name": "path",
                  "type": "address[]"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "swapTokensForExactTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "sweepToken",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "sweepTokenWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                }
              ],
              "name": "unwrapSAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountMinimum",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeBips",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "feeRecipient",
                  "type": "address"
                }
              ],
              "name": "unwrapSAMBWithFee",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "wrapAMB",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:682:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "76:117:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "86:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "101:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "95:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "95:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "86:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "171:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "180:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "183:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "173:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "173:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "173:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "130:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "141:5:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "156:3:89",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "161:1:89",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "152:3:89"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "152:11:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "165:1:89",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "148:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "148:19:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "137:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "137:31:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "127:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "127:42:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "120:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "120:50:89"
                              },
                              "nodeType": "YulIf",
                              "src": "117:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "55:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "66:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:179:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "330:350:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "377:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "386:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "394:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "379:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "379:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "379:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "351:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "360:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "347:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "347:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "372:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "340:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "412:52:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "454:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "422:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "422:42:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "412:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "473:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "519:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "530:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "515:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "515:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "473:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "543:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "589:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "600:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "585:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "585:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "553:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "553:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "543:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "613:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "659:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "670:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "655:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "655:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "623:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "623:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "613:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "272:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "283:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "295:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "303:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "311:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "319:6:89",
                            "type": ""
                          }
                        ],
                        "src": "198:482:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value0, value0) }\n        value0 := abi_decode_t_address_fromMemory(headStart)\n        value1 := abi_decode_t_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_t_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_t_address_fromMemory(add(headStart, 96))\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "6101006040526000196000553480156200001857600080fd5b5060405162006171380380620061718339810160408190526200003b9162000087565b6001600160601b0319606094851b811660805291841b821660a05291831b811660c052911b1660e052620000e3565b80516001600160a01b03811681146200008257600080fd5b919050565b600080600080608085870312156200009d578384fd5b620000a8856200006a565b9350620000b8602086016200006a565b9250620000c8604086016200006a565b9150620000d8606086016200006a565b905092959194509250565b60805160601c60a05160601c60c05160601c60e05160601c615fed62000184600039806102dc528061158d52806115cd52806116f752806118a052806119ca52806123a852806129f95280612a595280612ada52508061099c5280611f485280613d175250806115695280611c0a5280611f9e5280613216525080610d5c5280610e3052806110d052806113995280612f3252806130f55250615fed6000f3fe6080604052600436106102bf5760003560e01c8063ab3fdd501161016e578063dee00f35116100cb578063efdeed8e1161007f578063f25801a711610064578063f25801a7146106a9578063f2d5d56b146106c9578063f3995c67146106dc5761036a565b8063efdeed8e14610676578063f100b205146106965761036a565b8063e0e189a0116100b0578063e0e189a01461063d578063e4a4054514610650578063e90a182f146106635761036a565b8063dee00f35146105fd578063df2ab5bb1461062a5761036a565b8063bc122a5411610122578063c45a015511610107578063c45a0155146105cd578063c53af304146105e2578063cab372ce146105ea5761036a565b8063bc122a54146105a7578063c2e3140a146105ba5761036a565b8063acf8a4ed11610153578063acf8a4ed1461056e578063b3a2af1314610581578063b858183f146105945761036a565b8063ab3fdd5014610548578063ac9650d81461055b5761036a565b80634f04a0db1161021c578063791b98bc116101d057806397e87d9d116101b557806397e87d9d1461050f578063a4a78f0c14610522578063a98ce37f146105355761036a565b8063791b98bc146104e557806390793ea8146104fa5761036a565b8063571ac8b011610201578063571ac8b0146104ac5780635ae401dc146104bf578063639d71a9146104d25761036a565b80634f04a0db146104775780635023b4df146104995761036a565b80633068c5541161027357806342712a671161025857806342712a671461043e5780634659a49414610451578063472b43f3146104645761036a565b80633068c5541461040b5780633beb26c41461041e5761036a565b806311c17848116102a457806311c17848146103ab57806311ed56c9146103cb5780631f0464d1146103eb5761036a565b806304e45aaf1461036f57806309b81346146103985761036a565b3661036a573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461036857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b61038261037d36600461557f565b6106ef565b60405161038f9190615e39565b60405180910390f35b6103826103a636600461561a565b610877565b3480156103b757600080fd5b506103686103c63660046153f4565b610957565b6103de6103d9366004615674565b610aa7565b60405161038f9190615bb6565b6103fe6103f93660046152e3565b610cb3565b60405161038f9190615b38565b610368610419366004615114565b610d3d565b34801561042a57600080fd5b506103686104393660046157f7565b610d50565b61038261044c3660046158c1565b610d55565b61036861045f36600461515d565b610f2f565b6103826104723660046158c1565b610fe3565b34801561048357600080fd5b5061048c611397565b60405161038f9190615a78565b6103826104a7366004615652565b6113bb565b6103686104ba366004615027565b6114a4565b6103fe6104cd3660046152e3565b6114da565b6103686104e0366004615027565b611553565b3480156104f157600080fd5b5061048c611567565b34801561050657600080fd5b5061048c61158b565b61036861051d366004615856565b6115af565b61036861053036600461515d565b6117c7565b610368610543366004615827565b61189c565b610368610556366004615027565b611a62565b6103fe6105693660046151b8565b611aa0565b61036861057c3660046157f7565b611bfa565b6103de61058f36600461532d565b611c04565b6103826105a23660046154d9565b611cc2565b6103686105b5366004615894565b611e85565b6103686105c836600461515d565b611e91565b3480156105d957600080fd5b5061048c611f46565b610368611f6a565b6103686105f8366004615027565b611a76565b34801561060957600080fd5b5061061d61061836600461504a565b611f7c565b60405161038f9190615bc9565b610368610638366004615075565b612129565b61036861064b3660046150b6565b612240565b61036861065e3660046157f7565b6123a6565b61036861067136600461504a565b612422565b34801561068257600080fd5b506103686106913660046151f8565b612431565b6103de6106a4366004615663565b612483565b3480156106b557600080fd5b506103686106c4366004615360565b612523565b6103686106d736600461504a565b612574565b6103686106ea36600461515d565b612580565b6000806000836080015114156107ac575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610756903090600401615a78565b60206040518083038186803b15801561076e57600080fd5b505afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a6919061580f565b60808401525b610828836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107ea939291906159e6565b604051602081830303815290604052815260200186610809573361080b565b305b73ffffffffffffffffffffffffffffffffffffffff169052612618565b91508260a00151821015610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b60405180910390fd5b50919050565b60006108eb604083018035906108909060208601615027565b60408051808201909152600090806108a88880615e7d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250336020909101526127c9565b5050600054606082013581111561092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008413806109665750600083135b61096f57600080fd5b600061097d82840184615686565b9050600080600061099184600001516129b0565b9250925092506109c37f00000000000000000000000000000000000000000000000000000000000000008484846129e1565b5060008060008a13610a04578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089610a35565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115610a5457610a4f85876020015133846129f7565b610a9b565b8551610a5f90612bd5565b15610a84578551610a6f90612bdd565b8652610a7e81336000896127c9565b50610a9b565b80600081905550610a9b84876020015133846129f7565b50505050505050505050565b604080516101608101909152606090610cab907f88316456000000000000000000000000000000000000000000000000000000009080610aea6020870187615027565b73ffffffffffffffffffffffffffffffffffffffff168152602001856020016020810190610b189190615027565b73ffffffffffffffffffffffffffffffffffffffff168152602001610b4360608701604088016157dd565b62ffffff168152602001610b5d60808701606088016153b5565b60020b8152602001610b7560a08701608088016153b5565b60020b8152602090810190610b9590610b9090880188615027565b612c12565b8152602001610bb0866020016020810190610b909190615027565b815260a0860135602082015260c08601356040820152606001610bda610100870160e08801615027565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610c299190615d34565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611c04565b90505b919050565b60608380600143034014610d2857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610d328484611aa0565b91505b509392505050565b610d4a8484338585612240565b50505050565b600155565b6000610db57f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cb792505050565b600081518110610dc157fe5b6020026020010151905084811115610e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b610e9e84846000818110610e1557fe5b9050602002016020810190610e2a9190615027565b33610e987f000000000000000000000000000000000000000000000000000000000000000088886000818110610e5c57fe5b9050602002016020810190610e719190615027565b89896001818110610e7e57fe5b9050602002016020810190610e939190615027565b612df0565b846129f7565b73ffffffffffffffffffffffffffffffffffffffff821660011415610ec557339150610ee8565b73ffffffffffffffffffffffffffffffffffffffff821660021415610ee8573091505b610f26848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612edb915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610fcf57600080fd5b505af1158015610a9b573d6000803e3d6000fd5b60008086611099575060018484600081610ff957fe5b905060200201602081019061100e9190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110469190615a78565b60206040518083038186803b15801561105e57600080fd5b505afa158015611072573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611096919061580f565b96505b611124858560008181106110a957fe5b90506020020160208101906110be9190615027565b826110c957336110cb565b305b61111e7f0000000000000000000000000000000000000000000000000000000000000000898960008181106110fc57fe5b90506020020160208101906111119190615027565b8a8a6001818110610e7e57fe5b8a6129f7565b73ffffffffffffffffffffffffffffffffffffffff83166001141561114b5733925061116e565b73ffffffffffffffffffffffffffffffffffffffff83166002141561116e573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061119e57fe5b90506020020160208101906111b39190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111eb9190615a78565b60206040518083038186803b15801561120357600080fd5b505afa158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b919061580f565b905061127b868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612edb915050565b6113508187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106112ad57fe5b90506020020160208101906112c29190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016112fa9190615a78565b60206040518083038186803b15801561131257600080fd5b505afa158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a919061580f565b906131e0565b92508683101561138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b505095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611464608083018035906113d49060608601615027565b6113e460e0860160c08701615027565b60405180604001604052808760200160208101906114029190615027565b61141260608a0160408b016157dd565b61141f60208b018b615027565b604051602001611431939291906159e6565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff168152506127c9565b90508160a0013581111561092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b6114ce817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b6114d757600080fd5b50565b606083806114e661333c565b1115610d2857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61155e8160006131f0565b6114a457600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000821180156115c0575060648211155b6115c957600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561165257600080fd5b505afa158015611666573d6000803e3d6000fd5b505050506040513d602081101561167c57600080fd5b50519050848110156116ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b80156117c0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561176857600080fd5b505af115801561177c573d6000803e3d6000fd5b505050506000612710611798858461334290919063ffffffff16565b8161179f57fe5b04905080156117b2576117b28382613366565b6117be85828403613366565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d602081101561188657600080fd5b505110156117be576117be868686868686610f2f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561192557600080fd5b505afa158015611939573d6000803e3d6000fd5b505050506040513d602081101561194f57600080fd5b50519050828110156119c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611a5d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611a3b57600080fd5b505af1158015611a4f573d6000803e3d6000fd5b50505050611a5d8282613366565b505050565b611a6d8160006131f0565b611a7657600080fd5b6114ce817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b60608167ffffffffffffffff81118015611ab957600080fd5b50604051908082528060200260200182016040528015611aed57816020015b6060815260200190600190039081611ad85790505b50905060005b82811015611bf35760008030868685818110611b0b57fe5b9050602002810190611b1d9190615e7d565b604051611b2b929190615a4c565b600060405180830381855af49150503d8060008114611b66576040519150601f19603f3d011682016040523d82523d6000602084013e611b6b565b606091505b509150915081611bd157604481511015611b8457600080fd5b60048101905080806020019051810190611b9e919061546f565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108689190615bb6565b80848481518110611bde57fe5b60209081029190910101525050600101611af3565b5092915050565b6114d7813361189c565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611c4d9190615a5c565b6000604051808303816000865af19150503d8060008114611c8a576040519150601f19603f3d011682016040523d82523d6000602084013e611c8f565b606091505b50925090508061087157604482511015611ca857600080fd5b60048201915081806020019051810190611b9e919061546f565b600080600083604001511415611d9357600190506000611ce584600001516129b0565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611d3c903090600401615a78565b60206040518083038186803b158015611d5457600080fd5b505afa158015611d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8c919061580f565b6040850152505b600081611da05733611da2565b305b90505b6000611db48560000151612bd5565b9050611e0d856040015182611dcd578660200151611dcf565b305b60006040518060400160405280611de98b600001516134b4565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250612618565b60408601528015611e2d578451309250611e2690612bdd565b8552611e3a565b8460400151935050611e40565b50611da5565b8360600151831015611e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b5050919050565b611a5d833384846115af565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611f0657600080fd5b505afa158015611f1a573d6000803e3d6000fd5b505050506040513d6020811015611f3057600080fd5b505110156117be576117be868686868686612580565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715611f7a57611f7a3347613366565b565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611fda929190615a99565b60206040518083038186803b158015611ff257600080fd5b505afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a919061580f565b1061203757506000612123565b612061837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b1561206e57506001612123565b612098837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b156120a557506002612123565b6120b08360006131f0565b6120b957600080fd5b6120e3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b156120f057506003612123565b61211a837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b1561036a575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561219257600080fd5b505afa1580156121a6573d6000803e3d6000fd5b505050506040513d60208110156121bc57600080fd5b505190508281101561222f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610d4a57610d4a8483836134c3565b600082118015612251575060648211155b61225a57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122c357600080fd5b505afa1580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b505190508481101561236057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156117be5760006127106123758386613342565b8161237c57fe5b0490508015612390576123908784836134c3565b61239d87868385036134c3565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561240e57600080fd5b505af11580156117be573d6000803e3d6000fd5b61242d828233612129565b5050565b60008061243f868685613698565b915091508362ffffff16818303126117be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c82565b6060610cab63219f5d1760e01b6040518060c00160405280856040013581526020016124bb866000016020810190610b909190615027565b81526020016124d6866020016020810190610b909190615027565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610c299190615cf0565b60008061253085846138ab565b915091508362ffffff16818303126117c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c82565b61242d82333084613b33565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610fcf57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff84166001141561264157339350612664565b73ffffffffffffffffffffffffffffffffffffffff841660021415612664573093505b600080600061267685600001516129b0565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806126a7868686613d10565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856126cd8f613d4e565b73ffffffffffffffffffffffffffffffffffffffff8e16156126ef578d612715565b8761270e5773fffd8963efd1fc6a506488495d951d5263988d25612715565b6401000276a45b8d6040516020016127269190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612755959493929190615ac0565b6040805180830381600087803b15801561276e57600080fd5b505af1158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a691906153d1565b91509150826127b557816127b7565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127f257339350612815565b73ffffffffffffffffffffffffffffffffffffffff841660021415612815573093505b600080600061282785600001516129b0565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80841690831610600080612858858786613d10565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561287e8f613d4e565b60000373ffffffffffffffffffffffffffffffffffffffff8e16156128a3578d6128c9565b876128c25773fffd8963efd1fc6a506488495d951d5263988d256128c9565b6401000276a45b8d6040516020016128da9190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612909959493929190615ac0565b6040805180830381600087803b15801561292257600080fd5b505af1158015612936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295a91906153d1565b9150915060008361296f578183600003612975565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a166129a1578b81146129a157600080fd5b50505050505050949350505050565b600080806129be8482613d80565b92506129cb846014613e80565b90506129d8846017613d80565b91509193909250565b6000610f26856129f2868686613f70565b613fed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a525750804710155b15612b9b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612abf57600080fd5b505af1158015612ad3573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b6957600080fd5b505af1158015612b7d573d6000803e3d6000fd5b505050506040513d6020811015612b9357600080fd5b50610d4a9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612bc957612bc48483836134c3565b610d4a565b610d4a84848484613b33565b516042111590565b8051606090610cab9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161401d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190612c67903090600401615a78565b60206040518083038186803b158015612c7f57600080fd5b505afa158015612c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cab919061580f565b6060600282511015612cc857600080fd5b815167ffffffffffffffff81118015612ce057600080fd5b50604051908082528060200260200182016040528015612d0a578160200160208202803683370190505b5090508281600183510381518110612d1e57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610d3557600080612d8b87866001860381518110612d6a57fe5b6020026020010151878681518110612d7e57fe5b6020026020010151614204565b91509150612dad848481518110612d9e57fe5b602002602001015183836142ec565b846001850381518110612dbc57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612d4e565b6000806000612dff85856143c2565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60005b6001835103811015611a5d57600080848381518110612ef957fe5b6020026020010151858460010181518110612f1057fe5b6020026020010151915091506000612f2883836143c2565b5090506000612f587f00000000000000000000000000000000000000000000000000000000000000008585612df0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612fa657600080fd5b505afa158015612fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fde9190615716565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614613040578284613043565b83835b91509150613084828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016112fa9190615a78565b9550613091868383614467565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146130d5578260006130d9565b6000835b91509150600060028c51038a106130f0578a613131565b6131317f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061312457fe5b6020026020010151612df0565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906131999086908690869060248101615e42565b600060405180830381600087803b1580156131b357600080fd5b505af11580156131c7573d6000803e3d6000fd5b50506001909b019a50612ede9950505050505050505050565b8082038281111561212357600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f000000000000000000000000000000000000000000000000000000000000000086604051602401613247929190615b12565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516132d09190615a5c565b6000604051808303816000865af19150503d806000811461330d576040519150601f19603f3d011682016040523d82523d6000602084013e613312565b606091505b5091509150818015610f26575080511580610f26575080806020019051810190610f2691906152c9565b60015490565b600082158061335d5750508181028183828161335a57fe5b04145b61212357600080fd5b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b602083106133dd57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016133a0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461343f576040519150601f19603f3d011682016040523d82523d6000602084013e613444565b606091505b5050905080611a5d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060610cab826000602b61401d565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061359857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161355b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135fa576040519150601f19603f3d011682016040523d82523d6000602084013e6135ff565b606091505b509150915081801561362d57508051158061362d575080806020019051602081101561362a57600080fd5b50515b6117c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008083518551146136a957600080fd5b6000855167ffffffffffffffff811180156136c357600080fd5b506040519080825280602002602001820160405280156136fd57816020015b6136ea614e70565b8152602001906001900390816136e25790505b5090506000865167ffffffffffffffff8111801561371a57600080fd5b5060405190808252806020026020018201604052801561375457816020015b613741614e70565b8152602001906001900390816137395790505b50905060005b8751811015613884576000806137838a848151811061377557fe5b6020026020010151896138ab565b915091506137908261453d565b85848151811061379c57fe5b60200260200101516000019060020b908160020b815250506137bd8161453d565b8484815181106137c957fe5b60200260200101516000019060020b908160020b815250508883815181106137ed57fe5b602002602001015185848151811061380157fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505088838151811061384357fe5b602002602001015184848151811061385757fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff909216910152505060010161375a565b5061388e8261454e565b60020b935061389c8161454e565b60020b92505050935093915050565b6000806000806138ba86614636565b90506000805b82811015613ad85760008060006138d68b6129b0565b92509250925060006138e9848484613d10565b905060008063ffffffff8d166139125761390283614661565b600291820b9350900b90506139b4565b61391c838e6148f9565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561396d57600080fd5b505afa158015613981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a59190615751565b50505060029290920b93505050505b600189038714156139f5578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16109950613a04565b6139fe8e612bdd565b9d508597505b6000871580613aa557508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a75578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613aa5565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613aba579b82019b9a81019a613ac5565b828d039c50818c039b505b5050600190950194506138c09350505050565b5082613b29577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613c1057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bd3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c72576040519150601f19603f3d011682016040523d82523d6000602084013e613c77565b606091505b5091509150818015613ca5575080511580613ca55750808060200190516020811015613ca257600080fd5b50515b6117be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000613d467f0000000000000000000000000000000000000000000000000000000000000000613d41868686613f70565b614d2a565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d7c57600080fd5b5090565b600081826014011015613df457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015613e6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015613ef457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015613f6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b613f78614e87565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115613fb0579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000613ff98383614d2a565b90503373ffffffffffffffffffffffffffffffffffffffff82161461212357600080fd5b60608182601f01101561409157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561410257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561417457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561419357604051915060008252602082016040526141fb565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141cc5780518352602092830192016141b4565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600080600061421385856143c2565b509050600080614224888888612df0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561426957600080fd5b505afa15801561427d573d6000803e3d6000fd5b505050506040513d606081101561429357600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146142da5780826142dd565b81815b90999098509650505050505050565b600080841161435c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b60008311801561436c5750600082115b61437557600080fd5b600061438d6103e86143878688613342565b90613342565b905060006143a16103e561438786896131e0565b90506143b860018284816143b157fe5b0490614e60565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156143fe57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061443857828461443b565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661446057600080fd5b9250929050565b60008084116144d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156144e75750600082115b6144f057600080fd5b60006144fe856103e5613342565b9050600061450c8285613342565b9050600061452683614520886103e8613342565b90614e60565b905080828161453157fe5b04979650505050505050565b80600281900b8114610cae57600080fd5b6000806000805b84518110156145e35784818151811061456a57fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1685828151811061459457fe5b60200260200101516000015160020b02830192508481815181106145b457fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16820191508080600101915050614555565b508082816145ed57fe5b059250600082128015614608575080828161460457fe5b0715155b15611e7e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156146ad57600080fd5b505afa1580156146c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e59190615751565b50939750919550935050600161ffff84161191506147319050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c14565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b815260040161476d9190615e2a565b60806040518083038186803b15801561478557600080fd5b505afa158015614799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147bd919061591c565b5050915091506147cb61333c565b63ffffffff168263ffffffff16146147e5578495506148f0565b60008361ffff1660018561ffff168761ffff1601038161480157fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016148429190615e39565b60806040518083038186803b15801561485a57600080fd5b505afa15801561486e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614892919061591c565b93505092509250806148d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615bdd565b82860363ffffffff811683870360060b816148e757fe5b059a5050505050505b50505050915091565b60008063ffffffff831661496e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061499d57fe5b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106149c657fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614a61578181015183820152602001614a49565b505050509050019250505060006040518083038186803b158015614a8457600080fd5b505afa158015614a98573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040908152811015614adf57600080fd5b8101908080516040519392919084640100000000821115614aff57600080fd5b908301906020820185811115614b1457600080fd5b8251866020820283011164010000000082111715614b3157600080fd5b82525081516020918201928201910280838360005b83811015614b5e578181015183820152602001614b46565b5050505090500160405260200180516040519392919084640100000000821115614b8757600080fd5b908301906020820185811115614b9c57600080fd5b8251866020820283011164010000000082111715614bb957600080fd5b82525081516020918201928201910280838360005b83811015614be6578181015183820152602001614bce565b5050505090500160405250505091509150600082600081518110614c0657fe5b602002602001015183600181518110614c1b57fe5b6020026020010151039050600082600081518110614c3557fe5b602002602001015183600181518110614c4a57fe5b60200260200101510390508763ffffffff168260060b81614c6757fe5b05965060008260060b128015614c9157508763ffffffff168260060b81614c8a57fe5b0760060b15155b15614cbc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614d1a57fe5b0496505050505050509250929050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d6c57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b8082018281101561212357600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610cae81615f8e565b60008083601f840112614ec3578182fd5b50813567ffffffffffffffff811115614eda578182fd5b602083019150836020808302850101111561446057600080fd5b600082601f830112614f04578081fd5b81356020614f19614f1483615f04565b615ee0565b8281528181019085830183850287018401881015614f35578586fd5b855b85811015614f705781356fffffffffffffffffffffffffffffffff81168114614f5e578788fd5b84529284019290840190600101614f37565b5090979650505050505050565b80518015158114610cae57600080fd5b600082601f830112614f9d578081fd5b8135614fab614f1482615f22565b818152846020838601011115614fbf578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610cae57600080fd5b805161ffff81168114610cae57600080fd5b803562ffffff81168114610cae57600080fd5b8035610cae81615fbf565b600060208284031215615038578081fd5b813561504381615f8e565b9392505050565b6000806040838503121561505c578081fd5b823561506781615f8e565b946020939093013593505050565b600080600060608486031215615089578081fd5b833561509481615f8e565b92506020840135915060408401356150ab81615f8e565b809150509250925092565b600080600080600060a086880312156150cd578283fd5b85356150d881615f8e565b94506020860135935060408601356150ef81615f8e565b925060608601359150608086013561510681615f8e565b809150509295509295909350565b60008060008060808587031215615129578182fd5b843561513481615f8e565b93506020850135925060408501359150606085013561515281615f8e565b939692955090935050565b60008060008060008060c08789031215615175578384fd5b863561518081615f8e565b95506020870135945060408701359350606087013561519e81615fd1565b9598949750929560808101359460a0909101359350915050565b600080602083850312156151ca578182fd5b823567ffffffffffffffff8111156151e0578283fd5b6151ec85828601614eb2565b90969095509350505050565b6000806000806080858703121561520d578182fd5b843567ffffffffffffffff80821115615224578384fd5b818701915087601f830112615237578384fd5b81356020615247614f1483615f04565b82815281810190858301885b8581101561527c5761526a8e8684358b0101614f8d565b84529284019290840190600101615253565b50909950505088013592505080821115615294578384fd5b506152a187828801614ef4565b9350506152b060408601615009565b91506152be6060860161501c565b905092959194509250565b6000602082840312156152da578081fd5b61504382614f7d565b6000806000604084860312156152f7578081fd5b83359250602084013567ffffffffffffffff811115615314578182fd5b61532086828701614eb2565b9497909650939450505050565b60006020828403121561533e578081fd5b813567ffffffffffffffff811115615354578182fd5b613d4684828501614f8d565b600080600060608486031215615374578081fd5b833567ffffffffffffffff81111561538a578182fd5b61539686828701614f8d565b9350506153a560208501615009565b915060408401356150ab81615fbf565b6000602082840312156153c6578081fd5b813561504381615fb0565b600080604083850312156153e3578182fd5b505080516020909101519092909150565b60008060008060608587031215615409578182fd5b8435935060208501359250604085013567ffffffffffffffff8082111561542e578384fd5b818701915087601f830112615441578384fd5b81358181111561544f578485fd5b886020828501011115615460578485fd5b95989497505060200194505050565b600060208284031215615480578081fd5b815167ffffffffffffffff811115615496578182fd5b8201601f810184136154a6578182fd5b80516154b4614f1482615f22565b8181528560208385010111156154c8578384fd5b610f26826020830160208601615f62565b6000602082840312156154ea578081fd5b813567ffffffffffffffff80821115615501578283fd5b9083019060808286031215615514578283fd5b60405160808101818110838211171561552957fe5b60405282358281111561553a578485fd5b61554687828601614f8d565b8252506020830135915061555982615f8e565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e08284031215615590578081fd5b60405160e0810181811067ffffffffffffffff821117156155ad57fe5b6040526155b983614ea7565b81526155c760208401614ea7565b60208201526155d860408401615009565b60408201526155e960608401614ea7565b60608201526080830135608082015260a083013560a082015261560e60c08401614ea7565b60c08201529392505050565b60006020828403121561562b578081fd5b813567ffffffffffffffff811115615641578182fd5b820160808185031215615043578182fd5b600060e08284031215610871578081fd5b600060a08284031215610871578081fd5b60006101008284031215610871578081fd5b600060208284031215615697578081fd5b813567ffffffffffffffff808211156156ae578283fd5b90830190604082860312156156c1578283fd5b6040516040810181811083821117156156d657fe5b6040528235828111156156e7578485fd5b6156f387828601614f8d565b8252506020830135925061570683615f8e565b6020810192909252509392505050565b60008060006060848603121561572a578081fd5b61573384614fd9565b925061574160208501614fd9565b915060408401516150ab81615fbf565b600080600080600080600060e0888a03121561576b578485fd5b875161577681615f8e565b602089015190975061578781615fb0565b955061579560408901614ff7565b94506157a360608901614ff7565b93506157b160808901614ff7565b925060a08801516157c181615fd1565b91506157cf60c08901614f7d565b905092959891949750929550565b6000602082840312156157ee578081fd5b61504382615009565b600060208284031215615808578081fd5b5035919050565b600060208284031215615820578081fd5b5051919050565b60008060408385031215615839578182fd5b82359150602083013561584b81615f8e565b809150509250929050565b6000806000806080858703121561586b578182fd5b84359350602085013561587d81615f8e565b925060408501359150606085013561515281615f8e565b6000806000606084860312156158a8578081fd5b833592506020840135915060408401356150ab81615f8e565b6000806000806000608086880312156158d8578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158fc578384fd5b61590888828901614eb2565b909450925050606086013561510681615f8e565b60008060008060808587031215615931578182fd5b845161593c81615fbf565b8094505060208501518060060b8114615953578283fd5b604086015190935061596481615f8e565b91506152be60608601614f7d565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526159a4816020860160208601615f62565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a6e818460208701615f62565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615b0760a083018461598c565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615ba9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b9785835161598c565b94509285019290850190600101615b5d565b5092979650505050505050565b600060208252615043602083018461598c565b6020810160058310615bd757fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d48828451615972565b6020830151615d5a6020840182615972565b506040830151615d6d60408401826159dd565b506060830151615d8060608401826159d6565b506080830151615d9360808401826159d6565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615dd182850182615972565b505061014092830151919092015290565b600060208252825160406020840152615dfe606084018261598c565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff84166040830152608060608301526143b8608083018461598c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615eb1578283fd5b83018035915067ffffffffffffffff821115615ecb578283fd5b60200191503681900382131561446057600080fd5b60405181810167ffffffffffffffff81118282101715615efc57fe5b604052919050565b600067ffffffffffffffff821115615f1857fe5b5060209081020190565b600067ffffffffffffffff821115615f3657fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f7d578181015183820152602001615f65565b83811115610d4a5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff811681146114d757600080fd5b8060020b81146114d757600080fd5b63ffffffff811681146114d757600080fd5b60ff811681146114d757600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH2 0x100 PUSH1 0x40 MSTORE PUSH1 0x0 NOT PUSH1 0x0 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x6171 CODESIZE SUB DUP1 PUSH3 0x6171 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x3B SWAP2 PUSH3 0x87 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 DUP5 SHL DUP3 AND PUSH1 0xA0 MSTORE SWAP2 DUP4 SHL DUP2 AND PUSH1 0xC0 MSTORE SWAP2 SHL AND PUSH1 0xE0 MSTORE PUSH3 0xE3 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x9D JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH3 0xA8 DUP6 PUSH3 0x6A JUMP JUMPDEST SWAP4 POP PUSH3 0xB8 PUSH1 0x20 DUP7 ADD PUSH3 0x6A JUMP JUMPDEST SWAP3 POP PUSH3 0xC8 PUSH1 0x40 DUP7 ADD PUSH3 0x6A JUMP JUMPDEST SWAP2 POP PUSH3 0xD8 PUSH1 0x60 DUP7 ADD PUSH3 0x6A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x5FED PUSH3 0x184 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x2DC MSTORE DUP1 PUSH2 0x158D MSTORE DUP1 PUSH2 0x15CD MSTORE DUP1 PUSH2 0x16F7 MSTORE DUP1 PUSH2 0x18A0 MSTORE DUP1 PUSH2 0x19CA MSTORE DUP1 PUSH2 0x23A8 MSTORE DUP1 PUSH2 0x29F9 MSTORE DUP1 PUSH2 0x2A59 MSTORE DUP1 PUSH2 0x2ADA MSTORE POP DUP1 PUSH2 0x99C MSTORE DUP1 PUSH2 0x1F48 MSTORE DUP1 PUSH2 0x3D17 MSTORE POP DUP1 PUSH2 0x1569 MSTORE DUP1 PUSH2 0x1C0A MSTORE DUP1 PUSH2 0x1F9E MSTORE DUP1 PUSH2 0x3216 MSTORE POP DUP1 PUSH2 0xD5C MSTORE DUP1 PUSH2 0xE30 MSTORE DUP1 PUSH2 0x10D0 MSTORE DUP1 PUSH2 0x1399 MSTORE DUP1 PUSH2 0x2F32 MSTORE DUP1 PUSH2 0x30F5 MSTORE POP PUSH2 0x5FED PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2BF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB3FDD50 GT PUSH2 0x16E JUMPI DUP1 PUSH4 0xDEE00F35 GT PUSH2 0xCB JUMPI DUP1 PUSH4 0xEFDEED8E GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xF25801A7 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xF25801A7 EQ PUSH2 0x6A9 JUMPI DUP1 PUSH4 0xF2D5D56B EQ PUSH2 0x6C9 JUMPI DUP1 PUSH4 0xF3995C67 EQ PUSH2 0x6DC JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xEFDEED8E EQ PUSH2 0x676 JUMPI DUP1 PUSH4 0xF100B205 EQ PUSH2 0x696 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xE0E189A0 GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0xE0E189A0 EQ PUSH2 0x63D JUMPI DUP1 PUSH4 0xE4A40545 EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0xE90A182F EQ PUSH2 0x663 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xDEE00F35 EQ PUSH2 0x5FD JUMPI DUP1 PUSH4 0xDF2AB5BB EQ PUSH2 0x62A JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xBC122A54 GT PUSH2 0x122 JUMPI DUP1 PUSH4 0xC45A0155 GT PUSH2 0x107 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x5CD JUMPI DUP1 PUSH4 0xC53AF304 EQ PUSH2 0x5E2 JUMPI DUP1 PUSH4 0xCAB372CE EQ PUSH2 0x5EA JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xBC122A54 EQ PUSH2 0x5A7 JUMPI DUP1 PUSH4 0xC2E3140A EQ PUSH2 0x5BA JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xACF8A4ED GT PUSH2 0x153 JUMPI DUP1 PUSH4 0xACF8A4ED EQ PUSH2 0x56E JUMPI DUP1 PUSH4 0xB3A2AF13 EQ PUSH2 0x581 JUMPI DUP1 PUSH4 0xB858183F EQ PUSH2 0x594 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xAB3FDD50 EQ PUSH2 0x548 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x55B JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x4F04A0DB GT PUSH2 0x21C JUMPI DUP1 PUSH4 0x791B98BC GT PUSH2 0x1D0 JUMPI DUP1 PUSH4 0x97E87D9D GT PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x97E87D9D EQ PUSH2 0x50F JUMPI DUP1 PUSH4 0xA4A78F0C EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0xA98CE37F EQ PUSH2 0x535 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x791B98BC EQ PUSH2 0x4E5 JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0x4FA JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x571AC8B0 GT PUSH2 0x201 JUMPI DUP1 PUSH4 0x571AC8B0 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x5AE401DC EQ PUSH2 0x4BF JUMPI DUP1 PUSH4 0x639D71A9 EQ PUSH2 0x4D2 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x4F04A0DB EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x5023B4DF EQ PUSH2 0x499 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x3068C554 GT PUSH2 0x273 JUMPI DUP1 PUSH4 0x42712A67 GT PUSH2 0x258 JUMPI DUP1 PUSH4 0x42712A67 EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x4659A494 EQ PUSH2 0x451 JUMPI DUP1 PUSH4 0x472B43F3 EQ PUSH2 0x464 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x3068C554 EQ PUSH2 0x40B JUMPI DUP1 PUSH4 0x3BEB26C4 EQ PUSH2 0x41E JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x11C17848 GT PUSH2 0x2A4 JUMPI DUP1 PUSH4 0x11C17848 EQ PUSH2 0x3AB JUMPI DUP1 PUSH4 0x11ED56C9 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x1F0464D1 EQ PUSH2 0x3EB JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x4E45AAF EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x9B81346 EQ PUSH2 0x398 JUMPI PUSH2 0x36A JUMP JUMPDEST CALLDATASIZE PUSH2 0x36A JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x368 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F742053414D42000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x382 PUSH2 0x37D CALLDATASIZE PUSH1 0x4 PUSH2 0x557F JUMP JUMPDEST PUSH2 0x6EF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x5E39 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x382 PUSH2 0x3A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x561A JUMP JUMPDEST PUSH2 0x877 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x368 PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x53F4 JUMP JUMPDEST PUSH2 0x957 JUMP JUMPDEST PUSH2 0x3DE PUSH2 0x3D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x5674 JUMP JUMPDEST PUSH2 0xAA7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x5BB6 JUMP JUMPDEST PUSH2 0x3FE PUSH2 0x3F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x52E3 JUMP JUMPDEST PUSH2 0xCB3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x5B38 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x419 CALLDATASIZE PUSH1 0x4 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0xD3D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x368 PUSH2 0x439 CALLDATASIZE PUSH1 0x4 PUSH2 0x57F7 JUMP JUMPDEST PUSH2 0xD50 JUMP JUMPDEST PUSH2 0x382 PUSH2 0x44C CALLDATASIZE PUSH1 0x4 PUSH2 0x58C1 JUMP JUMPDEST PUSH2 0xD55 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x515D JUMP JUMPDEST PUSH2 0xF2F JUMP JUMPDEST PUSH2 0x382 PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x58C1 JUMP JUMPDEST PUSH2 0xFE3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1397 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x5A78 JUMP JUMPDEST PUSH2 0x382 PUSH2 0x4A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5652 JUMP JUMPDEST PUSH2 0x13BB JUMP JUMPDEST PUSH2 0x368 PUSH2 0x4BA CALLDATASIZE PUSH1 0x4 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x14A4 JUMP JUMPDEST PUSH2 0x3FE PUSH2 0x4CD CALLDATASIZE PUSH1 0x4 PUSH2 0x52E3 JUMP JUMPDEST PUSH2 0x14DA JUMP JUMPDEST PUSH2 0x368 PUSH2 0x4E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x1553 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1567 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x158B JUMP JUMPDEST PUSH2 0x368 PUSH2 0x51D CALLDATASIZE PUSH1 0x4 PUSH2 0x5856 JUMP JUMPDEST PUSH2 0x15AF JUMP JUMPDEST PUSH2 0x368 PUSH2 0x530 CALLDATASIZE PUSH1 0x4 PUSH2 0x515D JUMP JUMPDEST PUSH2 0x17C7 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x543 CALLDATASIZE PUSH1 0x4 PUSH2 0x5827 JUMP JUMPDEST PUSH2 0x189C JUMP JUMPDEST PUSH2 0x368 PUSH2 0x556 CALLDATASIZE PUSH1 0x4 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x1A62 JUMP JUMPDEST PUSH2 0x3FE PUSH2 0x569 CALLDATASIZE PUSH1 0x4 PUSH2 0x51B8 JUMP JUMPDEST PUSH2 0x1AA0 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x57C CALLDATASIZE PUSH1 0x4 PUSH2 0x57F7 JUMP JUMPDEST PUSH2 0x1BFA JUMP JUMPDEST PUSH2 0x3DE PUSH2 0x58F CALLDATASIZE PUSH1 0x4 PUSH2 0x532D JUMP JUMPDEST PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x382 PUSH2 0x5A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x54D9 JUMP JUMPDEST PUSH2 0x1CC2 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x5B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x5894 JUMP JUMPDEST PUSH2 0x1E85 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x5C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x515D JUMP JUMPDEST PUSH2 0x1E91 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1F46 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x1F6A JUMP JUMPDEST PUSH2 0x368 PUSH2 0x5F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x1A76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x61D PUSH2 0x618 CALLDATASIZE PUSH1 0x4 PUSH2 0x504A JUMP JUMPDEST PUSH2 0x1F7C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x5BC9 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x638 CALLDATASIZE PUSH1 0x4 PUSH2 0x5075 JUMP JUMPDEST PUSH2 0x2129 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x64B CALLDATASIZE PUSH1 0x4 PUSH2 0x50B6 JUMP JUMPDEST PUSH2 0x2240 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x65E CALLDATASIZE PUSH1 0x4 PUSH2 0x57F7 JUMP JUMPDEST PUSH2 0x23A6 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x671 CALLDATASIZE PUSH1 0x4 PUSH2 0x504A JUMP JUMPDEST PUSH2 0x2422 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x682 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x368 PUSH2 0x691 CALLDATASIZE PUSH1 0x4 PUSH2 0x51F8 JUMP JUMPDEST PUSH2 0x2431 JUMP JUMPDEST PUSH2 0x3DE PUSH2 0x6A4 CALLDATASIZE PUSH1 0x4 PUSH2 0x5663 JUMP JUMPDEST PUSH2 0x2483 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x368 PUSH2 0x6C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x5360 JUMP JUMPDEST PUSH2 0x2523 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x6D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x504A JUMP JUMPDEST PUSH2 0x2574 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x6EA CALLDATASIZE PUSH1 0x4 PUSH2 0x515D JUMP JUMPDEST PUSH2 0x2580 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x80 ADD MLOAD EQ ISZERO PUSH2 0x7AC JUMPI POP DUP2 MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x756 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x76E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x782 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7A6 SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE JUMPDEST PUSH2 0x828 DUP4 PUSH1 0x80 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x40 ADD MLOAD DUP11 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x7EA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH2 0x809 JUMPI CALLER PUSH2 0x80B JUMP JUMPDEST ADDRESS JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE PUSH2 0x2618 JUMP JUMPDEST SWAP2 POP DUP3 PUSH1 0xA0 ADD MLOAD DUP3 LT ISZERO PUSH2 0x871 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5CB9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8EB PUSH1 0x40 DUP4 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0x890 SWAP1 PUSH1 0x20 DUP7 ADD PUSH2 0x5027 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SWAP1 DUP1 PUSH2 0x8A8 DUP9 DUP1 PUSH2 0x5E7D JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP CALLER PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE PUSH2 0x27C9 JUMP JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH1 0x60 DUP3 ADD CALLDATALOAD DUP2 GT ISZERO PUSH2 0x92E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C4B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 SGT DUP1 PUSH2 0x966 JUMPI POP PUSH1 0x0 DUP4 SGT JUMPDEST PUSH2 0x96F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x97D DUP3 DUP5 ADD DUP5 PUSH2 0x5686 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x991 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x29B0 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x9C3 PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x29E1 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 SGT PUSH2 0xA04 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 PUSH2 0xA35 JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP11 JUMPDEST SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0xA54 JUMPI PUSH2 0xA4F DUP6 DUP8 PUSH1 0x20 ADD MLOAD CALLER DUP5 PUSH2 0x29F7 JUMP JUMPDEST PUSH2 0xA9B JUMP JUMPDEST DUP6 MLOAD PUSH2 0xA5F SWAP1 PUSH2 0x2BD5 JUMP JUMPDEST ISZERO PUSH2 0xA84 JUMPI DUP6 MLOAD PUSH2 0xA6F SWAP1 PUSH2 0x2BDD JUMP JUMPDEST DUP7 MSTORE PUSH2 0xA7E DUP2 CALLER PUSH1 0x0 DUP10 PUSH2 0x27C9 JUMP JUMPDEST POP PUSH2 0xA9B JUMP JUMPDEST DUP1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0xA9B DUP5 DUP8 PUSH1 0x20 ADD MLOAD CALLER DUP5 PUSH2 0x29F7 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x160 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP1 PUSH2 0xCAB SWAP1 PUSH32 0x8831645600000000000000000000000000000000000000000000000000000000 SWAP1 DUP1 PUSH2 0xAEA PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB18 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB43 PUSH1 0x60 DUP8 ADD PUSH1 0x40 DUP9 ADD PUSH2 0x57DD JUMP JUMPDEST PUSH3 0xFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB5D PUSH1 0x80 DUP8 ADD PUSH1 0x60 DUP9 ADD PUSH2 0x53B5 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB75 PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x53B5 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD SWAP1 PUSH2 0xB95 SWAP1 PUSH2 0xB90 SWAP1 DUP9 ADD DUP9 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x2C12 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBB0 DUP7 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB90 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP2 MSTORE PUSH1 0xA0 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC0 DUP7 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0xBDA PUSH2 0x100 DUP8 ADD PUSH1 0xE0 DUP9 ADD PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC29 SWAP2 SWAP1 PUSH2 0x5D34 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x1C04 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH1 0x1 NUMBER SUB BLOCKHASH EQ PUSH2 0xD28 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426C6F636B686173680000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD32 DUP5 DUP5 PUSH2 0x1AA0 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD4A DUP5 DUP5 CALLER DUP6 DUP6 PUSH2 0x2240 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB5 PUSH32 0x0 DUP8 DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2CB7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDC1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP5 DUP2 GT ISZERO PUSH2 0xE05 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C4B JUMP JUMPDEST PUSH2 0xE9E DUP5 DUP5 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE15 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE2A SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST CALLER PUSH2 0xE98 PUSH32 0x0 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE5C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE71 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP10 DUP10 PUSH1 0x1 DUP2 DUP2 LT PUSH2 0xE7E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE93 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x2DF0 JUMP JUMPDEST DUP5 PUSH2 0x29F7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x1 EQ ISZERO PUSH2 0xEC5 JUMPI CALLER SWAP2 POP PUSH2 0xEE8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x2 EQ ISZERO PUSH2 0xEE8 JUMPI ADDRESS SWAP2 POP JUMPDEST PUSH2 0xF26 DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP3 POP PUSH2 0x2EDB SWAP2 POP POP JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8FCBAF0C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xFF DUP6 AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xE4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0x8FCBAF0C SWAP2 PUSH2 0x104 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA9B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH2 0x1099 JUMPI POP PUSH1 0x1 DUP5 DUP5 PUSH1 0x0 DUP2 PUSH2 0xFF9 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x100E SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1046 SWAP2 SWAP1 PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x105E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1096 SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST SWAP7 POP JUMPDEST PUSH2 0x1124 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x10A9 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x10BE SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP3 PUSH2 0x10C9 JUMPI CALLER PUSH2 0x10CB JUMP JUMPDEST ADDRESS JUMPDEST PUSH2 0x111E PUSH32 0x0 DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x10FC JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1111 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP11 DUP11 PUSH1 0x1 DUP2 DUP2 LT PUSH2 0xE7E JUMPI INVALID JUMPDEST DUP11 PUSH2 0x29F7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x1 EQ ISZERO PUSH2 0x114B JUMPI CALLER SWAP3 POP PUSH2 0x116E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x2 EQ ISZERO PUSH2 0x116E JUMPI ADDRESS SWAP3 POP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD DUP2 DUP2 LT PUSH2 0x119E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x11B3 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11EB SWAP2 SWAP1 PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1217 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x123B SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST SWAP1 POP PUSH2 0x127B DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 SWAP3 POP PUSH2 0x2EDB SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1350 DUP2 DUP8 DUP8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD DUP2 DUP2 LT PUSH2 0x12AD JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x12C2 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12FA SWAP2 SWAP1 PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1326 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x134A SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST SWAP1 PUSH2 0x31E0 JUMP JUMPDEST SWAP3 POP DUP7 DUP4 LT ISZERO PUSH2 0x138C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5CB9 JUMP JUMPDEST POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1464 PUSH1 0x80 DUP4 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0x13D4 SWAP1 PUSH1 0x60 DUP7 ADD PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x13E4 PUSH1 0xE0 DUP7 ADD PUSH1 0xC0 DUP8 ADD PUSH2 0x5027 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1402 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x1412 PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x57DD JUMP JUMPDEST PUSH2 0x141F PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x5027 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1431 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x27C9 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0xA0 ADD CALLDATALOAD DUP2 GT ISZERO PUSH2 0x92E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C4B JUMP JUMPDEST PUSH2 0x14CE DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31F0 JUMP JUMPDEST PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH2 0x14E6 PUSH2 0x333C JUMP JUMPDEST GT ISZERO PUSH2 0xD28 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73616374696F6E20746F6F206F6C6400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x155E DUP2 PUSH1 0x0 PUSH2 0x31F0 JUMP JUMPDEST PUSH2 0x14A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x15C0 JUMPI POP PUSH1 0x64 DUP3 GT ISZERO JUMPDEST PUSH2 0x15C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1652 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1666 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x167C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP2 LT ISZERO PUSH2 0x16EF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E742053414D42000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x17C0 JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2E1A7D4D DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1768 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x177C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x2710 PUSH2 0x1798 DUP6 DUP5 PUSH2 0x3342 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x179F JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x17B2 JUMPI PUSH2 0x17B2 DUP4 DUP3 PUSH2 0x3366 JUMP JUMPDEST PUSH2 0x17BE DUP6 DUP3 DUP5 SUB PUSH2 0x3366 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 PUSH4 0xDD62ED3E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x185C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1870 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1886 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD LT ISZERO PUSH2 0x17BE JUMPI PUSH2 0x17BE DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0xF2F JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1925 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1939 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x194F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x19C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E742053414D42000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1A5D JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2E1A7D4D DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1A5D DUP3 DUP3 PUSH2 0x3366 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1A6D DUP2 PUSH1 0x0 PUSH2 0x31F0 JUMP JUMPDEST PUSH2 0x1A76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14CE DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31F0 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1AB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1AED JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1AD8 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1BF3 JUMPI PUSH1 0x0 DUP1 ADDRESS DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x1B0B JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x1B1D SWAP2 SWAP1 PUSH2 0x5E7D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B2B SWAP3 SWAP2 SWAP1 PUSH2 0x5A4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B66 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B6B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x1BD1 JUMPI PUSH1 0x44 DUP2 MLOAD LT ISZERO PUSH2 0x1B84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD SWAP1 POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1B9E SWAP2 SWAP1 PUSH2 0x546F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x5BB6 JUMP JUMPDEST DUP1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1BDE JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x1AF3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x14D7 DUP2 CALLER PUSH2 0x189C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x1C4D SWAP2 SWAP1 PUSH2 0x5A5C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1C8A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP3 POP SWAP1 POP DUP1 PUSH2 0x871 JUMPI PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x1CA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1B9E SWAP2 SWAP1 PUSH2 0x546F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD EQ ISZERO PUSH2 0x1D93 JUMPI PUSH1 0x1 SWAP1 POP PUSH1 0x0 PUSH2 0x1CE5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x29B0 JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1D3C SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D8C SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE POP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1DA0 JUMPI CALLER PUSH2 0x1DA2 JUMP JUMPDEST ADDRESS JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x0 PUSH2 0x1DB4 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x2BD5 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E0D DUP6 PUSH1 0x40 ADD MLOAD DUP3 PUSH2 0x1DCD JUMPI DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x1DCF JUMP JUMPDEST ADDRESS JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1DE9 DUP12 PUSH1 0x0 ADD MLOAD PUSH2 0x34B4 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x2618 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE DUP1 ISZERO PUSH2 0x1E2D JUMPI DUP5 MLOAD ADDRESS SWAP3 POP PUSH2 0x1E26 SWAP1 PUSH2 0x2BDD JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1E3A JUMP JUMPDEST DUP5 PUSH1 0x40 ADD MLOAD SWAP4 POP POP PUSH2 0x1E40 JUMP JUMPDEST POP PUSH2 0x1DA5 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD DUP4 LT ISZERO PUSH2 0x1E7E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5CB9 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A5D DUP4 CALLER DUP5 DUP5 PUSH2 0x15AF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD DUP7 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 PUSH4 0xDD62ED3E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD LT ISZERO PUSH2 0x17BE JUMPI PUSH2 0x17BE DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x2580 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST SELFBALANCE ISZERO PUSH2 0x1F7A JUMPI PUSH2 0x1F7A CALLER SELFBALANCE PUSH2 0x3366 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E ADDRESS PUSH32 0x0 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FDA SWAP3 SWAP2 SWAP1 PUSH2 0x5A99 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2006 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x202A SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST LT PUSH2 0x2037 JUMPI POP PUSH1 0x0 PUSH2 0x2123 JUMP JUMPDEST PUSH2 0x2061 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31F0 JUMP JUMPDEST ISZERO PUSH2 0x206E JUMPI POP PUSH1 0x1 PUSH2 0x2123 JUMP JUMPDEST PUSH2 0x2098 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31F0 JUMP JUMPDEST ISZERO PUSH2 0x20A5 JUMPI POP PUSH1 0x2 PUSH2 0x2123 JUMP JUMPDEST PUSH2 0x20B0 DUP4 PUSH1 0x0 PUSH2 0x31F0 JUMP JUMPDEST PUSH2 0x20B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x20E3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31F0 JUMP JUMPDEST ISZERO PUSH2 0x20F0 JUMPI POP PUSH1 0x3 PUSH2 0x2123 JUMP JUMPDEST PUSH2 0x211A DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31F0 JUMP JUMPDEST ISZERO PUSH2 0x36A JUMPI POP PUSH1 0x4 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x222F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420746F6B656E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0xD4A JUMPI PUSH2 0xD4A DUP5 DUP4 DUP4 PUSH2 0x34C3 JUMP JUMPDEST PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x2251 JUMPI POP PUSH1 0x64 DUP3 GT ISZERO JUMPDEST PUSH2 0x225A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP2 LT ISZERO PUSH2 0x2360 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420746F6B656E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x17BE JUMPI PUSH1 0x0 PUSH2 0x2710 PUSH2 0x2375 DUP4 DUP7 PUSH2 0x3342 JUMP JUMPDEST DUP2 PUSH2 0x237C JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2390 JUMPI PUSH2 0x2390 DUP8 DUP5 DUP4 PUSH2 0x34C3 JUMP JUMPDEST PUSH2 0x239D DUP8 DUP7 DUP4 DUP6 SUB PUSH2 0x34C3 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x240E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x242D DUP3 DUP3 CALLER PUSH2 0x2129 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x243F DUP7 DUP7 DUP6 PUSH2 0x3698 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x17BE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C82 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCAB PUSH4 0x219F5D17 PUSH1 0xE0 SHL PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH1 0x40 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x24BB DUP7 PUSH1 0x0 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB90 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x24D6 DUP7 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB90 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x60 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x80 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC29 SWAP2 SWAP1 PUSH2 0x5CF0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2530 DUP6 DUP5 PUSH2 0x38AB JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x17C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C82 JUMP JUMPDEST PUSH2 0x242D DUP3 CALLER ADDRESS DUP5 PUSH2 0x3B33 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xFF DUP6 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0xD505ACCF SWAP2 PUSH1 0xE4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x1 EQ ISZERO PUSH2 0x2641 JUMPI CALLER SWAP4 POP PUSH2 0x2664 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x2 EQ ISZERO PUSH2 0x2664 JUMPI ADDRESS SWAP4 POP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2676 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x29B0 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP1 DUP5 AND LT PUSH1 0x0 DUP1 PUSH2 0x26A7 DUP7 DUP7 DUP7 PUSH2 0x3D10 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP12 DUP6 PUSH2 0x26CD DUP16 PUSH2 0x3D4E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND ISZERO PUSH2 0x26EF JUMPI DUP14 PUSH2 0x2715 JUMP JUMPDEST DUP8 PUSH2 0x270E JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x2715 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2726 SWAP2 SWAP1 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2755 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5AC0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x276E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2782 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27A6 SWAP2 SWAP1 PUSH2 0x53D1 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP3 PUSH2 0x27B5 JUMPI DUP2 PUSH2 0x27B7 JUMP JUMPDEST DUP1 JUMPDEST PUSH1 0x0 SUB SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x1 EQ ISZERO PUSH2 0x27F2 JUMPI CALLER SWAP4 POP PUSH2 0x2815 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x2 EQ ISZERO PUSH2 0x2815 JUMPI ADDRESS SWAP4 POP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2827 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x29B0 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP1 DUP4 AND LT PUSH1 0x0 DUP1 PUSH2 0x2858 DUP6 DUP8 DUP7 PUSH2 0x3D10 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP12 DUP6 PUSH2 0x287E DUP16 PUSH2 0x3D4E JUMP JUMPDEST PUSH1 0x0 SUB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND ISZERO PUSH2 0x28A3 JUMPI DUP14 PUSH2 0x28C9 JUMP JUMPDEST DUP8 PUSH2 0x28C2 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x28C9 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x28DA SWAP2 SWAP1 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2909 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5AC0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2922 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2936 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x295A SWAP2 SWAP1 PUSH2 0x53D1 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP4 PUSH2 0x296F JUMPI DUP2 DUP4 PUSH1 0x0 SUB PUSH2 0x2975 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x0 SUB JUMPDEST SWAP1 SWAP9 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH2 0x29A1 JUMPI DUP12 DUP2 EQ PUSH2 0x29A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x29BE DUP5 DUP3 PUSH2 0x3D80 JUMP JUMPDEST SWAP3 POP PUSH2 0x29CB DUP5 PUSH1 0x14 PUSH2 0x3E80 JUMP JUMPDEST SWAP1 POP PUSH2 0x29D8 DUP5 PUSH1 0x17 PUSH2 0x3D80 JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF26 DUP6 PUSH2 0x29F2 DUP7 DUP7 DUP7 PUSH2 0x3F70 JUMP JUMPDEST PUSH2 0x3FED JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 ISZERO PUSH2 0x2A52 JUMPI POP DUP1 SELFBALANCE LT ISZERO JUMPDEST ISZERO PUSH2 0x2B9B JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2ABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2AD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2B69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2B7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD4A SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ ISZERO PUSH2 0x2BC9 JUMPI PUSH2 0x2BC4 DUP5 DUP4 DUP4 PUSH2 0x34C3 JUMP JUMPDEST PUSH2 0xD4A JUMP JUMPDEST PUSH2 0xD4A DUP5 DUP5 DUP5 DUP5 PUSH2 0x3B33 JUMP JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0xCAB SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x401D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2C67 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCAB SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP3 MLOAD LT ISZERO PUSH2 0x2CC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2CE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2D0A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 DUP2 PUSH1 0x1 DUP4 MLOAD SUB DUP2 MLOAD DUP2 LT PUSH2 0x2D1E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD JUMPDEST DUP1 ISZERO PUSH2 0xD35 JUMPI PUSH1 0x0 DUP1 PUSH2 0x2D8B DUP8 DUP7 PUSH1 0x1 DUP7 SUB DUP2 MLOAD DUP2 LT PUSH2 0x2D6A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x2D7E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4204 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x2DAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2D9E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 PUSH2 0x42EC JUMP JUMPDEST DUP5 PUSH1 0x1 DUP6 SUB DUP2 MLOAD DUP2 LT PUSH2 0x2DBC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD PUSH2 0x2D4E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2DFF DUP6 DUP6 PUSH2 0x43C2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 DUP6 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP6 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP11 SWAP1 SWAP5 SHL SWAP1 SWAP4 AND PUSH1 0x69 DUP5 ADD MSTORE PUSH1 0x7D DUP4 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH32 0x400E13FC6C59224F20228F0C0561806856AC34B7318F337F8012707C880C351F PUSH1 0x9D DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP3 ADD SWAP1 SWAP8 MSTORE DUP1 MLOAD SWAP7 ADD SWAP6 SWAP1 SWAP6 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP4 MLOAD SUB DUP2 LT ISZERO PUSH2 0x1A5D JUMPI PUSH1 0x0 DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2EF9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x2F10 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x2F28 DUP4 DUP4 PUSH2 0x43C2 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x2F58 PUSH32 0x0 DUP6 DUP6 PUSH2 0x2DF0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2FA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FBA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FDE SWAP2 SWAP1 PUSH2 0x5716 JUMP JUMPDEST POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3040 JUMPI DUP3 DUP5 PUSH2 0x3043 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3084 DUP3 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12FA SWAP2 SWAP1 PUSH2 0x5A78 JUMP JUMPDEST SWAP6 POP PUSH2 0x3091 DUP7 DUP4 DUP4 PUSH2 0x4467 JUMP JUMPDEST SWAP5 POP POP POP POP POP PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x30D5 JUMPI DUP3 PUSH1 0x0 PUSH2 0x30D9 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x2 DUP13 MLOAD SUB DUP11 LT PUSH2 0x30F0 JUMPI DUP11 PUSH2 0x3131 JUMP JUMPDEST PUSH2 0x3131 PUSH32 0x0 DUP10 DUP15 DUP14 PUSH1 0x2 ADD DUP2 MLOAD DUP2 LT PUSH2 0x3124 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2DF0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH32 0x22C0D9F00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 PUSH4 0x22C0D9F SWAP1 PUSH2 0x3199 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x24 DUP2 ADD PUSH2 0x5E42 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x31C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP12 ADD SWAP11 POP PUSH2 0x2EDE SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH32 0x0 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x3247 SWAP3 SWAP2 SWAP1 PUSH2 0x5B12 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE SWAP1 MLOAD PUSH2 0x32D0 SWAP2 SWAP1 PUSH2 0x5A5C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x330D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3312 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xF26 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xF26 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xF26 SWAP2 SWAP1 PUSH2 0x52C9 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x335D JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x335A JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x33DD JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x33A0 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x343F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3444 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x1A5D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354450000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0xCAB DUP3 PUSH1 0x0 PUSH1 0x2B PUSH2 0x401D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 DUP6 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3598 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x355B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x35FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x35FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x362D JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x362D JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x362A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x17C0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 MLOAD DUP6 MLOAD EQ PUSH2 0x36A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x36C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x36FD JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x36EA PUSH2 0x4E70 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x36E2 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x371A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3754 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x3741 PUSH2 0x4E70 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x3739 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x3884 JUMPI PUSH1 0x0 DUP1 PUSH2 0x3783 DUP11 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3775 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH2 0x38AB JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3790 DUP3 PUSH2 0x453D JUMP JUMPDEST DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x379C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP PUSH2 0x37BD DUP2 PUSH2 0x453D JUMP JUMPDEST DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x37C9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x37ED JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3801 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3843 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3857 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x375A JUMP JUMPDEST POP PUSH2 0x388E DUP3 PUSH2 0x454E JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP4 POP PUSH2 0x389C DUP2 PUSH2 0x454E JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP3 POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x38BA DUP7 PUSH2 0x4636 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3AD8 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x38D6 DUP12 PUSH2 0x29B0 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x38E9 DUP5 DUP5 DUP5 PUSH2 0x3D10 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP14 AND PUSH2 0x3912 JUMPI PUSH2 0x3902 DUP4 PUSH2 0x4661 JUMP JUMPDEST PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND SWAP4 POP SWAP1 SIGNEXTEND SWAP1 POP PUSH2 0x39B4 JUMP JUMPDEST PUSH2 0x391C DUP4 DUP15 PUSH2 0x48F9 JUMP JUMPDEST DUP2 PUSH1 0x2 SIGNEXTEND SWAP2 POP POP DUP1 SWAP3 POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x396D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3981 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39A5 SWAP2 SWAP1 PUSH2 0x5751 JUMP JUMPDEST POP POP POP PUSH1 0x2 SWAP3 SWAP1 SWAP3 SIGNEXTEND SWAP4 POP POP POP POP JUMPDEST PUSH1 0x1 DUP10 SUB DUP8 EQ ISZERO PUSH2 0x39F5 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT SWAP10 POP PUSH2 0x3A04 JUMP JUMPDEST PUSH2 0x39FE DUP15 PUSH2 0x2BDD JUMP JUMPDEST SWAP14 POP DUP6 SWAP8 POP JUMPDEST PUSH1 0x0 DUP8 ISZERO DUP1 PUSH2 0x3AA5 JUMPI POP DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x3A75 JUMPI DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x3AA5 JUMP JUMPDEST DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3ABA JUMPI SWAP12 DUP3 ADD SWAP12 SWAP11 DUP2 ADD SWAP11 PUSH2 0x3AC5 JUMP JUMPDEST DUP3 DUP14 SUB SWAP13 POP DUP2 DUP13 SUB SWAP12 POP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 POP PUSH2 0x38C0 SWAP4 POP POP POP POP JUMP JUMPDEST POP DUP3 PUSH2 0x3B29 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MUL SWAP5 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 MUL SWAP4 POP JUMPDEST POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 DUP6 SWAP5 SWAP4 DUP11 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3C10 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3BD3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3C72 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3C77 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x3CA5 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x3CA5 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3CA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x17BE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354460000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3D46 PUSH32 0x0 PUSH2 0x3D41 DUP7 DUP7 DUP7 PUSH2 0x3F70 JUMP JUMPDEST PUSH2 0x4D2A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x3D7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x3DF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x3E67 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x3EF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x3F67 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3F78 PUSH2 0x4E87 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0x3FB0 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF9 DUP4 DUP4 PUSH2 0x4D2A JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0x4091 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0x4102 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0x4174 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x4193 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x41FB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x41CC JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x41B4 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4213 DUP6 DUP6 PUSH2 0x43C2 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x4224 DUP9 DUP9 DUP9 PUSH2 0x2DF0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x427D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4293 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x42DA JUMPI DUP1 DUP3 PUSH2 0x42DD JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x435C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F4F55545055545F414D4F554E54000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x436C JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x4375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x438D PUSH2 0x3E8 PUSH2 0x4387 DUP7 DUP9 PUSH2 0x3342 JUMP JUMPDEST SWAP1 PUSH2 0x3342 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x43A1 PUSH2 0x3E5 PUSH2 0x4387 DUP7 DUP10 PUSH2 0x31E0 JUMP JUMPDEST SWAP1 POP PUSH2 0x43B8 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0x43B1 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0x4E60 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x43FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x4438 JUMPI DUP3 DUP5 PUSH2 0x443B JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x4460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x44D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F494E5055545F414D4F554E5400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x44E7 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x44F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x44FE DUP6 PUSH2 0x3E5 PUSH2 0x3342 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x450C DUP3 DUP6 PUSH2 0x3342 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4526 DUP4 PUSH2 0x4520 DUP9 PUSH2 0x3E8 PUSH2 0x3342 JUMP JUMPDEST SWAP1 PUSH2 0x4E60 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0x4531 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0xCAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x45E3 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x456A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4594 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH1 0x2 SIGNEXTEND MUL DUP4 ADD SWAP3 POP DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x45B4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 ADD SWAP2 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x4555 JUMP JUMPDEST POP DUP1 DUP3 DUP2 PUSH2 0x45ED JUMPI INVALID JUMPDEST SDIV SWAP3 POP PUSH1 0x0 DUP3 SLT DUP1 ISZERO PUSH2 0x4608 JUMPI POP DUP1 DUP3 DUP2 PUSH2 0x4604 JUMPI INVALID JUMPDEST SMOD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1E7E JUMPI POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP2 SWAP1 POP JUMP JUMPDEST MLOAD PUSH1 0x17 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC SWAP1 SWAP2 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x46C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x46E5 SWAP2 SWAP1 PUSH2 0x5751 JUMP JUMPDEST POP SWAP4 SWAP8 POP SWAP2 SWAP6 POP SWAP4 POP POP PUSH1 0x1 PUSH2 0xFFFF DUP5 AND GT SWAP2 POP PUSH2 0x4731 SWAP1 POP JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C14 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x476D SWAP2 SWAP1 PUSH2 0x5E2A JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4799 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x47BD SWAP2 SWAP1 PUSH2 0x591C JUMP JUMPDEST POP POP SWAP2 POP SWAP2 POP PUSH2 0x47CB PUSH2 0x333C JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP3 PUSH4 0xFFFFFFFF AND EQ PUSH2 0x47E5 JUMPI DUP5 SWAP6 POP PUSH2 0x48F0 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0xFFFF AND PUSH1 0x1 DUP6 PUSH2 0xFFFF AND DUP8 PUSH2 0xFFFF AND ADD SUB DUP2 PUSH2 0x4801 JUMPI INVALID JUMPDEST MOD SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4842 SWAP2 SWAP1 PUSH2 0x5E39 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x485A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x486E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4892 SWAP2 SWAP1 PUSH2 0x591C JUMP JUMPDEST SWAP4 POP POP SWAP3 POP SWAP3 POP DUP1 PUSH2 0x48D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5BDD JUMP JUMPDEST DUP3 DUP7 SUB PUSH4 0xFFFFFFFF DUP2 AND DUP4 DUP8 SUB PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x48E7 JUMPI INVALID JUMPDEST SDIV SWAP11 POP POP POP POP POP POP JUMPDEST POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP4 AND PUSH2 0x496E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4250000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x499D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x49C6 JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH32 0x883BDBFD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP4 PUSH4 0x883BDBFD SWAP4 DUP9 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 DUP6 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP12 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4A61 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4A49 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A98 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 LT ISZERO PUSH2 0x4ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x4AFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x4B14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x4B31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B5E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B46 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x4B87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x4B9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x4BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4BE6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4BCE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4C06 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4C1B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4C35 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4C4A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x4C67 JUMPI INVALID JUMPDEST SDIV SWAP7 POP PUSH1 0x0 DUP3 PUSH1 0x6 SIGNEXTEND SLT DUP1 ISZERO PUSH2 0x4C91 JUMPI POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x4C8A JUMPI INVALID JUMPDEST SMOD PUSH1 0x6 SIGNEXTEND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x4CBC JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 ADD SWAP6 JUMPDEST PUSH4 0xFFFFFFFF DUP9 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 PUSH1 0x20 DUP4 SWAP1 SHL AND PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP2 PUSH2 0x4D1A JUMPI INVALID JUMPDEST DIV SWAP7 POP POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x4D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x203C8EC649B23B7FAF9B73CCADFB1A67AF52A097119C82801F4947EC5DEB6C04 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xCAE DUP2 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4EC3 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4EDA JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x4460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4F04 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x4F19 PUSH2 0x4F14 DUP4 PUSH2 0x5F04 JUMP JUMPDEST PUSH2 0x5EE0 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP4 DUP6 MUL DUP8 ADD DUP5 ADD DUP9 LT ISZERO PUSH2 0x4F35 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x4F70 JUMPI DUP2 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4F5E JUMPI DUP8 DUP9 REVERT JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4F37 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xCAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4F9D JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4FAB PUSH2 0x4F14 DUP3 PUSH2 0x5F22 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x4FBF JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xCAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xCAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xCAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xCAE DUP2 PUSH2 0x5FBF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5038 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5043 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x505C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5067 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5089 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5094 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x50AB DUP2 PUSH2 0x5F8E JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x50CD JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x50D8 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x50EF DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x5106 DUP2 PUSH2 0x5F8E JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5129 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5134 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5152 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x5175 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x5180 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x519E DUP2 PUSH2 0x5FD1 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x51CA JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x51E0 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x51EC DUP6 DUP3 DUP7 ADD PUSH2 0x4EB2 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x520D JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5224 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5237 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x5247 PUSH2 0x4F14 DUP4 PUSH2 0x5F04 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP9 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x527C JUMPI PUSH2 0x526A DUP15 DUP7 DUP5 CALLDATALOAD DUP12 ADD ADD PUSH2 0x4F8D JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5253 JUMP JUMPDEST POP SWAP1 SWAP10 POP POP POP DUP9 ADD CALLDATALOAD SWAP3 POP POP DUP1 DUP3 GT ISZERO PUSH2 0x5294 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x52A1 DUP8 DUP3 DUP9 ADD PUSH2 0x4EF4 JUMP JUMPDEST SWAP4 POP POP PUSH2 0x52B0 PUSH1 0x40 DUP7 ADD PUSH2 0x5009 JUMP JUMPDEST SWAP2 POP PUSH2 0x52BE PUSH1 0x60 DUP7 ADD PUSH2 0x501C JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52DA JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5043 DUP3 PUSH2 0x4F7D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x52F7 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5314 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5320 DUP7 DUP3 DUP8 ADD PUSH2 0x4EB2 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x533E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5354 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x3D46 DUP5 DUP3 DUP6 ADD PUSH2 0x4F8D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5374 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x538A JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5396 DUP7 DUP3 DUP8 ADD PUSH2 0x4F8D JUMP JUMPDEST SWAP4 POP POP PUSH2 0x53A5 PUSH1 0x20 DUP6 ADD PUSH2 0x5009 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x50AB DUP2 PUSH2 0x5FBF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x53C6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5043 DUP2 PUSH2 0x5FB0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x53E3 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5409 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x542E JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5441 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x544F JUMPI DUP5 DUP6 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x5460 JUMPI DUP5 DUP6 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5480 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5496 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x54A6 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x54B4 PUSH2 0x4F14 DUP3 PUSH2 0x5F22 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x54C8 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xF26 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x5F62 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x54EA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5501 JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x80 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x5514 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT DUP4 DUP3 GT OR ISZERO PUSH2 0x5529 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x553A JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x5546 DUP8 DUP3 DUP7 ADD PUSH2 0x4F8D JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP2 POP PUSH2 0x5559 DUP3 PUSH2 0x5F8E JUMP JUMPDEST DUP2 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5590 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x55AD JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE PUSH2 0x55B9 DUP4 PUSH2 0x4EA7 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x55C7 PUSH1 0x20 DUP5 ADD PUSH2 0x4EA7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x55D8 PUSH1 0x40 DUP5 ADD PUSH2 0x5009 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x55E9 PUSH1 0x60 DUP5 ADD PUSH2 0x4EA7 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x560E PUSH1 0xC0 DUP5 ADD PUSH2 0x4EA7 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x562B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5641 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x80 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x5043 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x871 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x871 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x871 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5697 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x56AE JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x40 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x56C1 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT DUP4 DUP3 GT OR ISZERO PUSH2 0x56D6 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x56E7 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x56F3 DUP8 DUP3 DUP7 ADD PUSH2 0x4F8D JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP3 POP PUSH2 0x5706 DUP4 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x572A JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5733 DUP5 PUSH2 0x4FD9 JUMP JUMPDEST SWAP3 POP PUSH2 0x5741 PUSH1 0x20 DUP6 ADD PUSH2 0x4FD9 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x50AB DUP2 PUSH2 0x5FBF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x576B JUMPI DUP5 DUP6 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x5776 DUP2 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD SWAP1 SWAP8 POP PUSH2 0x5787 DUP2 PUSH2 0x5FB0 JUMP JUMPDEST SWAP6 POP PUSH2 0x5795 PUSH1 0x40 DUP10 ADD PUSH2 0x4FF7 JUMP JUMPDEST SWAP5 POP PUSH2 0x57A3 PUSH1 0x60 DUP10 ADD PUSH2 0x4FF7 JUMP JUMPDEST SWAP4 POP PUSH2 0x57B1 PUSH1 0x80 DUP10 ADD PUSH2 0x4FF7 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH2 0x57C1 DUP2 PUSH2 0x5FD1 JUMP JUMPDEST SWAP2 POP PUSH2 0x57CF PUSH1 0xC0 DUP10 ADD PUSH2 0x4F7D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x57EE JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5043 DUP3 PUSH2 0x5009 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5808 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5820 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5839 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x584B DUP2 PUSH2 0x5F8E JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x586B JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x587D DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5152 DUP2 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x58A8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x50AB DUP2 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x58D8 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x58FC JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x5908 DUP9 DUP3 DUP10 ADD PUSH2 0x4EB2 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x5106 DUP2 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5931 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD PUSH2 0x593C DUP2 PUSH2 0x5FBF JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x20 DUP6 ADD MLOAD DUP1 PUSH1 0x6 SIGNEXTEND DUP2 EQ PUSH2 0x5953 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x5964 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP2 POP PUSH2 0x52BE PUSH1 0x60 DUP7 ADD PUSH2 0x4F7D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x59A4 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x5F62 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP1 MSTORE JUMP JUMPDEST PUSH3 0xFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5A6E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x5F62 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x5B07 PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x598C JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x5BA9 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x5B97 DUP6 DUP4 MLOAD PUSH2 0x598C JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5B5D JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x5043 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x598C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x5 DUP4 LT PUSH2 0x5BD7 JUMPI INVALID JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F4E490000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4E454F0000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6F206D756368207265717565737465640000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH32 0x5444000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x13 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6F206C6974746C6520726563656976656400000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 ADD SWAP1 POP PUSH2 0x5D48 DUP3 DUP5 MLOAD PUSH2 0x5972 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x5D5A PUSH1 0x20 DUP5 ADD DUP3 PUSH2 0x5972 JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5D6D PUSH1 0x40 DUP5 ADD DUP3 PUSH2 0x59DD JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x5D80 PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x59D6 JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x5D93 PUSH1 0x80 DUP5 ADD DUP3 PUSH2 0x59D6 JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD DUP2 DUP5 ADD MSTORE POP PUSH2 0x120 DUP1 DUP5 ADD MLOAD PUSH2 0x5DD1 DUP3 DUP6 ADD DUP3 PUSH2 0x5972 JUMP JUMPDEST POP POP PUSH2 0x140 SWAP3 DUP4 ADD MLOAD SWAP2 SWAP1 SWAP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x5DFE PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x598C JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x43B8 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x598C JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x5EB1 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5ECB JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x4460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5EFC JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5F18 JUMPI INVALID JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5F36 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5F7D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5F65 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD4A JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "115:454:83:-:0;;;-1:-1:-1;;1343:57:52;;186:203:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;507:32:56;;;;;;;;549:34;;;;;;;520:18:16;;;;;;;548:12;;;;;115:454:83;;14:179:89;95:13;;-1:-1:-1;;;;;137:31:89;;127:42;;117:2;;183:1;180;173:12;117:2;76:117;;;:::o;198:482::-;;;;;372:3;360:9;351:7;347:23;343:33;340:2;;;394:6;386;379:22;340:2;422:42;454:9;422:42;:::i;:::-;412:52;;483:51;530:2;519:9;515:18;483:51;:::i;:::-;473:61;;553:51;600:2;589:9;585:18;553:51;:::i;:::-;543:61;;623:51;670:2;659:9;655:18;623:51;:::i;:::-;613:61;;330:350;;;;;;;:::o;:::-;115:454:83;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:32512:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "65:87:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "75:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "97:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "84:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "75:5:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "140:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "113:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "113:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "113:33:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "44:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "55:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:138:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "247:314:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "296:30:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "305:8:89"
                                        },
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "315:8:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "298:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "298:26:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "298:26:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "275:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "283:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "271:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "271:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "290:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "267:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "267:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "260:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "260:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "257:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "335:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "358:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "345:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "345:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "335:6:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "408:30:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "417:8:89"
                                        },
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "427:8:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "410:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "410:26:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "410:26:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "380:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "388:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "377:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "377:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "374:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "447:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "463:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "471:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "459:17:89"
                              },
                              "variableNames": [
                                {
                                  "name": "arrayPos",
                                  "nodeType": "YulIdentifier",
                                  "src": "447:8:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "539:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "548:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "551:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "541:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "541:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "541:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "499:6:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "511:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "519:4:89",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mul",
                                              "nodeType": "YulIdentifier",
                                              "src": "507:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "507:17:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "495:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "495:30:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "527:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "491:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "491:41:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "534:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "488:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "488:50:89"
                              },
                              "nodeType": "YulIf",
                              "src": "485:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "210:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "218:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "arrayPos",
                            "nodeType": "YulTypedName",
                            "src": "226:8:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "236:6:89",
                            "type": ""
                          }
                        ],
                        "src": "157:404:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "636:770:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "685:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "694:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "701:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "687:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "687:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "687:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "664:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "672:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "660:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "660:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "679:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "656:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "656:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "649:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "649:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "646:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "718:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "741:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "728:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "728:20:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "722:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "757:14:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "767:4:89",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "761:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "780:74:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "850:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_array$_t_bytes_$dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "806:43:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "806:47:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "791:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "791:63:89"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "784:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "863:16:89",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "876:3:89"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "867:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "895:3:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "900:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "888:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "888:15:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "888:15:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "912:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "923:3:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "928:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "919:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "919:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "912:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "940:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "955:6:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "963:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "951:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "951:15:89"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "944:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1021:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1030:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1037:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1023:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1023:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1023:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "989:6:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "1001:2:89"
                                              },
                                              {
                                                "name": "_2",
                                                "nodeType": "YulIdentifier",
                                                "src": "1005:2:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mul",
                                              "nodeType": "YulIdentifier",
                                              "src": "997:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "997:11:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "985:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "985:24:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1011:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "981:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "981:33:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "1016:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "978:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "978:42:89"
                              },
                              "nodeType": "YulIf",
                              "src": "975:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1054:14:89",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "1063:5:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1058:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1122:255:89",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "1136:30:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "1162:3:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "calldataload",
                                        "nodeType": "YulIdentifier",
                                        "src": "1149:12:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1149:17:89"
                                    },
                                    "variables": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulTypedName",
                                        "src": "1140:5:89",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "1248:24:89",
                                      "statements": [
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "name": "array",
                                                "nodeType": "YulIdentifier",
                                                "src": "1257:5:89"
                                              },
                                              {
                                                "name": "array",
                                                "nodeType": "YulIdentifier",
                                                "src": "1264:5:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "1250:6:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1250:20:89"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "1250:20:89"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "value",
                                              "nodeType": "YulIdentifier",
                                              "src": "1192:5:89"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "value",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1203:5:89"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1210:34:89",
                                                  "type": "",
                                                  "value": "0xffffffffffffffffffffffffffffffff"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "and",
                                                "nodeType": "YulIdentifier",
                                                "src": "1199:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1199:46:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "eq",
                                            "nodeType": "YulIdentifier",
                                            "src": "1189:2:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1189:57:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "iszero",
                                        "nodeType": "YulIdentifier",
                                        "src": "1182:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1182:65:89"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "1179:2:89"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "1292:3:89"
                                        },
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "1297:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1285:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1285:18:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1285:18:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1316:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "1327:3:89"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1332:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1323:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1323:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "1316:3:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1348:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "1359:3:89"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1364:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1355:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1355:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "1348:3:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1088:1:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1091:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1085:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1085:9:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1095:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1097:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1106:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1109:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1102:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1102:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1097:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1081:3:89",
                                "statements": []
                              },
                              "src": "1077:300:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1386:14:89",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "1395:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "1386:5:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_t_array$_t_uint128_$dyn",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "610:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "618:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "626:5:89",
                            "type": ""
                          }
                        ],
                        "src": "566:840:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1470:107:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1480:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1495:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1489:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1489:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "1480:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1555:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1564:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1567:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1557:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1557:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1557:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1524:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "1545:5:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "1538:6:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1538:13:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "1531:6:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1531:21:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1521:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1521:32:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1514:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1514:40:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1511:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1449:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1460:5:89",
                            "type": ""
                          }
                        ],
                        "src": "1411:166:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1636:431:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1685:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1694:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1701:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1687:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1687:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1687:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "1664:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1672:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1660:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1660:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "1679:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1656:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1656:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1649:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1649:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1646:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1718:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1741:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1728:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1728:20:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1722:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1757:64:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1817:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "1787:29:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1787:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1772:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1772:49:89"
                              },
                              "variables": [
                                {
                                  "name": "array_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1761:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1837:7:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1846:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1830:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1830:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1830:19:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1897:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1906:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1913:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1899:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1899:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1899:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "1872:6:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "1880:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1868:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1868:15:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1885:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1864:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1864:26:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "1892:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1861:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1861:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1858:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "array_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1947:7:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1956:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1943:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1943:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1967:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1975:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1963:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1963:17:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1982:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "1930:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1930:55:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1930:55:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "array_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2009:7:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2018:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2005:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2005:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2023:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2001:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2001:27:89"
                                  },
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "2030:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1994:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1994:42:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1994:42:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2045:16:89",
                              "value": {
                                "name": "array_1",
                                "nodeType": "YulIdentifier",
                                "src": "2054:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "2045:5:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1610:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "1618:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "1626:5:89",
                            "type": ""
                          }
                        ],
                        "src": "1582:485:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2134:128:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2144:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2159:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2153:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2153:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2144:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2240:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2249:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2252:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2242:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2242:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2242:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2188:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "2199:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2206:30:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2195:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2195:42:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2185:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2185:53:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2178:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2178:61:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2175:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint112_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2113:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2124:5:89",
                            "type": ""
                          }
                        ],
                        "src": "2072:190:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2328:104:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2338:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2353:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2347:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2347:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2338:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2410:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2419:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2422:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2412:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2412:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2412:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2382:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "2393:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2400:6:89",
                                            "type": "",
                                            "value": "0xffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2389:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2389:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2379:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2379:29:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2372:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2372:37:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2369:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint16_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2307:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2318:5:89",
                            "type": ""
                          }
                        ],
                        "src": "2267:165:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2487:113:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2497:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2519:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2506:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2506:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2497:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2578:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2587:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2590:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2580:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2580:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2580:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2548:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "2559:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2566:8:89",
                                            "type": "",
                                            "value": "0xffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2555:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2555:20:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2545:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2545:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2538:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2538:39:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2535:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2466:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2477:5:89",
                            "type": ""
                          }
                        ],
                        "src": "2437:163:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2655:86:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2665:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2687:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2674:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2674:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2665:5:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2729:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "2703:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2703:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2703:32:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2634:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2645:5:89",
                            "type": ""
                          }
                        ],
                        "src": "2605:136:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2816:189:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2862:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2871:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2879:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2864:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2864:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2864:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2837:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2846:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2833:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2833:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2858:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2829:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2829:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2826:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2897:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2923:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2910:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2910:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2901:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2969:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2942:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2942:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2942:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2984:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2994:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2984:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2782:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2793:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2805:6:89",
                            "type": ""
                          }
                        ],
                        "src": "2746:259:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3097:240:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3143:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3152:6:89"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3160:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3145:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3145:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3145:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3118:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3127:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3114:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3114:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3139:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3110:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3110:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3107:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3178:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3204:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3191:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3191:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3182:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3250:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3223:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3223:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3223:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3265:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3275:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3265:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3289:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3316:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3327:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3312:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3312:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3299:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3299:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3289:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3055:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3066:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3078:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3086:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3010:327:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3446:366:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3492:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "3501:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "3509:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3494:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3494:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3494:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3467:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3476:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3463:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3463:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3488:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3459:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3459:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3456:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3527:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3553:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3540:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3540:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3531:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3599:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3572:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3572:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3572:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3614:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3624:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3614:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3638:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3665:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3676:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3661:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3661:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3648:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3648:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3638:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3689:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3721:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3732:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3717:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3717:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3704:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3704:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3693:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3772:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3745:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3745:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3745:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3789:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "3799:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3789:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3396:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3407:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3419:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3427:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3435:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3342:470:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3955:545:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4002:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4011:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4019:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4004:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4004:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4004:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3976:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3985:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3972:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3972:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3997:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3968:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3968:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3965:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4037:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4063:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4050:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4050:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4041:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4109:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4082:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4082:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4082:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4124:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4134:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4124:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4148:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4175:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4186:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4171:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4171:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4158:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4158:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4148:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4199:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4231:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4242:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4227:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4227:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4214:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4214:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4203:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4282:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4255:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4255:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4255:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4299:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "4309:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4299:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4325:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4352:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4363:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4348:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4348:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4335:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4335:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "4325:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4376:48:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4408:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4419:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4404:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4404:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4391:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4391:33:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "4380:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4460:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4433:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4433:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4433:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4477:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "4487:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "4477:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3889:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3900:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3912:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3920:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3928:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "3936:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "3944:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3817:683:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4626:418:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4673:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4682:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4690:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4675:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4675:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4675:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4647:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4656:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4643:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4643:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4668:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4639:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4639:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4636:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4708:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4734:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4721:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4721:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4712:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4780:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4753:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4753:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4753:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4795:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4805:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4795:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4819:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4846:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4857:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4842:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4842:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4829:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4829:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4819:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4870:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4897:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4908:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4893:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4893:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4880:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4880:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4870:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4921:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4953:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4964:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4949:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4949:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4936:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4936:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4925:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5004:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4977:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4977:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4977:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5021:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "5031:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5021:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4568:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4579:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4591:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4599:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4607:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4615:6:89",
                            "type": ""
                          }
                        ],
                        "src": "4505:539:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5202:520:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5249:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "5258:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "5266:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5251:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5251:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5251:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5223:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5232:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5219:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5219:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5244:3:89",
                                    "type": "",
                                    "value": "192"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5215:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5215:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5212:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5284:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5310:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5297:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5297:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5288:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5356:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5329:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5329:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5329:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5371:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5381:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5371:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5395:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5422:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5433:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5418:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5418:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5405:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5405:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5395:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5446:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5473:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5484:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5469:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5469:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5456:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5456:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5446:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5497:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5529:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5540:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5525:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5525:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5512:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5512:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5501:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5578:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint8",
                                  "nodeType": "YulIdentifier",
                                  "src": "5553:24:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5553:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5553:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5595:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "5605:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5595:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5621:43:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5648:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5659:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5644:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5644:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5631:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5631:33:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "5621:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5673:43:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5700:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5711:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5696:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5696:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5683:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5683:33:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "5673:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5128:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5139:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5151:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5159:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5167:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "5175:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "5183:6:89",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "5191:6:89",
                            "type": ""
                          }
                        ],
                        "src": "5049:673:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5843:358:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5889:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5898:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5906:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5891:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5891:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5891:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5864:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5873:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5860:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5860:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5885:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5856:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5856:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5853:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5924:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5951:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5938:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5938:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "5928:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6004:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "6013:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "6021:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6006:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6006:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6006:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "5976:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5984:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5973:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5973:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5970:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6039:102:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6113:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "6124:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6109:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6109:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "6133:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "6065:43:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6065:76:89"
                              },
                              "variables": [
                                {
                                  "name": "value0_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6043:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6053:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6150:18:89",
                              "value": {
                                "name": "value0_1",
                                "nodeType": "YulIdentifier",
                                "src": "6160:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "6150:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6177:18:89",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "6187:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "6177:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5801:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5812:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5824:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5832:6:89",
                            "type": ""
                          }
                        ],
                        "src": "5727:474:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6384:1162:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6431:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6440:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6448:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6433:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6433:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6433:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6405:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6414:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "6401:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6401:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6426:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6397:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6397:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6394:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6466:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6493:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6480:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6480:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "6470:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6512:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6522:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6516:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6567:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6576:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6584:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6569:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6569:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6569:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "6555:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6563:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6552:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6552:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6549:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6602:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6616:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "6627:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6612:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6612:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "6606:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6682:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6691:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6699:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6684:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6684:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6684:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "6661:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6665:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "6657:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6657:13:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6672:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "6653:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6653:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6646:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6646:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6643:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6717:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6740:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6727:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6727:16:89"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "6721:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6752:14:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6762:4:89",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "6756:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6775:74:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "6845:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_array$_t_bytes_$dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "6801:43:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6801:47:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6786:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6786:63:89"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "6779:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6858:16:89",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "6871:3:89"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6862:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "6890:3:89"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "6895:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6883:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6883:15:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6883:15:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6907:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "6918:3:89"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "6923:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6914:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6914:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "6907:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6935:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6950:2:89"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "6954:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6946:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6946:11:89"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "6939:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6966:15:89",
                              "value": {
                                "name": "value2",
                                "nodeType": "YulIdentifier",
                                "src": "6975:6:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6970:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7035:165:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "7056:3:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "_2",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "7088:2:89"
                                                    },
                                                    {
                                                      "arguments": [
                                                        {
                                                          "name": "src",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "7105:3:89"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "calldataload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "7092:12:89"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "7092:17:89"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "7084:3:89"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "7084:26:89"
                                                },
                                                {
                                                  "name": "_4",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "7112:2:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "7080:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "7080:35:89"
                                            },
                                            {
                                              "name": "dataEnd",
                                              "nodeType": "YulIdentifier",
                                              "src": "7117:7:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "abi_decode_t_bytes",
                                            "nodeType": "YulIdentifier",
                                            "src": "7061:18:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7061:64:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7049:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7049:77:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7049:77:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7139:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "7150:3:89"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "7155:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7146:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7146:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "7139:3:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7171:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "7182:3:89"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "7187:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7178:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7178:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "7171:3:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "7001:1:89"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "7004:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6998:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6998:9:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "7008:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7010:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "7019:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7022:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7015:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7015:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "7010:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6994:3:89",
                                "statements": []
                              },
                              "src": "6990:210:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7209:15:89",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "7219:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7209:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7233:48:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7266:9:89"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "7277:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7262:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7262:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7249:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7249:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7237:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7310:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7319:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7327:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7312:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7312:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7312:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7296:8:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7306:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7293:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7293:16:89"
                              },
                              "nodeType": "YulIf",
                              "src": "7290:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7345:79:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7394:9:89"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7405:8:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7390:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7390:24:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "7416:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_uint128_$dyn",
                                  "nodeType": "YulIdentifier",
                                  "src": "7355:34:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7355:69:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "7345:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7433:49:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7467:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7478:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7463:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7463:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint24",
                                  "nodeType": "YulIdentifier",
                                  "src": "7443:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7443:39:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7433:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7491:49:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7525:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7536:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7521:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7521:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "7501:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7501:39:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "7491:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_array$_t_uint128_$dyn_memory_ptrt_uint24t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6326:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "6337:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6349:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6357:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6365:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "6373:6:89",
                            "type": ""
                          }
                        ],
                        "src": "6206:1340:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7629:136:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7675:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "7684:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "7692:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7677:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7677:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7677:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "7650:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7659:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "7646:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7646:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7671:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7642:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7642:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "7639:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7710:49:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7749:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "7720:28:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7720:39:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7710:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7595:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "7606:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7618:6:89",
                            "type": ""
                          }
                        ],
                        "src": "7551:214:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7903:409:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7949:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7958:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7966:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7951:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7951:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7951:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "7924:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7933:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "7920:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7920:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7945:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7916:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7916:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "7913:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7984:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8007:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7994:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7994:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7984:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8026:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8057:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8068:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8053:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8053:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8040:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8040:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "8030:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8115:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8124:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8132:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8117:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8117:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8117:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "8087:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8095:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8084:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8084:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8081:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8150:102:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8224:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "8235:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8220:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8220:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "8244:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "8176:43:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8176:76:89"
                              },
                              "variables": [
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8154:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8164:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8261:18:89",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "8271:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "8261:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8288:18:89",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "8298:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "8288:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes32t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7853:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "7864:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7876:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7884:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7892:6:89",
                            "type": ""
                          }
                        ],
                        "src": "7770:542:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8396:263:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8442:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "8451:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "8459:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8444:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8444:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8444:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "8417:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8426:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "8413:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8413:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8438:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8409:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8409:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8406:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8477:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8504:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8491:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8491:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "8481:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8557:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "8566:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "8574:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8559:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8559:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8559:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "8529:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8537:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8526:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8526:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8523:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8592:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8625:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "8636:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8621:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8621:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "8645:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "8602:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8602:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "8592:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8362:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "8373:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8385:6:89",
                            "type": ""
                          }
                        ],
                        "src": "8317:342:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8775:440:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8821:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8830:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8838:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8823:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8823:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8823:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "8796:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8805:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "8792:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8792:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8817:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8788:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8788:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8785:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8856:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8883:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8870:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8870:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "8860:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8936:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8945:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "8953:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8938:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8938:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8938:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "8908:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8916:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8905:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8905:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "8902:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8971:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9004:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "9015:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9000:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9000:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "9024:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "8981:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8981:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "8971:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9041:49:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9075:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9086:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9071:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9071:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint24",
                                  "nodeType": "YulIdentifier",
                                  "src": "9051:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9051:39:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "9041:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9099:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9129:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9140:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9125:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9125:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9112:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9112:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "9103:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "9179:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "9153:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9153:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9153:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9194:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "9204:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "9194:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes_memory_ptrt_uint24t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8725:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "8736:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8748:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8756:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8764:6:89",
                            "type": ""
                          }
                        ],
                        "src": "8664:551:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9288:187:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9334:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "9343:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "9351:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9336:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9336:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9336:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "9309:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9318:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "9305:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9305:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9330:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9301:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9301:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "9298:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9369:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9395:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9382:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9382:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "9373:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "9439:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_int24",
                                  "nodeType": "YulIdentifier",
                                  "src": "9414:24:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9414:31:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9414:31:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9454:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "9464:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "9454:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9254:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "9265:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9277:6:89",
                            "type": ""
                          }
                        ],
                        "src": "9220:255:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9576:157:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9622:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "9631:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "9639:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9624:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9624:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9624:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "9597:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9606:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "9593:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9593:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9618:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9589:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9589:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "9586:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9657:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9673:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9667:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9667:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "9657:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9692:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9712:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9723:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9708:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9708:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9702:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9702:25:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "9692:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int256t_int256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9534:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "9545:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9557:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9565:6:89",
                            "type": ""
                          }
                        ],
                        "src": "9480:253:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9859:654:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9905:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "9914:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "9922:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9907:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9907:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9907:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "9880:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9889:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "9876:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9876:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9901:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9872:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9872:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "9869:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9940:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9963:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9950:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9950:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "9940:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9982:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10009:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10020:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10005:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10005:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9992:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9992:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "9982:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10033:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10064:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10075:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10060:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10060:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10047:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10047:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "10037:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10088:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10098:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10092:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10143:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10152:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10160:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10145:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10145:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10145:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "10131:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10139:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10128:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10128:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10125:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10178:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10192:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "10203:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10188:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10188:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "10182:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10258:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10267:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10275:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10260:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10260:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10260:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "10237:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10241:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10233:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10233:13:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "10248:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10229:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10229:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10222:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10222:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10219:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10293:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "10320:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10307:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10307:16:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "10297:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10350:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10359:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10367:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10352:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10352:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10352:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10338:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10346:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10335:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10335:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10332:2:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10426:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10435:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "10443:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10428:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10428:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10428:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "10399:2:89"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "10403:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10395:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10395:15:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10412:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10391:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10391:24:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "10417:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10388:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10388:37:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10385:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10461:21:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "10475:2:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10479:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10471:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10471:11:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "10461:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10491:16:89",
                              "value": {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "10501:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "10491:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int256t_int256t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9801:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "9812:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9824:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9832:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "9840:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "9848:6:89",
                            "type": ""
                          }
                        ],
                        "src": "9738:775:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10609:585:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10655:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10664:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10672:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10657:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10657:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10657:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "10630:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10639:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "10626:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10626:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10651:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10622:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10622:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10619:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10690:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10710:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10704:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10704:16:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "10694:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10763:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10772:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10780:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10765:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10765:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10765:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "10735:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10743:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10732:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10732:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10729:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10798:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10812:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "10823:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10808:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10808:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10802:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10878:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10887:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "10895:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10880:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10880:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10880:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "10857:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10861:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10853:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10853:13:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "10868:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10849:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10849:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10842:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10842:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10839:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10913:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10929:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10923:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10923:9:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "10917:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10941:62:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "10999:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "10969:29:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10969:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "10954:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10954:49:89"
                              },
                              "variables": [
                                {
                                  "name": "array",
                                  "nodeType": "YulTypedName",
                                  "src": "10945:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "11019:5:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "11026:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11012:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11012:17:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11012:17:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11075:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11084:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11092:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11077:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11077:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11077:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "11052:2:89"
                                          },
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "11056:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "11048:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11048:11:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11061:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11044:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11044:20:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "11066:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11041:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11041:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11038:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11136:2:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11140:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11132:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11132:11:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "array",
                                        "nodeType": "YulIdentifier",
                                        "src": "11149:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11156:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11145:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11145:14:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "11161:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "11110:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11110:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11110:54:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11173:15:89",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "11183:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "11173:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10575:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "10586:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10598:6:89",
                            "type": ""
                          }
                        ],
                        "src": "10518:676:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11303:938:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11349:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11358:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11366:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11351:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11351:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11351:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "11324:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11333:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "11320:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11320:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11345:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11316:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11316:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11313:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11384:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11411:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "11398:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11398:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "11388:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11430:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11440:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11434:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11485:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11494:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11502:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11487:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11487:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11487:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "11473:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11481:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11470:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11470:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11467:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11520:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11534:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "11545:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11530:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11530:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "11524:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11592:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11601:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11609:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11594:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11594:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11594:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "11572:7:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "11581:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "11568:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11568:16:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11586:4:89",
                                    "type": "",
                                    "value": "0x80"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11564:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11564:27:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11561:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11627:23:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11647:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "11641:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11641:9:89"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "11631:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11659:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "11681:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11689:4:89",
                                    "type": "",
                                    "value": "0x80"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11677:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11677:17:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "11663:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11753:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "11755:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11755:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11755:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "11712:10:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11724:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "11709:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11709:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "11732:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "11744:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "11729:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11729:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "11706:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11706:46:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11703:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11782:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "11786:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11775:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11775:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11775:22:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11806:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "11835:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "11822:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11822:16:89"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11810:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11867:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11876:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "11884:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11869:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11869:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11869:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11853:8:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11863:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11850:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11850:16:89"
                              },
                              "nodeType": "YulIf",
                              "src": "11847:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "11909:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "11940:2:89"
                                          },
                                          {
                                            "name": "offset_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "11944:8:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "11936:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11936:17:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "11955:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "11917:18:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11917:46:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11902:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11902:62:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11902:62:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11973:38:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "12003:2:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12007:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11999:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11999:11:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "11986:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11986:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "11977:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "12047:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "12020:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12020:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12020:33:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12073:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12081:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12069:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12069:15:89"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "12086:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12062:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12062:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12062:30:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12112:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12120:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12108:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12108:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "12142:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12146:2:89",
                                            "type": "",
                                            "value": "64"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12138:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12138:11:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "12125:12:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12125:25:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12101:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12101:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12101:50:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12171:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12179:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12167:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12167:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "12201:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12205:2:89",
                                            "type": "",
                                            "value": "96"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12197:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12197:11:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "12184:12:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12184:25:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12160:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12160:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12160:50:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12219:16:89",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "12229:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "12219:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_ExactInputParams_$8594_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11269:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "11280:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11292:6:89",
                            "type": ""
                          }
                        ],
                        "src": "11199:1042:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12356:787:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12403:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "12412:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "12420:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "12405:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12405:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12405:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "12377:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12386:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "12373:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12373:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12398:3:89",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "12369:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12369:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "12366:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12438:23:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12458:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "12452:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12452:9:89"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "12442:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12470:34:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "12492:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12500:3:89",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12488:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12488:16:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "12474:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12579:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "12581:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12581:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12581:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12522:10:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12534:18:89",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "12519:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12519:34:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12558:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12570:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "12555:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12555:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "12516:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12516:62:89"
                              },
                              "nodeType": "YulIf",
                              "src": "12513:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12608:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "12612:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12601:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12601:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12601:22:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "12639:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12668:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "12647:20:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12647:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12632:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12632:47:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12632:47:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12699:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12707:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12695:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12695:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "12737:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12748:2:89",
                                            "type": "",
                                            "value": "32"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12733:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12733:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "12712:20:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12712:40:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12688:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12688:65:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12688:65:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12773:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12781:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12769:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12769:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "12810:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12821:2:89",
                                            "type": "",
                                            "value": "64"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12806:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12806:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_uint24",
                                      "nodeType": "YulIdentifier",
                                      "src": "12786:19:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12786:39:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12762:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12762:64:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12762:64:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12846:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12854:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12842:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12842:15:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "12884:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12895:2:89",
                                            "type": "",
                                            "value": "96"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12880:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12880:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "12859:20:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12859:40:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12835:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12835:65:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12835:65:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12920:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12928:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12916:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12916:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "12951:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12962:3:89",
                                            "type": "",
                                            "value": "128"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12947:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12947:19:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "12934:12:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12934:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12909:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12909:59:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12909:59:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "12988:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12996:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12984:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12984:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "13019:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "13030:3:89",
                                            "type": "",
                                            "value": "160"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "13015:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13015:19:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "13002:12:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13002:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12977:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12977:59:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12977:59:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "13056:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13064:3:89",
                                        "type": "",
                                        "value": "192"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13052:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13052:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "13095:9:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "13106:3:89",
                                            "type": "",
                                            "value": "192"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "13091:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13091:19:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "13070:20:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13070:41:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13045:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13045:67:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13045:67:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13121:16:89",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "13131:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "13121:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12322:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "12333:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "12345:6:89",
                            "type": ""
                          }
                        ],
                        "src": "12246:897:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13255:320:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13301:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13310:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13318:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13303:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13303:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13303:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "13276:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13285:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "13272:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13272:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13297:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13268:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13268:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "13265:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13336:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13363:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "13350:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13350:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "13340:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13416:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13425:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13433:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13418:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13418:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13418:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "13388:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13396:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13385:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13385:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "13382:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13451:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13465:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "13476:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13461:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13461:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "13455:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13522:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13531:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13539:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13524:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13524:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13524:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "13503:7:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "13512:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "13499:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13499:16:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13517:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13495:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13495:26:89"
                              },
                              "nodeType": "YulIf",
                              "src": "13492:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13557:12:89",
                              "value": {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "13567:2:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "13557:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_ExactOutputParams_$8634_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13221:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "13232:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "13244:6:89",
                            "type": ""
                          }
                        ],
                        "src": "13148:427:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13693:107:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13740:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13749:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13757:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13742:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13742:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13742:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "13714:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13723:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "13710:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13710:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13735:3:89",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13706:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13706:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "13703:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13775:19:89",
                              "value": {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "13785:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "13775:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_ExactOutputSingleParams_$8617_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13659:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "13670:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "13682:6:89",
                            "type": ""
                          }
                        ],
                        "src": "13580:220:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13918:107:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13965:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13974:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "13982:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13967:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13967:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13967:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "13939:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13948:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "13935:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13935:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13960:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13931:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13931:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "13928:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14000:19:89",
                              "value": {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "14010:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "14000:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_IncreaseLiquidityParams_$8546_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13884:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "13895:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "13907:6:89",
                            "type": ""
                          }
                        ],
                        "src": "13805:220:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14130:107:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14177:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14186:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14194:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14179:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14179:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14179:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "14151:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "14160:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "14147:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14147:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14172:3:89",
                                    "type": "",
                                    "value": "256"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14143:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14143:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14140:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14212:19:89",
                              "value": {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "14222:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "14212:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_MintParams_$8527_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14096:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "14107:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "14119:6:89",
                            "type": ""
                          }
                        ],
                        "src": "14030:207:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14346:824:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14392:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14401:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14409:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14394:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14394:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14394:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "14367:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "14376:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "14363:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14363:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14388:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14359:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14359:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14356:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14427:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14454:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "14441:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14441:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "14431:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14473:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "14483:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "14477:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14528:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14537:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14545:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14530:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14530:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14530:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "14516:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14524:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14513:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14513:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14510:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14563:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14577:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "14588:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14573:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14573:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "14567:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14635:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14644:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14652:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14637:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14637:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14637:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "14615:7:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "14624:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "14611:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14611:16:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14629:4:89",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14607:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14607:27:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14604:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14670:25:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14690:4:89",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "14684:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14684:11:89"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "14674:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14704:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "14726:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14734:4:89",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14722:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14722:17:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "14708:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14798:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "14800:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14800:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14800:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "14757:10:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "14769:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "14754:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14754:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "14777:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "14789:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "14774:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14774:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "14751:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14751:46:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14748:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14827:4:89",
                                    "type": "",
                                    "value": "0x40"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "14833:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14820:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14820:24:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14820:24:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14853:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "14882:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "14869:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14869:16:89"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "14857:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14914:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14923:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "14931:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14916:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14916:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14916:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14900:8:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14910:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14897:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14897:16:89"
                              },
                              "nodeType": "YulIf",
                              "src": "14894:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "14956:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "14987:2:89"
                                          },
                                          {
                                            "name": "offset_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "14991:8:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "14983:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14983:17:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "15002:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "14964:18:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14964:46:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14949:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14949:62:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14949:62:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15020:38:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "15050:2:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15054:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15046:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15046:11:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "15033:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15033:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "15024:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "15094:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "15067:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15067:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15067:33:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "15120:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15128:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15116:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15116:15:89"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "15133:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15109:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15109:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15109:30:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15148:16:89",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "15158:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "15148:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_SwapCallbackData_$6193_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14312:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "14323:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "14335:6:89",
                            "type": ""
                          }
                        ],
                        "src": "14242:928:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15289:321:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15335:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "15344:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "15352:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "15337:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15337:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15337:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "15310:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15319:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "15306:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15306:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15331:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "15302:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15302:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "15299:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15370:52:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "15412:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint112_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "15380:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15380:42:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "15370:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15431:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15477:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15488:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15473:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15473:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint112_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "15441:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15441:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "15431:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15501:38:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15524:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15535:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15520:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15520:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "15514:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15514:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "15505:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "15574:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "15548:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15548:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15548:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15589:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "15599:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "15589:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint112t_uint112t_uint32_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "15239:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "15250:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "15262:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "15270:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "15278:6:89",
                            "type": ""
                          }
                        ],
                        "src": "15175:435:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15685:189:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15731:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "15740:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "15748:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "15733:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15733:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15733:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "15706:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "15715:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "15702:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15702:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15727:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "15698:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15698:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "15695:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15766:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "15792:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "15779:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15779:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "15770:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "15838:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "15811:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15811:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15811:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15853:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "15863:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "15853:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "15651:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "15662:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "15674:6:89",
                            "type": ""
                          }
                        ],
                        "src": "15615:259:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16052:694:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16099:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "16108:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "16116:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "16101:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16101:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16101:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "16073:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16082:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "16069:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16069:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16094:3:89",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "16065:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16065:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "16062:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16134:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "16153:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "16147:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16147:16:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "16138:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "16199:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "16172:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16172:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16172:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16214:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "16224:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "16214:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16238:40:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16263:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16274:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16259:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16259:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "16253:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16253:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "16242:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "16312:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_int24",
                                  "nodeType": "YulIdentifier",
                                  "src": "16287:24:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16287:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16287:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16329:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "16339:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "16329:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16355:60:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16400:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16411:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16396:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16396:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "16365:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16365:50:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "16355:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16424:60:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16469:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16480:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16465:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16465:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "16434:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16434:50:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "16424:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16493:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16538:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16549:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16534:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16534:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "16503:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16503:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "16493:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16563:41:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16588:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16599:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16584:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16584:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "16578:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16578:26:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "16567:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "16638:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint8",
                                  "nodeType": "YulIdentifier",
                                  "src": "16613:24:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16613:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16613:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16655:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "16665:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "16655:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16681:59:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16724:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16735:3:89",
                                        "type": "",
                                        "value": "192"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16720:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16720:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "16691:28:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16691:49:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value6",
                                  "nodeType": "YulIdentifier",
                                  "src": "16681:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "15970:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "15981:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "15993:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "16001:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "16009:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "16017:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "16025:6:89",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "16033:6:89",
                            "type": ""
                          },
                          {
                            "name": "value6",
                            "nodeType": "YulTypedName",
                            "src": "16041:6:89",
                            "type": ""
                          }
                        ],
                        "src": "15879:867:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16820:127:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16866:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "16875:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "16883:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "16868:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16868:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16868:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "16841:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "16850:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "16837:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16837:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16862:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "16833:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16833:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "16830:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16901:40:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "16931:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint24",
                                  "nodeType": "YulIdentifier",
                                  "src": "16911:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16911:30:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "16901:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "16786:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "16797:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "16809:6:89",
                            "type": ""
                          }
                        ],
                        "src": "16751:196:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17022:120:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17068:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17077:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17085:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17070:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17070:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17070:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "17043:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17052:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "17039:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17039:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17064:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "17035:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17035:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "17032:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17103:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17126:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17113:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17113:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "17103:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "16988:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "16999:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "17011:6:89",
                            "type": ""
                          }
                        ],
                        "src": "16952:190:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17228:113:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17274:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17283:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17291:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17276:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17276:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17276:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "17249:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17258:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "17245:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17245:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17270:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "17241:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17241:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "17238:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17309:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17325:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17319:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17319:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "17309:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "17194:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "17205:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "17217:6:89",
                            "type": ""
                          }
                        ],
                        "src": "17147:194:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17433:240:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17479:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17488:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "17496:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17481:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17481:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17481:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "17454:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17463:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "17450:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17450:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17475:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "17446:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17446:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "17443:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17514:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17537:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17524:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17524:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "17514:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "17556:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17586:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17597:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17582:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17582:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17569:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17569:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "17560:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "17637:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "17610:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17610:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17610:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17652:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "17662:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "17652:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "17391:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "17402:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "17414:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "17422:6:89",
                            "type": ""
                          }
                        ],
                        "src": "17346:327:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17799:418:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17846:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "17855:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "17863:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17848:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17848:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17848:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "17820:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17829:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "17816:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17816:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17841:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "17812:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17812:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "17809:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17881:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "17904:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17891:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17891:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "17881:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "17923:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "17953:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17964:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17949:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17949:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17936:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17936:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "17927:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "18004:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "17977:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17977:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17977:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18019:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "18029:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "18019:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18043:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18070:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18081:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18066:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18066:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "18053:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18053:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "18043:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "18094:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18126:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18137:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18122:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18122:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "18109:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18109:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "18098:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "18177:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "18150:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18150:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18150:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18194:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "18204:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "18194:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "17741:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "17752:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "17764:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "17772:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "17780:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "17788:6:89",
                            "type": ""
                          }
                        ],
                        "src": "17678:539:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "18355:409:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "18401:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18410:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18418:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "18403:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "18403:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "18403:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "18376:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18385:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "18372:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18372:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18397:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "18368:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18368:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "18365:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18436:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "18459:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "18446:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18446:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "18436:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "18478:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18509:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18520:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18505:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18505:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "18492:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18492:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "18482:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "18567:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18576:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18584:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "18569:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "18569:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "18569:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "18539:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18547:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "18536:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18536:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "18533:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "18602:102:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18676:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "18687:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18672:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18672:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "18696:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "18628:43:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18628:76:89"
                              },
                              "variables": [
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "18606:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "18616:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18713:18:89",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "18723:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "18713:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18740:18:89",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "18750:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "18740:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "18305:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "18316:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "18328:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "18336:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "18344:6:89",
                            "type": ""
                          }
                        ],
                        "src": "18222:542:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "18873:291:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "18919:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18928:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "18936:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "18921:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "18921:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "18921:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "18894:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "18903:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "18890:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18890:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18915:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "18886:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18886:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "18883:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18954:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "18977:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "18964:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18964:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "18954:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18996:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19023:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19034:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19019:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19019:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19006:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19006:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "18996:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "19047:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19077:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19088:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19073:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19073:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19060:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19060:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "19051:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "19128:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "19101:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19101:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19101:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19143:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "19153:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "19143:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "18823:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "18834:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "18846:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "18854:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "18862:6:89",
                            "type": ""
                          }
                        ],
                        "src": "18769:395:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "19325:581:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "19372:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "19381:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "19389:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "19374:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "19374:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "19374:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "19346:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19355:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "19342:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19342:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19367:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "19338:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19338:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "19335:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19407:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "19430:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19417:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19417:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "19407:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19449:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19476:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19487:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19472:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19472:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19459:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19459:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "19449:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "19500:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19531:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19542:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19527:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19527:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19514:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19514:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "19504:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "19589:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "19598:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "19606:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "19591:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "19591:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "19591:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "19561:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19569:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "19558:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19558:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "19555:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "19624:102:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19698:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "19709:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19694:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19694:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "19718:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_address_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "19650:43:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19650:76:89"
                              },
                              "variables": [
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "19628:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value3_1",
                                  "nodeType": "YulTypedName",
                                  "src": "19638:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19735:18:89",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "19745:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "19735:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19762:18:89",
                              "value": {
                                "name": "value3_1",
                                "nodeType": "YulIdentifier",
                                "src": "19772:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "19762:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "19789:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "19819:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19830:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "19815:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19815:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "19802:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19802:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "19793:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "19870:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "19843:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19843:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19843:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "19885:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "19895:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "19885:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_array$_t_address_$dyn_calldata_ptrt_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "19259:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "19270:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "19282:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "19290:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "19298:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "19306:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "19314:6:89",
                            "type": ""
                          }
                        ],
                        "src": "19169:737:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "20037:525:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "20084:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "20093:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "20101:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "20086:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "20086:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "20086:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "20058:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20067:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "20054:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20054:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "20079:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "20050:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20050:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "20047:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20119:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "20138:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "20132:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20132:16:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "20123:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "20183:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "20157:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20157:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20157:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20198:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "20208:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "20198:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20222:40:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20247:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20258:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20243:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20243:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "20237:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20237:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "20226:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "20318:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "20327:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "20335:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "20320:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "20320:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "20320:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "20284:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "20304:1:89",
                                            "type": "",
                                            "value": "6"
                                          },
                                          {
                                            "name": "value_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "20307:7:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "20293:10:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "20293:22:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "20281:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20281:35:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "20274:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20274:43:89"
                              },
                              "nodeType": "YulIf",
                              "src": "20271:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20353:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "20363:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "20353:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20379:40:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20404:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20415:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20400:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20400:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "20394:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20394:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "20383:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "20455:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "20428:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20428:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20428:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20472:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "20482:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "20472:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20498:58:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "20541:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20552:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20537:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20537:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "20508:28:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20508:48:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "20498:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint32t_int56t_uint160t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "19979:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "19990:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "20002:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "20010:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "20018:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "20026:6:89",
                            "type": ""
                          }
                        ],
                        "src": "19911:651:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "20613:83:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "20630:3:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "20639:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20646:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "20635:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20635:54:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20623:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20623:67:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20623:67:89"
                            }
                          ]
                        },
                        "name": "abi_encode_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "20597:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "20604:3:89",
                            "type": ""
                          }
                        ],
                        "src": "20567:129:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "20752:267:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20762:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "20782:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "20776:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20776:12:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "20766:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "20804:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "20809:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20797:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20797:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20797:19:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "20851:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20858:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20847:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20847:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "20869:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20874:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20865:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20865:14:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "20881:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "20825:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20825:63:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20825:63:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "20897:116:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "20912:3:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "20925:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "20933:2:89",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "20921:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "20921:15:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "20938:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "20917:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "20917:88:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20908:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20908:98:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "21008:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "20904:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20904:109:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "20897:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "20729:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "20736:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "20744:3:89",
                            "type": ""
                          }
                        ],
                        "src": "20701:318:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21068:49:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21085:3:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21101:1:89",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "21104:5:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "21090:10:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21090:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21078:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21078:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21078:33:89"
                            }
                          ]
                        },
                        "name": "abi_encode_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "21052:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "21059:3:89",
                            "type": ""
                          }
                        ],
                        "src": "21024:93:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21167:49:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21184:3:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "21193:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21200:8:89",
                                        "type": "",
                                        "value": "0xffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "21189:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21189:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21177:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21177:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21177:33:89"
                            }
                          ]
                        },
                        "name": "abi_encode_t_uint24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "21151:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "21158:3:89",
                            "type": ""
                          }
                        ],
                        "src": "21122:94:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21394:341:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "21404:76:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "21414:66:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "21408:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21496:3:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "21509:2:89",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "21513:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "21505:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "21505:15:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "21522:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "21501:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21501:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21489:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21489:37:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21489:37:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "21546:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21551:2:89",
                                        "type": "",
                                        "value": "20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "21542:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21542:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "21564:3:89",
                                            "type": "",
                                            "value": "232"
                                          },
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "21569:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "21560:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "21560:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21578:66:89",
                                        "type": "",
                                        "value": "0xffffff0000000000000000000000000000000000000000000000000000000000"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "21556:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21556:89:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21535:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21535:111:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21535:111:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "21666:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21671:2:89",
                                        "type": "",
                                        "value": "23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "21662:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21662:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "21684:2:89",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value2",
                                            "nodeType": "YulIdentifier",
                                            "src": "21688:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "21680:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "21680:15:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "21697:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "21676:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21676:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21655:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21655:46:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21655:46:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "21710:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21721:3:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "21726:2:89",
                                    "type": "",
                                    "value": "43"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "21717:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21717:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "21710:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "21354:3:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "21359:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "21367:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "21375:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "21386:3:89",
                            "type": ""
                          }
                        ],
                        "src": "21221:514:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21887:126:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21910:3:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "21915:6:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "21923:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "21897:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21897:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21897:33:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "21939:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21953:3:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "21958:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "21949:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21949:16:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "21943:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "21981:2:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "21985:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21974:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21974:15:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21974:15:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "21998:9:89",
                              "value": {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "22005:2:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "21998:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "21855:3:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "21860:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "21868:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "21879:3:89",
                            "type": ""
                          }
                        ],
                        "src": "21740:273:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22155:137:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "22165:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "22185:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "22179:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22179:13:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "22169:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "22227:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "22235:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "22223:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22223:17:89"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "22242:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "22247:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "22201:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22201:53:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "22201:53:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "22263:23:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "22274:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "22279:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "22270:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22270:16:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "22263:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "22131:3:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "22136:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "22147:3:89",
                            "type": ""
                          }
                        ],
                        "src": "22018:274:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22398:125:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "22408:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "22420:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22431:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "22416:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22416:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "22408:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "22450:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "22465:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "22473:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "22461:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22461:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "22443:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22443:74:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "22443:74:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "22367:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "22378:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "22389:4:89",
                            "type": ""
                          }
                        ],
                        "src": "22297:226:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22637:125:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "22647:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "22659:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22670:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "22655:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22655:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "22647:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "22689:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "22704:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "22712:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "22700:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22700:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "22682:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22682:74:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "22682:74:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_payable__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "22606:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "22617:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "22628:4:89",
                            "type": ""
                          }
                        ],
                        "src": "22528:234:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "22896:198:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "22906:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "22918:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22929:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "22914:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22914:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "22906:4:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "22941:52:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "22951:42:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "22945:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "23009:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "23024:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "23032:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "23020:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23020:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23002:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23002:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23002:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23056:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23067:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23052:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23052:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "23076:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "23084:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "23072:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23072:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23045:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23045:43:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23045:43:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "22857:9:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "22868:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "22876:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "22887:4:89",
                            "type": ""
                          }
                        ],
                        "src": "22767:327:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "23322:370:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "23332:52:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "23342:42:89",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "23336:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "23400:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "23415:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "23423:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "23411:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23411:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23393:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23393:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23393:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23447:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23458:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23443:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23443:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "23477:6:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "23470:6:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "23470:14:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "23463:6:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23463:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23436:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23436:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23436:50:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23506:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23517:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23502:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23502:18:89"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "23522:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23495:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23495:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23495:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23549:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23560:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23545:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23545:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value3",
                                        "nodeType": "YulIdentifier",
                                        "src": "23569:6:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "23577:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "23565:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23565:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23538:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23538:43:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23538:43:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23601:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23612:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23597:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23597:19:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23618:3:89",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23590:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23590:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23590:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "23631:55:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "23658:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23670:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23681:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23666:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23666:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "23639:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23639:47:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "23631:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "23259:9:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "23270:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "23278:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "23286:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "23294:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "23302:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "23313:4:89",
                            "type": ""
                          }
                        ],
                        "src": "23099:593:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "23826:168:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "23836:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "23848:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "23859:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "23844:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23844:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "23836:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "23878:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "23893:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23901:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "23889:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23889:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23871:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23871:74:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23871:74:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "23965:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "23976:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "23961:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "23961:18:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "23981:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "23954:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "23954:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "23954:34:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "23787:9:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "23798:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "23806:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "23817:4:89",
                            "type": ""
                          }
                        ],
                        "src": "23697:297:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "24168:696:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24178:12:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "24188:2:89",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "24182:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24199:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "24217:9:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "24228:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "24213:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24213:18:89"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "24203:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "24247:9:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "24258:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "24240:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24240:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "24240:21:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24270:17:89",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "24281:6:89"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "24274:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24296:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "24316:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "24310:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24310:13:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "24300:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "24339:6:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "24347:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "24332:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24332:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "24332:22:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "24363:25:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "24374:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "24385:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "24370:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24370:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "24363:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24397:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "24419:9:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "24434:6:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "24442:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mul",
                                          "nodeType": "YulIdentifier",
                                          "src": "24430:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "24430:15:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "24415:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "24415:31:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "24448:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "24411:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24411:40:89"
                              },
                              "variables": [
                                {
                                  "name": "tail_2",
                                  "nodeType": "YulTypedName",
                                  "src": "24401:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24460:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "24478:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "24486:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "24474:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24474:15:89"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "24464:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "24498:13:89",
                              "value": {
                                "name": "tail",
                                "nodeType": "YulIdentifier",
                                "src": "24507:4:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "24502:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "24569:266:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "24590:3:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "tail_2",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "24603:6:89"
                                                },
                                                {
                                                  "name": "headStart",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "24611:9:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "24599:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "24599:22:89"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "24623:66:89",
                                              "type": "",
                                              "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "24595:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "24595:95:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "24583:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "24583:108:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "24583:108:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "24704:51:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "srcPtr",
                                              "nodeType": "YulIdentifier",
                                              "src": "24739:6:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "24733:5:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "24733:13:89"
                                        },
                                        {
                                          "name": "tail_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "24748:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "abi_encode_t_bytes",
                                        "nodeType": "YulIdentifier",
                                        "src": "24714:18:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "24714:41:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "tail_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "24704:6:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "24768:25:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "24782:6:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "24790:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "24778:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "24778:15:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "24768:6:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "24806:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "24817:3:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "24822:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "24813:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "24813:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "24806:3:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "24531:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "24534:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "24528:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24528:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "24542:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "24544:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "24553:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "24556:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "24549:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "24549:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "24544:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "24524:3:89",
                                "statements": []
                              },
                              "src": "24520:315:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "24844:14:89",
                              "value": {
                                "name": "tail_2",
                                "nodeType": "YulIdentifier",
                                "src": "24852:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "24844:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "24137:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "24148:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "24159:4:89",
                            "type": ""
                          }
                        ],
                        "src": "23999:865:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "24988:100:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25005:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25016:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "24998:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "24998:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "24998:21:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "25028:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "25055:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "25067:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "25078:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "25063:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "25063:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "25036:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25036:46:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "25028:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "24957:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "24968:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "24979:4:89",
                            "type": ""
                          }
                        ],
                        "src": "24869:219:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "25209:123:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "25219:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25231:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25242:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "25227:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25227:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "25219:4:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "25279:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "25281:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "25281:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "25281:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "25267:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "25275:1:89",
                                        "type": "",
                                        "value": "5"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "25264:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "25264:13:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "25257:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25257:21:89"
                              },
                              "nodeType": "YulIf",
                              "src": "25254:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25308:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "25319:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "25301:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25301:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "25301:25:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_enum$_ApprovalType_$8468__to_t_uint8__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "25178:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "25189:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "25200:4:89",
                            "type": ""
                          }
                        ],
                        "src": "25093:239:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "25458:100:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25475:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25486:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "25468:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25468:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "25468:21:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "25498:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "25525:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "25537:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "25548:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "25533:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "25533:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "25506:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25506:46:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "25498:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "25427:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "25438:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "25449:4:89",
                            "type": ""
                          }
                        ],
                        "src": "25337:221:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "25737:152:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25754:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25765:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "25747:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25747:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "25747:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "25788:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "25799:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "25784:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "25784:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25804:1:89",
                                    "type": "",
                                    "value": "3"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "25777:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25777:29:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "25777:29:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "25826:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "25837:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "25822:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "25822:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "25842:5:89",
                                    "type": "",
                                    "value": "ONI"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "25815:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25815:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "25815:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "25857:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "25869:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "25880:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "25865:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "25865:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "25857:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_4375a34c158c497e1dec923d39179cd2bff1d358f7876b16ed4f850d3b707895__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "25714:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "25728:4:89",
                            "type": ""
                          }
                        ],
                        "src": "25563:326:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "26068:152:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26085:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26096:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26078:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26078:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26078:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26119:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26130:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26115:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26115:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26135:1:89",
                                    "type": "",
                                    "value": "3"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26108:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26108:29:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26108:29:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26157:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26168:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26153:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26153:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "26173:5:89",
                                    "type": "",
                                    "value": "NEO"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26146:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26146:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26146:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "26188:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26200:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26211:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "26196:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26196:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "26188:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_6dc5790d7c4bfaaa2e4f8e2cd517bacd4a3831f85c0964e56f2743cbb847bc46__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "26045:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "26059:4:89",
                            "type": ""
                          }
                        ],
                        "src": "25894:326:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "26399:168:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26416:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26427:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26409:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26409:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26409:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26450:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26461:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26446:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26446:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26466:2:89",
                                    "type": "",
                                    "value": "18"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26439:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26439:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26439:30:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26489:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26500:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26485:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26485:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "26505:20:89",
                                    "type": "",
                                    "value": "Too much requested"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26478:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26478:48:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26478:48:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "26535:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26547:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26558:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "26543:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26543:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "26535:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_a5c1362ddf12293b907d8907d79f16e40792a7ddc4f09ee6d70cfec4ad443305__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "26376:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "26390:4:89",
                            "type": ""
                          }
                        ],
                        "src": "26225:342:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "26746:151:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26763:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26774:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26756:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26756:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26756:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26797:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26808:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26793:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26793:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26813:1:89",
                                    "type": "",
                                    "value": "2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26786:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26786:29:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26786:29:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "26835:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "26846:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "26831:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26831:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "26851:4:89",
                                    "type": "",
                                    "value": "TD"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "26824:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26824:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26824:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "26865:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "26877:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26888:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "26873:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26873:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "26865:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_df7085977c0a4e0ff243c8cdd75cc6add5df901d8b8ca4cde5e0319089f27136__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "26723:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "26737:4:89",
                            "type": ""
                          }
                        ],
                        "src": "26572:325:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "27076:169:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "27093:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "27104:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27086:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27086:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27086:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27127:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27138:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27123:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27123:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "27143:2:89",
                                    "type": "",
                                    "value": "19"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27116:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27116:30:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27116:30:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27166:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27177:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27162:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27162:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "27182:21:89",
                                    "type": "",
                                    "value": "Too little received"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27155:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27155:49:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27155:49:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "27213:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "27225:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "27236:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "27221:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27221:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "27213:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_f037a9cbca9be03859489f289f0cf5f85c0414bbfdd9785bc7ab31bd734e249c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "27053:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "27067:4:89",
                            "type": ""
                          }
                        ],
                        "src": "26902:343:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "27433:399:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "27443:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "27455:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "27466:3:89",
                                    "type": "",
                                    "value": "192"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "27451:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27451:19:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "27443:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "27486:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "27503:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27497:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27497:13:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27479:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27479:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27479:32:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27531:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27542:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27527:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27527:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "27559:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "27567:4:89",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "27555:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "27555:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27549:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27549:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27520:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27520:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27520:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27594:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27605:4:89",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27590:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27590:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "27622:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "27630:4:89",
                                            "type": "",
                                            "value": "0x40"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "27618:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "27618:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27612:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27612:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27583:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27583:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27583:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27657:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27668:4:89",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27653:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27653:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "27685:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "27693:4:89",
                                            "type": "",
                                            "value": "0x60"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "27681:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "27681:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27675:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27675:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27646:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27646:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27646:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27720:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27731:4:89",
                                        "type": "",
                                        "value": "0x80"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27716:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27716:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "27748:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "27756:4:89",
                                            "type": "",
                                            "value": "0x80"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "27744:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "27744:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27738:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27738:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27709:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27709:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27709:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "27783:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "27794:4:89",
                                        "type": "",
                                        "value": "0xa0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "27779:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27779:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "27811:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "27819:4:89",
                                            "type": "",
                                            "value": "0xa0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "27807:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "27807:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "27801:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "27801:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "27772:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "27772:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "27772:54:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_IncreaseLiquidityParams_$2797_memory_ptr__to_t_struct$_IncreaseLiquidityParams_$2797_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "27402:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "27413:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "27424:4:89",
                            "type": ""
                          }
                        ],
                        "src": "27250:582:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "27994:1077:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "28004:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "28016:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "28027:3:89",
                                    "type": "",
                                    "value": "352"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "28012:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28012:19:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "28004:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28067:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "28061:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28061:13:89"
                                  },
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "28076:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "28040:20:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28040:46:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28040:46:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28095:44:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28125:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28133:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28121:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28121:17:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "28115:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28115:24:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0",
                                  "nodeType": "YulTypedName",
                                  "src": "28099:12:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memberValue0",
                                    "nodeType": "YulIdentifier",
                                    "src": "28169:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28187:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28198:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28183:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28183:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "28148:20:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28148:56:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28148:56:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28213:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28245:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28253:4:89",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28241:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28241:17:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "28235:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28235:24:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_1",
                                  "nodeType": "YulTypedName",
                                  "src": "28217:14:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "28288:14:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28308:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28319:4:89",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28304:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28304:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_uint24",
                                  "nodeType": "YulIdentifier",
                                  "src": "28268:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28268:57:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28268:57:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28334:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28366:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28374:4:89",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28362:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28362:17:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "28356:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28356:24:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_2",
                                  "nodeType": "YulTypedName",
                                  "src": "28338:14:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "28408:14:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28428:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28439:4:89",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28424:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28424:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_int24",
                                  "nodeType": "YulIdentifier",
                                  "src": "28389:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28389:56:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28389:56:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28454:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28486:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28494:4:89",
                                        "type": "",
                                        "value": "0x80"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28482:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28482:17:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "28476:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28476:24:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_3",
                                  "nodeType": "YulTypedName",
                                  "src": "28458:14:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "28528:14:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28548:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28559:4:89",
                                        "type": "",
                                        "value": "0x80"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28544:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28544:20:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_int24",
                                  "nodeType": "YulIdentifier",
                                  "src": "28509:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28509:56:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28509:56:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28585:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28596:4:89",
                                        "type": "",
                                        "value": "0xa0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28581:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28581:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "28613:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "28621:4:89",
                                            "type": "",
                                            "value": "0xa0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "28609:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "28609:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "28603:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28603:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "28574:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28574:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28574:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28648:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28659:4:89",
                                        "type": "",
                                        "value": "0xc0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28644:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28644:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "28676:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "28684:4:89",
                                            "type": "",
                                            "value": "0xc0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "28672:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "28672:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "28666:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28666:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "28637:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28637:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28637:54:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28711:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "28722:4:89",
                                        "type": "",
                                        "value": "0xe0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28707:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28707:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "28739:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "28747:4:89",
                                            "type": "",
                                            "value": "0xe0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "28735:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "28735:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "28729:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28729:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "28700:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28700:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28700:54:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28763:16:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "28773:6:89",
                                "type": "",
                                "value": "0x0100"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "28767:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28799:9:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "28810:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28795:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28795:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "28825:6:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "28833:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "28821:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "28821:15:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "28815:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28815:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "28788:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28788:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28788:50:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28847:16:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "28857:6:89",
                                "type": "",
                                "value": "0x0120"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "28851:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28872:44:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "28904:6:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "28912:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28900:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28900:15:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "28894:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28894:22:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_4",
                                  "nodeType": "YulTypedName",
                                  "src": "28876:14:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "28946:14:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "28966:9:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "28977:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "28962:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "28962:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "28925:20:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "28925:56:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "28925:56:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "28990:16:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "29000:6:89",
                                "type": "",
                                "value": "0x0140"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "28994:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "29026:9:89"
                                      },
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "29037:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "29022:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29022:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "29052:6:89"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "29060:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "29048:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "29048:15:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "29042:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29042:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29015:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29015:50:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29015:50:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_MintParams_$2770_memory_ptr__to_t_struct$_MintParams_$2770_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "27963:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "27974:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "27985:4:89",
                            "type": ""
                          }
                        ],
                        "src": "27837:1234:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "29245:328:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "29262:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29273:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29255:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29255:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29255:21:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "29285:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "29311:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "29305:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29305:13:89"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0",
                                  "nodeType": "YulTypedName",
                                  "src": "29289:12:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "29338:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "29349:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "29334:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29334:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29354:4:89",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29327:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29327:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29327:32:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "29368:66:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memberValue0",
                                    "nodeType": "YulIdentifier",
                                    "src": "29401:12:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "29419:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "29430:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "29415:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29415:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "29382:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29382:52:89"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "29372:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "29454:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "29465:4:89",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "29450:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29450:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "29486:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "29494:2:89",
                                                "type": "",
                                                "value": "32"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "29482:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "29482:15:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "29476:5:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "29476:22:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "29500:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "29472:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29472:71:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29443:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29443:101:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29443:101:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "29553:14:89",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "29561:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "29553:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_SwapCallbackData_$6193_memory_ptr__to_t_struct$_SwapCallbackData_$6193_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "29214:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "29225:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "29236:4:89",
                            "type": ""
                          }
                        ],
                        "src": "29076:497:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "29678:89:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "29688:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "29700:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29711:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "29696:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29696:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "29688:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "29730:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "29745:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "29753:6:89",
                                        "type": "",
                                        "value": "0xffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "29741:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "29741:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29723:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29723:38:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29723:38:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint16__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "29647:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "29658:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "29669:4:89",
                            "type": ""
                          }
                        ],
                        "src": "29578:189:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "29873:76:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "29883:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "29895:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29906:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "29891:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29891:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "29883:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "29925:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "29936:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "29918:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29918:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29918:25:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "29842:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "29853:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "29864:4:89",
                            "type": ""
                          }
                        ],
                        "src": "29772:177:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "30157:280:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "30174:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "30185:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "30167:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30167:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "30167:25:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "30212:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "30223:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "30208:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30208:18:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "30228:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "30201:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30201:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "30201:34:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "30255:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "30266:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "30251:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30251:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "30275:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "30283:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "30271:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30271:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "30244:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30244:83:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "30244:83:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "30347:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "30358:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "30343:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30343:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "30363:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "30336:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30336:31:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "30336:31:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "30376:55:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "30403:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "30415:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "30426:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "30411:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30411:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "30384:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30384:47:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "30376:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "30102:9:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "30113:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "30121:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "30129:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "30137:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "30148:4:89",
                            "type": ""
                          }
                        ],
                        "src": "29954:483:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "30536:498:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "30546:51:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "ptr_to_tail",
                                    "nodeType": "YulIdentifier",
                                    "src": "30585:11:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "30572:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30572:25:89"
                              },
                              "variables": [
                                {
                                  "name": "rel_offset_of_tail",
                                  "nodeType": "YulTypedName",
                                  "src": "30550:18:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "30745:22:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "30754:4:89"
                                        },
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "30760:4:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "30747:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "30747:18:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "30747:18:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "rel_offset_of_tail",
                                        "nodeType": "YulIdentifier",
                                        "src": "30620:18:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [],
                                                "functionName": {
                                                  "name": "calldatasize",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "30648:12:89"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "30648:14:89"
                                              },
                                              {
                                                "name": "base_ref",
                                                "nodeType": "YulIdentifier",
                                                "src": "30664:8:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "30644:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "30644:29:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "30675:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "30640:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "30640:102:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "30616:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30616:127:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "30609:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30609:135:89"
                              },
                              "nodeType": "YulIf",
                              "src": "30606:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "30776:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "base_ref",
                                    "nodeType": "YulIdentifier",
                                    "src": "30794:8:89"
                                  },
                                  {
                                    "name": "rel_offset_of_tail",
                                    "nodeType": "YulIdentifier",
                                    "src": "30804:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "30790:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30790:33:89"
                              },
                              "variables": [
                                {
                                  "name": "addr_1",
                                  "nodeType": "YulTypedName",
                                  "src": "30780:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "30832:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "addr_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "30855:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "30842:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30842:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "30832:6:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "30905:22:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "30914:4:89"
                                        },
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "30920:4:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "30907:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "30907:18:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "30907:18:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "30877:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "30885:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "30874:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30874:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "30871:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "30936:25:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "addr_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "30948:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "30956:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "30944:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30944:17:89"
                              },
                              "variableNames": [
                                {
                                  "name": "addr",
                                  "nodeType": "YulIdentifier",
                                  "src": "30936:4:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31012:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "31021:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "31024:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "31014:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31014:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31014:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "addr",
                                    "nodeType": "YulIdentifier",
                                    "src": "30977:4:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "calldatasize",
                                          "nodeType": "YulIdentifier",
                                          "src": "30987:12:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "30987:14:89"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "31003:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "30983:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "30983:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "sgt",
                                  "nodeType": "YulIdentifier",
                                  "src": "30973:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "30973:38:89"
                              },
                              "nodeType": "YulIf",
                              "src": "30970:2:89"
                            }
                          ]
                        },
                        "name": "access_calldata_tail_t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "base_ref",
                            "nodeType": "YulTypedName",
                            "src": "30493:8:89",
                            "type": ""
                          },
                          {
                            "name": "ptr_to_tail",
                            "nodeType": "YulTypedName",
                            "src": "30503:11:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "addr",
                            "nodeType": "YulTypedName",
                            "src": "30519:4:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "30525:6:89",
                            "type": ""
                          }
                        ],
                        "src": "30442:592:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "31083:198:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "31093:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31109:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "31103:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31103:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "31093:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "31121:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "31143:6:89"
                                  },
                                  {
                                    "name": "size",
                                    "nodeType": "YulIdentifier",
                                    "src": "31151:4:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "31139:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31139:17:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "31125:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31231:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "31233:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31233:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31233:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "31174:10:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "31186:18:89",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "31171:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "31171:34:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "31210:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "31222:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "31207:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "31207:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "31168:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31168:62:89"
                              },
                              "nodeType": "YulIf",
                              "src": "31165:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31260:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "31264:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "31253:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31253:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "31253:22:89"
                            }
                          ]
                        },
                        "name": "allocateMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "31063:4:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "31072:6:89",
                            "type": ""
                          }
                        ],
                        "src": "31039:242:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "31359:108:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31403:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "31405:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31405:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31405:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "31375:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31383:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "31372:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31372:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "31369:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "31425:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "31441:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "31449:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "31437:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "31437:17:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31456:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "31433:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31433:28:89"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "31425:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_t_array$_t_bytes_$dyn",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "31339:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "31350:4:89",
                            "type": ""
                          }
                        ],
                        "src": "31286:181:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "31531:181:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31575:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "31577:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31577:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31577:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "31547:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31555:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "31544:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31544:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "31541:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "31597:109:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "31617:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "31625:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "31613:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "31613:17:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "31632:66:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "31609:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "31609:90:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "31701:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "31605:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31605:101:89"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "31597:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "31511:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "31522:4:89",
                            "type": ""
                          }
                        ],
                        "src": "31472:240:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "31770:205:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "31780:10:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "31789:1:89",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "31784:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31849:63:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "31874:3:89"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "31879:1:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "31870:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "31870:11:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "31893:3:89"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "31898:1:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "31889:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "31889:11:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "31883:5:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "31883:18:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "31863:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31863:39:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31863:39:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "31810:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "31813:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "31807:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31807:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "31821:19:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "31823:15:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "31832:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "31835:2:89",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "31828:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31828:10:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "31823:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "31803:3:89",
                                "statements": []
                              },
                              "src": "31799:113:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "31938:31:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "31951:3:89"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "31956:6:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "31947:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "31947:16:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "31965:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "31940:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "31940:27:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "31940:27:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "31927:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "31930:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "31924:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "31924:13:89"
                              },
                              "nodeType": "YulIf",
                              "src": "31921:2:89"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "31748:3:89",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "31753:3:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "31758:6:89",
                            "type": ""
                          }
                        ],
                        "src": "31717:258:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "32027:109:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "32114:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32123:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32126:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "32116:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "32116:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "32116:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "32050:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "32061:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "32068:42:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "32057:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "32057:54:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "32047:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "32047:65:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "32040:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "32040:73:89"
                              },
                              "nodeType": "YulIf",
                              "src": "32037:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "32016:5:89",
                            "type": ""
                          }
                        ],
                        "src": "31980:156:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "32186:75:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "32239:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32248:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32251:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "32241:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "32241:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "32241:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "32209:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "32227:1:89",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "32230:5:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "32216:10:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "32216:20:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "32206:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "32206:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "32199:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "32199:39:89"
                              },
                              "nodeType": "YulIf",
                              "src": "32196:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "32175:5:89",
                            "type": ""
                          }
                        ],
                        "src": "32141:120:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "32312:77:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "32367:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32376:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32379:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "32369:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "32369:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "32369:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "32335:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "32346:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "32353:10:89",
                                            "type": "",
                                            "value": "0xffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "32342:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "32342:22:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "32332:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "32332:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "32325:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "32325:41:89"
                              },
                              "nodeType": "YulIf",
                              "src": "32322:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "32301:5:89",
                            "type": ""
                          }
                        ],
                        "src": "32266:123:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "32439:71:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "32488:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32497:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "32500:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "32490:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "32490:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "32490:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "32462:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "32473:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "32480:4:89",
                                            "type": "",
                                            "value": "0xff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "32469:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "32469:16:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "32459:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "32459:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "32452:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "32452:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "32449:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_uint8",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "32428:5:89",
                            "type": ""
                          }
                        ],
                        "src": "32394:116:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n    function abi_decode_t_array$_t_address_$dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(arrayPos, arrayPos) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(arrayPos, arrayPos) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, mul(length, 0x20)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_t_array$_t_uint128_$dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocateMemory(array_allocation_size_t_array$_t_bytes_$dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let src := add(offset, _2)\n        if gt(add(add(offset, mul(_1, _2)), _2), end) { revert(array, array) }\n        let i := array\n        for { } lt(i, _1) { i := add(i, 1) }\n        {\n            let value := calldataload(src)\n            if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(array, array) }\n            mstore(dst, value)\n            dst := add(dst, _2)\n            src := add(src, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_t_bool_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_t_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := calldataload(offset)\n        let array_1 := allocateMemory(array_allocation_size_t_bytes(_1))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), array)\n        array := array_1\n    }\n    function abi_decode_t_uint112_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_t_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_t_uint24(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffff))) { revert(0, 0) }\n    }\n    function abi_decode_t_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_t_uint32(value)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value1, value1) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_t_address(value_1)\n        value2 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(value2, value2) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_t_address(value_1)\n        value2 := value_1\n        value3 := calldataload(add(headStart, 96))\n        let value_2 := calldataload(add(headStart, 128))\n        validator_revert_t_address(value_2)\n        value4 := value_2\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_t_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(value2, value2) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_t_uint8(value_1)\n        value3 := value_1\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let value0_1, value1_1 := abi_decode_t_array$_t_address_$dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_decode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_array$_t_uint128_$dyn_memory_ptrt_uint24t_uint32(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value2, value2) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value2, value2) }\n        let _3 := calldataload(_2)\n        let _4 := 0x20\n        let dst := allocateMemory(array_allocation_size_t_array$_t_bytes_$dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, _4)\n        let src := add(_2, _4)\n        let i := value2\n        for { } lt(i, _3) { i := add(i, 1) }\n        {\n            mstore(dst, abi_decode_t_bytes(add(add(_2, calldataload(src)), _4), dataEnd))\n            dst := add(dst, _4)\n            src := add(src, _4)\n        }\n        value0 := dst_1\n        let offset_1 := calldataload(add(headStart, _4))\n        if gt(offset_1, _1) { revert(value2, value2) }\n        value1 := abi_decode_t_array$_t_uint128_$dyn(add(headStart, offset_1), dataEnd)\n        value2 := abi_decode_t_uint24(add(headStart, 64))\n        value3 := abi_decode_t_uint32(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_t_bool_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_bytes32t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        let value1_1, value2_1 := abi_decode_t_array$_t_address_$dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        value0 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_uint24t_uint32(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        value0 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n        value1 := abi_decode_t_uint24(add(headStart, 32))\n        let value := calldataload(add(headStart, 64))\n        validator_revert_t_uint32(value)\n        value2 := value\n    }\n    function abi_decode_tuple_t_int24(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_int24(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_int256t_int256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_int256t_int256t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value2, value2) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value2, value2) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(value2, value2) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(value2, value2) }\n        value2 := add(_2, 32)\n        value3 := length\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value0, value0) }\n        let _2 := mload(_1)\n        let array := allocateMemory(array_allocation_size_t_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(value0, value0) }\n        copy_memory_to_memory(add(_1, 32), add(array, 32), _2)\n        value0 := array\n    }\n    function abi_decode_tuple_t_struct$_ExactInputParams_$8594_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value0, value0) }\n        let _2 := add(headStart, offset)\n        if slt(sub(dataEnd, _2), 0x80) { revert(value0, value0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x80)\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n        let offset_1 := calldataload(_2)\n        if gt(offset_1, _1) { revert(value0, value0) }\n        mstore(memPtr, abi_decode_t_bytes(add(_2, offset_1), dataEnd))\n        let value := calldataload(add(_2, 32))\n        validator_revert_t_address(value)\n        mstore(add(memPtr, 32), value)\n        mstore(add(memPtr, 64), calldataload(add(_2, 64)))\n        mstore(add(memPtr, 96), calldataload(add(_2, 96)))\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_struct$_ExactInputSingleParams_$8577_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(value0, value0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 224)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, abi_decode_t_address(headStart))\n        mstore(add(memPtr, 32), abi_decode_t_address(add(headStart, 32)))\n        mstore(add(memPtr, 64), abi_decode_t_uint24(add(headStart, 64)))\n        mstore(add(memPtr, 96), abi_decode_t_address(add(headStart, 96)))\n        mstore(add(memPtr, 128), calldataload(add(headStart, 128)))\n        mstore(add(memPtr, 160), calldataload(add(headStart, 160)))\n        mstore(add(memPtr, 192), abi_decode_t_address(add(headStart, 192)))\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_struct$_ExactOutputParams_$8634_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 128) { revert(value0, value0) }\n        value0 := _1\n    }\n    function abi_decode_tuple_t_struct$_ExactOutputSingleParams_$8617_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(value0, value0) }\n        value0 := headStart\n    }\n    function abi_decode_tuple_t_struct$_IncreaseLiquidityParams_$8546_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(value0, value0) }\n        value0 := headStart\n    }\n    function abi_decode_tuple_t_struct$_MintParams_$8527_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(value0, value0) }\n        value0 := headStart\n    }\n    function abi_decode_tuple_t_struct$_SwapCallbackData_$6193_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value0, value0) }\n        let _2 := add(headStart, offset)\n        if slt(sub(dataEnd, _2), 0x40) { revert(value0, value0) }\n        let memPtr := mload(0x40)\n        let newFreePtr := add(memPtr, 0x40)\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(0x40, newFreePtr)\n        let offset_1 := calldataload(_2)\n        if gt(offset_1, _1) { revert(value0, value0) }\n        mstore(memPtr, abi_decode_t_bytes(add(_2, offset_1), dataEnd))\n        let value := calldataload(add(_2, 32))\n        validator_revert_t_address(value)\n        mstore(add(memPtr, 32), value)\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_uint112t_uint112t_uint32_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := abi_decode_t_uint112_fromMemory(headStart)\n        value1 := abi_decode_t_uint112_fromMemory(add(headStart, 32))\n        let value := mload(add(headStart, 64))\n        validator_revert_t_uint32(value)\n        value2 := value\n    }\n    function abi_decode_tuple_t_uint160(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(value2, value2) }\n        let value := mload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_t_int24(value_1)\n        value1 := value_1\n        value2 := abi_decode_t_uint16_fromMemory(add(headStart, 64))\n        value3 := abi_decode_t_uint16_fromMemory(add(headStart, 96))\n        value4 := abi_decode_t_uint16_fromMemory(add(headStart, 128))\n        let value_2 := mload(add(headStart, 160))\n        validator_revert_t_uint8(value_2)\n        value5 := value_2\n        value6 := abi_decode_t_bool_fromMemory(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_uint24(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_t_uint24(headStart)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_t_address(value)\n        value1 := value\n    }\n    function abi_decode_tuple_t_uint256t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_t_address(value)\n        value1 := value\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_t_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_uint256t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        let value1_1, value2_1 := abi_decode_t_array$_t_address_$dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let value := calldataload(add(headStart, 64))\n        validator_revert_t_address(value)\n        value2 := value\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_array$_t_address_$dyn_calldata_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        let value2_1, value3_1 := abi_decode_t_array$_t_address_$dyn_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        let value := calldataload(add(headStart, 96))\n        validator_revert_t_address(value)\n        value4 := value\n    }\n    function abi_decode_tuple_t_uint32t_int56t_uint160t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n        let value := mload(headStart)\n        validator_revert_t_uint32(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        if iszero(eq(value_1, signextend(6, value_1))) { revert(value2, value2) }\n        value1 := value_1\n        let value_2 := mload(add(headStart, 64))\n        validator_revert_t_address(value_2)\n        value2 := value_2\n        value3 := abi_decode_t_bool_fromMemory(add(headStart, 96))\n    }\n    function abi_encode_t_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_t_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_t_int24(value, pos)\n    {\n        mstore(pos, signextend(2, value))\n    }\n    function abi_encode_t_uint24(value, pos)\n    {\n        mstore(pos, and(value, 0xffffff))\n    }\n    function abi_encode_tuple_packed_t_address_t_uint24_t_address__to_t_address_t_uint24_t_address__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000\n        mstore(pos, and(shl(96, value0), _1))\n        mstore(add(pos, 20), and(shl(232, value1), 0xffffff0000000000000000000000000000000000000000000000000000000000))\n        mstore(add(pos, 23), and(shl(96, value2), _1))\n        end := add(pos, 43)\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, end)\n        end := _1\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_payable__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__to_t_address_t_bool_t_int256_t_uint160_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), 160)\n        tail := abi_encode_t_bytes(value4, add(headStart, 160))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let tail_2 := add(add(headStart, mul(length, _1)), 64)\n        let srcPtr := add(value0, _1)\n        let i := tail\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0))\n            tail_2 := abi_encode_t_bytes(mload(srcPtr), tail_2)\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        tail := tail_2\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_t_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_enum$_ApprovalType_$8468__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        if iszero(lt(value0, 5)) { invalid() }\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_t_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_4375a34c158c497e1dec923d39179cd2bff1d358f7876b16ed4f850d3b707895__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 3)\n        mstore(add(headStart, 64), \"ONI\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6dc5790d7c4bfaaa2e4f8e2cd517bacd4a3831f85c0964e56f2743cbb847bc46__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 3)\n        mstore(add(headStart, 64), \"NEO\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_a5c1362ddf12293b907d8907d79f16e40792a7ddc4f09ee6d70cfec4ad443305__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"Too much requested\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_df7085977c0a4e0ff243c8cdd75cc6add5df901d8b8ca4cde5e0319089f27136__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 2)\n        mstore(add(headStart, 64), \"TD\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f037a9cbca9be03859489f289f0cf5f85c0414bbfdd9785bc7ab31bd734e249c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"Too little received\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_IncreaseLiquidityParams_$2797_memory_ptr__to_t_struct$_IncreaseLiquidityParams_$2797_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n    }\n    function abi_encode_tuple_t_struct$_MintParams_$2770_memory_ptr__to_t_struct$_MintParams_$2770_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 352)\n        abi_encode_t_address(mload(value0), headStart)\n        let memberValue0 := mload(add(value0, 0x20))\n        abi_encode_t_address(memberValue0, add(headStart, 0x20))\n        let memberValue0_1 := mload(add(value0, 0x40))\n        abi_encode_t_uint24(memberValue0_1, add(headStart, 0x40))\n        let memberValue0_2 := mload(add(value0, 0x60))\n        abi_encode_t_int24(memberValue0_2, add(headStart, 0x60))\n        let memberValue0_3 := mload(add(value0, 0x80))\n        abi_encode_t_int24(memberValue0_3, add(headStart, 0x80))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        mstore(add(headStart, 0xe0), mload(add(value0, 0xe0)))\n        let _1 := 0x0100\n        mstore(add(headStart, _1), mload(add(value0, _1)))\n        let _2 := 0x0120\n        let memberValue0_4 := mload(add(value0, _2))\n        abi_encode_t_address(memberValue0_4, add(headStart, _2))\n        let _3 := 0x0140\n        mstore(add(headStart, _3), mload(add(value0, _3)))\n    }\n    function abi_encode_tuple_t_struct$_SwapCallbackData_$6193_memory_ptr__to_t_struct$_SwapCallbackData_$6193_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let memberValue0 := mload(value0)\n        mstore(add(headStart, 32), 0x40)\n        let tail_1 := abi_encode_t_bytes(memberValue0, add(headStart, 96))\n        mstore(add(headStart, 0x40), and(mload(add(value0, 32)), 0xffffffffffffffffffffffffffffffffffffffff))\n        tail := tail_1\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_t_bytes(value3, add(headStart, 128))\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1))) { revert(addr, addr) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(addr, addr) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function allocateMemory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, size)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_t_array$_t_bytes_$dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { invalid() }\n        size := add(mul(length, 0x20), 0x20)\n    }\n    function array_allocation_size_t_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { invalid() }\n        size := add(and(add(length, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function validator_revert_t_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function validator_revert_t_int24(value)\n    {\n        if iszero(eq(value, signextend(2, value))) { revert(0, 0) }\n    }\n    function validator_revert_t_uint32(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function validator_revert_t_uint8(value)\n    {\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "2013": [
                  {
                    "length": 32,
                    "start": 2460
                  },
                  {
                    "length": 32,
                    "start": 8008
                  },
                  {
                    "length": 32,
                    "start": 15639
                  }
                ],
                "2017": [
                  {
                    "length": 32,
                    "start": 732
                  },
                  {
                    "length": 32,
                    "start": 5517
                  },
                  {
                    "length": 32,
                    "start": 5581
                  },
                  {
                    "length": 32,
                    "start": 5879
                  },
                  {
                    "length": 32,
                    "start": 6304
                  },
                  {
                    "length": 32,
                    "start": 6602
                  },
                  {
                    "length": 32,
                    "start": 9128
                  },
                  {
                    "length": 32,
                    "start": 10745
                  },
                  {
                    "length": 32,
                    "start": 10841
                  },
                  {
                    "length": 32,
                    "start": 10970
                  }
                ],
                "7689": [
                  {
                    "length": 32,
                    "start": 3420
                  },
                  {
                    "length": 32,
                    "start": 3632
                  },
                  {
                    "length": 32,
                    "start": 4304
                  },
                  {
                    "length": 32,
                    "start": 5017
                  },
                  {
                    "length": 32,
                    "start": 12082
                  },
                  {
                    "length": 32,
                    "start": 12533
                  }
                ],
                "7693": [
                  {
                    "length": 32,
                    "start": 5481
                  },
                  {
                    "length": 32,
                    "start": 7178
                  },
                  {
                    "length": 32,
                    "start": 8094
                  },
                  {
                    "length": 32,
                    "start": 12822
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052600436106102bf5760003560e01c8063ab3fdd501161016e578063dee00f35116100cb578063efdeed8e1161007f578063f25801a711610064578063f25801a7146106a9578063f2d5d56b146106c9578063f3995c67146106dc5761036a565b8063efdeed8e14610676578063f100b205146106965761036a565b8063e0e189a0116100b0578063e0e189a01461063d578063e4a4054514610650578063e90a182f146106635761036a565b8063dee00f35146105fd578063df2ab5bb1461062a5761036a565b8063bc122a5411610122578063c45a015511610107578063c45a0155146105cd578063c53af304146105e2578063cab372ce146105ea5761036a565b8063bc122a54146105a7578063c2e3140a146105ba5761036a565b8063acf8a4ed11610153578063acf8a4ed1461056e578063b3a2af1314610581578063b858183f146105945761036a565b8063ab3fdd5014610548578063ac9650d81461055b5761036a565b80634f04a0db1161021c578063791b98bc116101d057806397e87d9d116101b557806397e87d9d1461050f578063a4a78f0c14610522578063a98ce37f146105355761036a565b8063791b98bc146104e557806390793ea8146104fa5761036a565b8063571ac8b011610201578063571ac8b0146104ac5780635ae401dc146104bf578063639d71a9146104d25761036a565b80634f04a0db146104775780635023b4df146104995761036a565b80633068c5541161027357806342712a671161025857806342712a671461043e5780634659a49414610451578063472b43f3146104645761036a565b80633068c5541461040b5780633beb26c41461041e5761036a565b806311c17848116102a457806311c17848146103ab57806311ed56c9146103cb5780631f0464d1146103eb5761036a565b806304e45aaf1461036f57806309b81346146103985761036a565b3661036a573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461036857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b61038261037d36600461557f565b6106ef565b60405161038f9190615e39565b60405180910390f35b6103826103a636600461561a565b610877565b3480156103b757600080fd5b506103686103c63660046153f4565b610957565b6103de6103d9366004615674565b610aa7565b60405161038f9190615bb6565b6103fe6103f93660046152e3565b610cb3565b60405161038f9190615b38565b610368610419366004615114565b610d3d565b34801561042a57600080fd5b506103686104393660046157f7565b610d50565b61038261044c3660046158c1565b610d55565b61036861045f36600461515d565b610f2f565b6103826104723660046158c1565b610fe3565b34801561048357600080fd5b5061048c611397565b60405161038f9190615a78565b6103826104a7366004615652565b6113bb565b6103686104ba366004615027565b6114a4565b6103fe6104cd3660046152e3565b6114da565b6103686104e0366004615027565b611553565b3480156104f157600080fd5b5061048c611567565b34801561050657600080fd5b5061048c61158b565b61036861051d366004615856565b6115af565b61036861053036600461515d565b6117c7565b610368610543366004615827565b61189c565b610368610556366004615027565b611a62565b6103fe6105693660046151b8565b611aa0565b61036861057c3660046157f7565b611bfa565b6103de61058f36600461532d565b611c04565b6103826105a23660046154d9565b611cc2565b6103686105b5366004615894565b611e85565b6103686105c836600461515d565b611e91565b3480156105d957600080fd5b5061048c611f46565b610368611f6a565b6103686105f8366004615027565b611a76565b34801561060957600080fd5b5061061d61061836600461504a565b611f7c565b60405161038f9190615bc9565b610368610638366004615075565b612129565b61036861064b3660046150b6565b612240565b61036861065e3660046157f7565b6123a6565b61036861067136600461504a565b612422565b34801561068257600080fd5b506103686106913660046151f8565b612431565b6103de6106a4366004615663565b612483565b3480156106b557600080fd5b506103686106c4366004615360565b612523565b6103686106d736600461504a565b612574565b6103686106ea36600461515d565b612580565b6000806000836080015114156107ac575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610756903090600401615a78565b60206040518083038186803b15801561076e57600080fd5b505afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a6919061580f565b60808401525b610828836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107ea939291906159e6565b604051602081830303815290604052815260200186610809573361080b565b305b73ffffffffffffffffffffffffffffffffffffffff169052612618565b91508260a00151821015610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b60405180910390fd5b50919050565b60006108eb604083018035906108909060208601615027565b60408051808201909152600090806108a88880615e7d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250336020909101526127c9565b5050600054606082013581111561092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008413806109665750600083135b61096f57600080fd5b600061097d82840184615686565b9050600080600061099184600001516129b0565b9250925092506109c37f00000000000000000000000000000000000000000000000000000000000000008484846129e1565b5060008060008a13610a04578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089610a35565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115610a5457610a4f85876020015133846129f7565b610a9b565b8551610a5f90612bd5565b15610a84578551610a6f90612bdd565b8652610a7e81336000896127c9565b50610a9b565b80600081905550610a9b84876020015133846129f7565b50505050505050505050565b604080516101608101909152606090610cab907f88316456000000000000000000000000000000000000000000000000000000009080610aea6020870187615027565b73ffffffffffffffffffffffffffffffffffffffff168152602001856020016020810190610b189190615027565b73ffffffffffffffffffffffffffffffffffffffff168152602001610b4360608701604088016157dd565b62ffffff168152602001610b5d60808701606088016153b5565b60020b8152602001610b7560a08701608088016153b5565b60020b8152602090810190610b9590610b9090880188615027565b612c12565b8152602001610bb0866020016020810190610b909190615027565b815260a0860135602082015260c08601356040820152606001610bda610100870160e08801615027565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610c299190615d34565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611c04565b90505b919050565b60608380600143034014610d2857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610d328484611aa0565b91505b509392505050565b610d4a8484338585612240565b50505050565b600155565b6000610db57f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cb792505050565b600081518110610dc157fe5b6020026020010151905084811115610e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b610e9e84846000818110610e1557fe5b9050602002016020810190610e2a9190615027565b33610e987f000000000000000000000000000000000000000000000000000000000000000088886000818110610e5c57fe5b9050602002016020810190610e719190615027565b89896001818110610e7e57fe5b9050602002016020810190610e939190615027565b612df0565b846129f7565b73ffffffffffffffffffffffffffffffffffffffff821660011415610ec557339150610ee8565b73ffffffffffffffffffffffffffffffffffffffff821660021415610ee8573091505b610f26848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612edb915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610fcf57600080fd5b505af1158015610a9b573d6000803e3d6000fd5b60008086611099575060018484600081610ff957fe5b905060200201602081019061100e9190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110469190615a78565b60206040518083038186803b15801561105e57600080fd5b505afa158015611072573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611096919061580f565b96505b611124858560008181106110a957fe5b90506020020160208101906110be9190615027565b826110c957336110cb565b305b61111e7f0000000000000000000000000000000000000000000000000000000000000000898960008181106110fc57fe5b90506020020160208101906111119190615027565b8a8a6001818110610e7e57fe5b8a6129f7565b73ffffffffffffffffffffffffffffffffffffffff83166001141561114b5733925061116e565b73ffffffffffffffffffffffffffffffffffffffff83166002141561116e573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061119e57fe5b90506020020160208101906111b39190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111eb9190615a78565b60206040518083038186803b15801561120357600080fd5b505afa158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b919061580f565b905061127b868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612edb915050565b6113508187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106112ad57fe5b90506020020160208101906112c29190615027565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016112fa9190615a78565b60206040518083038186803b15801561131257600080fd5b505afa158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a919061580f565b906131e0565b92508683101561138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b505095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611464608083018035906113d49060608601615027565b6113e460e0860160c08701615027565b60405180604001604052808760200160208101906114029190615027565b61141260608a0160408b016157dd565b61141f60208b018b615027565b604051602001611431939291906159e6565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff168152506127c9565b90508160a0013581111561092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c4b565b6114ce817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b6114d757600080fd5b50565b606083806114e661333c565b1115610d2857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61155e8160006131f0565b6114a457600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000821180156115c0575060648211155b6115c957600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561165257600080fd5b505afa158015611666573d6000803e3d6000fd5b505050506040513d602081101561167c57600080fd5b50519050848110156116ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b80156117c0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561176857600080fd5b505af115801561177c573d6000803e3d6000fd5b505050506000612710611798858461334290919063ffffffff16565b8161179f57fe5b04905080156117b2576117b28382613366565b6117be85828403613366565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d602081101561188657600080fd5b505110156117be576117be868686868686610f2f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561192557600080fd5b505afa158015611939573d6000803e3d6000fd5b505050506040513d602081101561194f57600080fd5b50519050828110156119c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611a5d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611a3b57600080fd5b505af1158015611a4f573d6000803e3d6000fd5b50505050611a5d8282613366565b505050565b611a6d8160006131f0565b611a7657600080fd5b6114ce817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b60608167ffffffffffffffff81118015611ab957600080fd5b50604051908082528060200260200182016040528015611aed57816020015b6060815260200190600190039081611ad85790505b50905060005b82811015611bf35760008030868685818110611b0b57fe5b9050602002810190611b1d9190615e7d565b604051611b2b929190615a4c565b600060405180830381855af49150503d8060008114611b66576040519150601f19603f3d011682016040523d82523d6000602084013e611b6b565b606091505b509150915081611bd157604481511015611b8457600080fd5b60048101905080806020019051810190611b9e919061546f565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108689190615bb6565b80848481518110611bde57fe5b60209081029190910101525050600101611af3565b5092915050565b6114d7813361189c565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611c4d9190615a5c565b6000604051808303816000865af19150503d8060008114611c8a576040519150601f19603f3d011682016040523d82523d6000602084013e611c8f565b606091505b50925090508061087157604482511015611ca857600080fd5b60048201915081806020019051810190611b9e919061546f565b600080600083604001511415611d9357600190506000611ce584600001516129b0565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611d3c903090600401615a78565b60206040518083038186803b158015611d5457600080fd5b505afa158015611d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8c919061580f565b6040850152505b600081611da05733611da2565b305b90505b6000611db48560000151612bd5565b9050611e0d856040015182611dcd578660200151611dcf565b305b60006040518060400160405280611de98b600001516134b4565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250612618565b60408601528015611e2d578451309250611e2690612bdd565b8552611e3a565b8460400151935050611e40565b50611da5565b8360600151831015611e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615cb9565b5050919050565b611a5d833384846115af565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611f0657600080fd5b505afa158015611f1a573d6000803e3d6000fd5b505050506040513d6020811015611f3057600080fd5b505110156117be576117be868686868686612580565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715611f7a57611f7a3347613366565b565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611fda929190615a99565b60206040518083038186803b158015611ff257600080fd5b505afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a919061580f565b1061203757506000612123565b612061837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b1561206e57506001612123565b612098837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b156120a557506002612123565b6120b08360006131f0565b6120b957600080fd5b6120e3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131f0565b156120f057506003612123565b61211a837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131f0565b1561036a575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561219257600080fd5b505afa1580156121a6573d6000803e3d6000fd5b505050506040513d60208110156121bc57600080fd5b505190508281101561222f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610d4a57610d4a8483836134c3565b600082118015612251575060648211155b61225a57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122c357600080fd5b505afa1580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b505190508481101561236057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156117be5760006127106123758386613342565b8161237c57fe5b0490508015612390576123908784836134c3565b61239d87868385036134c3565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561240e57600080fd5b505af11580156117be573d6000803e3d6000fd5b61242d828233612129565b5050565b60008061243f868685613698565b915091508362ffffff16818303126117be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c82565b6060610cab63219f5d1760e01b6040518060c00160405280856040013581526020016124bb866000016020810190610b909190615027565b81526020016124d6866020016020810190610b909190615027565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610c299190615cf0565b60008061253085846138ab565b915091508362ffffff16818303126117c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c82565b61242d82333084613b33565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610fcf57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff84166001141561264157339350612664565b73ffffffffffffffffffffffffffffffffffffffff841660021415612664573093505b600080600061267685600001516129b0565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806126a7868686613d10565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856126cd8f613d4e565b73ffffffffffffffffffffffffffffffffffffffff8e16156126ef578d612715565b8761270e5773fffd8963efd1fc6a506488495d951d5263988d25612715565b6401000276a45b8d6040516020016127269190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612755959493929190615ac0565b6040805180830381600087803b15801561276e57600080fd5b505af1158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a691906153d1565b91509150826127b557816127b7565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127f257339350612815565b73ffffffffffffffffffffffffffffffffffffffff841660021415612815573093505b600080600061282785600001516129b0565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80841690831610600080612858858786613d10565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561287e8f613d4e565b60000373ffffffffffffffffffffffffffffffffffffffff8e16156128a3578d6128c9565b876128c25773fffd8963efd1fc6a506488495d951d5263988d256128c9565b6401000276a45b8d6040516020016128da9190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612909959493929190615ac0565b6040805180830381600087803b15801561292257600080fd5b505af1158015612936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295a91906153d1565b9150915060008361296f578183600003612975565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a166129a1578b81146129a157600080fd5b50505050505050949350505050565b600080806129be8482613d80565b92506129cb846014613e80565b90506129d8846017613d80565b91509193909250565b6000610f26856129f2868686613f70565b613fed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a525750804710155b15612b9b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612abf57600080fd5b505af1158015612ad3573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b6957600080fd5b505af1158015612b7d573d6000803e3d6000fd5b505050506040513d6020811015612b9357600080fd5b50610d4a9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612bc957612bc48483836134c3565b610d4a565b610d4a84848484613b33565b516042111590565b8051606090610cab9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161401d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190612c67903090600401615a78565b60206040518083038186803b158015612c7f57600080fd5b505afa158015612c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cab919061580f565b6060600282511015612cc857600080fd5b815167ffffffffffffffff81118015612ce057600080fd5b50604051908082528060200260200182016040528015612d0a578160200160208202803683370190505b5090508281600183510381518110612d1e57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610d3557600080612d8b87866001860381518110612d6a57fe5b6020026020010151878681518110612d7e57fe5b6020026020010151614204565b91509150612dad848481518110612d9e57fe5b602002602001015183836142ec565b846001850381518110612dbc57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612d4e565b6000806000612dff85856143c2565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60005b6001835103811015611a5d57600080848381518110612ef957fe5b6020026020010151858460010181518110612f1057fe5b6020026020010151915091506000612f2883836143c2565b5090506000612f587f00000000000000000000000000000000000000000000000000000000000000008585612df0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612fa657600080fd5b505afa158015612fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fde9190615716565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614613040578284613043565b83835b91509150613084828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016112fa9190615a78565b9550613091868383614467565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146130d5578260006130d9565b6000835b91509150600060028c51038a106130f0578a613131565b6131317f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061312457fe5b6020026020010151612df0565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906131999086908690869060248101615e42565b600060405180830381600087803b1580156131b357600080fd5b505af11580156131c7573d6000803e3d6000fd5b50506001909b019a50612ede9950505050505050505050565b8082038281111561212357600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f000000000000000000000000000000000000000000000000000000000000000086604051602401613247929190615b12565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516132d09190615a5c565b6000604051808303816000865af19150503d806000811461330d576040519150601f19603f3d011682016040523d82523d6000602084013e613312565b606091505b5091509150818015610f26575080511580610f26575080806020019051810190610f2691906152c9565b60015490565b600082158061335d5750508181028183828161335a57fe5b04145b61212357600080fd5b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b602083106133dd57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016133a0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461343f576040519150601f19603f3d011682016040523d82523d6000602084013e613444565b606091505b5050905080611a5d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060610cab826000602b61401d565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061359857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161355b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135fa576040519150601f19603f3d011682016040523d82523d6000602084013e6135ff565b606091505b509150915081801561362d57508051158061362d575080806020019051602081101561362a57600080fd5b50515b6117c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008083518551146136a957600080fd5b6000855167ffffffffffffffff811180156136c357600080fd5b506040519080825280602002602001820160405280156136fd57816020015b6136ea614e70565b8152602001906001900390816136e25790505b5090506000865167ffffffffffffffff8111801561371a57600080fd5b5060405190808252806020026020018201604052801561375457816020015b613741614e70565b8152602001906001900390816137395790505b50905060005b8751811015613884576000806137838a848151811061377557fe5b6020026020010151896138ab565b915091506137908261453d565b85848151811061379c57fe5b60200260200101516000019060020b908160020b815250506137bd8161453d565b8484815181106137c957fe5b60200260200101516000019060020b908160020b815250508883815181106137ed57fe5b602002602001015185848151811061380157fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505088838151811061384357fe5b602002602001015184848151811061385757fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff909216910152505060010161375a565b5061388e8261454e565b60020b935061389c8161454e565b60020b92505050935093915050565b6000806000806138ba86614636565b90506000805b82811015613ad85760008060006138d68b6129b0565b92509250925060006138e9848484613d10565b905060008063ffffffff8d166139125761390283614661565b600291820b9350900b90506139b4565b61391c838e6148f9565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561396d57600080fd5b505afa158015613981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a59190615751565b50505060029290920b93505050505b600189038714156139f5578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16109950613a04565b6139fe8e612bdd565b9d508597505b6000871580613aa557508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a75578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613aa5565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613aba579b82019b9a81019a613ac5565b828d039c50818c039b505b5050600190950194506138c09350505050565b5082613b29577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613c1057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bd3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c72576040519150601f19603f3d011682016040523d82523d6000602084013e613c77565b606091505b5091509150818015613ca5575080511580613ca55750808060200190516020811015613ca257600080fd5b50515b6117be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000613d467f0000000000000000000000000000000000000000000000000000000000000000613d41868686613f70565b614d2a565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d7c57600080fd5b5090565b600081826014011015613df457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015613e6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015613ef457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015613f6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b613f78614e87565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115613fb0579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000613ff98383614d2a565b90503373ffffffffffffffffffffffffffffffffffffffff82161461212357600080fd5b60608182601f01101561409157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561410257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561417457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561419357604051915060008252602082016040526141fb565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141cc5780518352602092830192016141b4565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600080600061421385856143c2565b509050600080614224888888612df0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561426957600080fd5b505afa15801561427d573d6000803e3d6000fd5b505050506040513d606081101561429357600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146142da5780826142dd565b81815b90999098509650505050505050565b600080841161435c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b60008311801561436c5750600082115b61437557600080fd5b600061438d6103e86143878688613342565b90613342565b905060006143a16103e561438786896131e0565b90506143b860018284816143b157fe5b0490614e60565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156143fe57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061443857828461443b565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661446057600080fd5b9250929050565b60008084116144d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156144e75750600082115b6144f057600080fd5b60006144fe856103e5613342565b9050600061450c8285613342565b9050600061452683614520886103e8613342565b90614e60565b905080828161453157fe5b04979650505050505050565b80600281900b8114610cae57600080fd5b6000806000805b84518110156145e35784818151811061456a57fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1685828151811061459457fe5b60200260200101516000015160020b02830192508481815181106145b457fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16820191508080600101915050614555565b508082816145ed57fe5b059250600082128015614608575080828161460457fe5b0715155b15611e7e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156146ad57600080fd5b505afa1580156146c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e59190615751565b50939750919550935050600161ffff84161191506147319050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615c14565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b815260040161476d9190615e2a565b60806040518083038186803b15801561478557600080fd5b505afa158015614799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147bd919061591c565b5050915091506147cb61333c565b63ffffffff168263ffffffff16146147e5578495506148f0565b60008361ffff1660018561ffff168761ffff1601038161480157fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016148429190615e39565b60806040518083038186803b15801561485a57600080fd5b505afa15801561486e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614892919061591c565b93505092509250806148d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890615bdd565b82860363ffffffff811683870360060b816148e757fe5b059a5050505050505b50505050915091565b60008063ffffffff831661496e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061499d57fe5b602002602001019063ffffffff16908163ffffffff16815250506000816001815181106149c657fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614a61578181015183820152602001614a49565b505050509050019250505060006040518083038186803b158015614a8457600080fd5b505afa158015614a98573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040908152811015614adf57600080fd5b8101908080516040519392919084640100000000821115614aff57600080fd5b908301906020820185811115614b1457600080fd5b8251866020820283011164010000000082111715614b3157600080fd5b82525081516020918201928201910280838360005b83811015614b5e578181015183820152602001614b46565b5050505090500160405260200180516040519392919084640100000000821115614b8757600080fd5b908301906020820185811115614b9c57600080fd5b8251866020820283011164010000000082111715614bb957600080fd5b82525081516020918201928201910280838360005b83811015614be6578181015183820152602001614bce565b5050505090500160405250505091509150600082600081518110614c0657fe5b602002602001015183600181518110614c1b57fe5b6020026020010151039050600082600081518110614c3557fe5b602002602001015183600181518110614c4a57fe5b60200260200101510390508763ffffffff168260060b81614c6757fe5b05965060008260060b128015614c9157508763ffffffff168260060b81614c8a57fe5b0760060b15155b15614cbc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614d1a57fe5b0496505050505050509250929050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d6c57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b8082018281101561212357600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610cae81615f8e565b60008083601f840112614ec3578182fd5b50813567ffffffffffffffff811115614eda578182fd5b602083019150836020808302850101111561446057600080fd5b600082601f830112614f04578081fd5b81356020614f19614f1483615f04565b615ee0565b8281528181019085830183850287018401881015614f35578586fd5b855b85811015614f705781356fffffffffffffffffffffffffffffffff81168114614f5e578788fd5b84529284019290840190600101614f37565b5090979650505050505050565b80518015158114610cae57600080fd5b600082601f830112614f9d578081fd5b8135614fab614f1482615f22565b818152846020838601011115614fbf578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610cae57600080fd5b805161ffff81168114610cae57600080fd5b803562ffffff81168114610cae57600080fd5b8035610cae81615fbf565b600060208284031215615038578081fd5b813561504381615f8e565b9392505050565b6000806040838503121561505c578081fd5b823561506781615f8e565b946020939093013593505050565b600080600060608486031215615089578081fd5b833561509481615f8e565b92506020840135915060408401356150ab81615f8e565b809150509250925092565b600080600080600060a086880312156150cd578283fd5b85356150d881615f8e565b94506020860135935060408601356150ef81615f8e565b925060608601359150608086013561510681615f8e565b809150509295509295909350565b60008060008060808587031215615129578182fd5b843561513481615f8e565b93506020850135925060408501359150606085013561515281615f8e565b939692955090935050565b60008060008060008060c08789031215615175578384fd5b863561518081615f8e565b95506020870135945060408701359350606087013561519e81615fd1565b9598949750929560808101359460a0909101359350915050565b600080602083850312156151ca578182fd5b823567ffffffffffffffff8111156151e0578283fd5b6151ec85828601614eb2565b90969095509350505050565b6000806000806080858703121561520d578182fd5b843567ffffffffffffffff80821115615224578384fd5b818701915087601f830112615237578384fd5b81356020615247614f1483615f04565b82815281810190858301885b8581101561527c5761526a8e8684358b0101614f8d565b84529284019290840190600101615253565b50909950505088013592505080821115615294578384fd5b506152a187828801614ef4565b9350506152b060408601615009565b91506152be6060860161501c565b905092959194509250565b6000602082840312156152da578081fd5b61504382614f7d565b6000806000604084860312156152f7578081fd5b83359250602084013567ffffffffffffffff811115615314578182fd5b61532086828701614eb2565b9497909650939450505050565b60006020828403121561533e578081fd5b813567ffffffffffffffff811115615354578182fd5b613d4684828501614f8d565b600080600060608486031215615374578081fd5b833567ffffffffffffffff81111561538a578182fd5b61539686828701614f8d565b9350506153a560208501615009565b915060408401356150ab81615fbf565b6000602082840312156153c6578081fd5b813561504381615fb0565b600080604083850312156153e3578182fd5b505080516020909101519092909150565b60008060008060608587031215615409578182fd5b8435935060208501359250604085013567ffffffffffffffff8082111561542e578384fd5b818701915087601f830112615441578384fd5b81358181111561544f578485fd5b886020828501011115615460578485fd5b95989497505060200194505050565b600060208284031215615480578081fd5b815167ffffffffffffffff811115615496578182fd5b8201601f810184136154a6578182fd5b80516154b4614f1482615f22565b8181528560208385010111156154c8578384fd5b610f26826020830160208601615f62565b6000602082840312156154ea578081fd5b813567ffffffffffffffff80821115615501578283fd5b9083019060808286031215615514578283fd5b60405160808101818110838211171561552957fe5b60405282358281111561553a578485fd5b61554687828601614f8d565b8252506020830135915061555982615f8e565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e08284031215615590578081fd5b60405160e0810181811067ffffffffffffffff821117156155ad57fe5b6040526155b983614ea7565b81526155c760208401614ea7565b60208201526155d860408401615009565b60408201526155e960608401614ea7565b60608201526080830135608082015260a083013560a082015261560e60c08401614ea7565b60c08201529392505050565b60006020828403121561562b578081fd5b813567ffffffffffffffff811115615641578182fd5b820160808185031215615043578182fd5b600060e08284031215610871578081fd5b600060a08284031215610871578081fd5b60006101008284031215610871578081fd5b600060208284031215615697578081fd5b813567ffffffffffffffff808211156156ae578283fd5b90830190604082860312156156c1578283fd5b6040516040810181811083821117156156d657fe5b6040528235828111156156e7578485fd5b6156f387828601614f8d565b8252506020830135925061570683615f8e565b6020810192909252509392505050565b60008060006060848603121561572a578081fd5b61573384614fd9565b925061574160208501614fd9565b915060408401516150ab81615fbf565b600080600080600080600060e0888a03121561576b578485fd5b875161577681615f8e565b602089015190975061578781615fb0565b955061579560408901614ff7565b94506157a360608901614ff7565b93506157b160808901614ff7565b925060a08801516157c181615fd1565b91506157cf60c08901614f7d565b905092959891949750929550565b6000602082840312156157ee578081fd5b61504382615009565b600060208284031215615808578081fd5b5035919050565b600060208284031215615820578081fd5b5051919050565b60008060408385031215615839578182fd5b82359150602083013561584b81615f8e565b809150509250929050565b6000806000806080858703121561586b578182fd5b84359350602085013561587d81615f8e565b925060408501359150606085013561515281615f8e565b6000806000606084860312156158a8578081fd5b833592506020840135915060408401356150ab81615f8e565b6000806000806000608086880312156158d8578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158fc578384fd5b61590888828901614eb2565b909450925050606086013561510681615f8e565b60008060008060808587031215615931578182fd5b845161593c81615fbf565b8094505060208501518060060b8114615953578283fd5b604086015190935061596481615f8e565b91506152be60608601614f7d565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526159a4816020860160208601615f62565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a6e818460208701615f62565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615b0760a083018461598c565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615ba9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b9785835161598c565b94509285019290850190600101615b5d565b5092979650505050505050565b600060208252615043602083018461598c565b6020810160058310615bd757fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d48828451615972565b6020830151615d5a6020840182615972565b506040830151615d6d60408401826159dd565b506060830151615d8060608401826159d6565b506080830151615d9360808401826159d6565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615dd182850182615972565b505061014092830151919092015290565b600060208252825160406020840152615dfe606084018261598c565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff84166040830152608060608301526143b8608083018461598c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615eb1578283fd5b83018035915067ffffffffffffffff821115615ecb578283fd5b60200191503681900382131561446057600080fd5b60405181810167ffffffffffffffff81118282101715615efc57fe5b604052919050565b600067ffffffffffffffff821115615f1857fe5b5060209081020190565b600067ffffffffffffffff821115615f3657fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f7d578181015183820152602001615f65565b83811115610d4a5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff811681146114d757600080fd5b8060020b81146114d757600080fd5b63ffffffff811681146114d757600080fd5b60ff811681146114d757600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2BF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB3FDD50 GT PUSH2 0x16E JUMPI DUP1 PUSH4 0xDEE00F35 GT PUSH2 0xCB JUMPI DUP1 PUSH4 0xEFDEED8E GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xF25801A7 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xF25801A7 EQ PUSH2 0x6A9 JUMPI DUP1 PUSH4 0xF2D5D56B EQ PUSH2 0x6C9 JUMPI DUP1 PUSH4 0xF3995C67 EQ PUSH2 0x6DC JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xEFDEED8E EQ PUSH2 0x676 JUMPI DUP1 PUSH4 0xF100B205 EQ PUSH2 0x696 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xE0E189A0 GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0xE0E189A0 EQ PUSH2 0x63D JUMPI DUP1 PUSH4 0xE4A40545 EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0xE90A182F EQ PUSH2 0x663 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xDEE00F35 EQ PUSH2 0x5FD JUMPI DUP1 PUSH4 0xDF2AB5BB EQ PUSH2 0x62A JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xBC122A54 GT PUSH2 0x122 JUMPI DUP1 PUSH4 0xC45A0155 GT PUSH2 0x107 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x5CD JUMPI DUP1 PUSH4 0xC53AF304 EQ PUSH2 0x5E2 JUMPI DUP1 PUSH4 0xCAB372CE EQ PUSH2 0x5EA JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xBC122A54 EQ PUSH2 0x5A7 JUMPI DUP1 PUSH4 0xC2E3140A EQ PUSH2 0x5BA JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xACF8A4ED GT PUSH2 0x153 JUMPI DUP1 PUSH4 0xACF8A4ED EQ PUSH2 0x56E JUMPI DUP1 PUSH4 0xB3A2AF13 EQ PUSH2 0x581 JUMPI DUP1 PUSH4 0xB858183F EQ PUSH2 0x594 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0xAB3FDD50 EQ PUSH2 0x548 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x55B JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x4F04A0DB GT PUSH2 0x21C JUMPI DUP1 PUSH4 0x791B98BC GT PUSH2 0x1D0 JUMPI DUP1 PUSH4 0x97E87D9D GT PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x97E87D9D EQ PUSH2 0x50F JUMPI DUP1 PUSH4 0xA4A78F0C EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0xA98CE37F EQ PUSH2 0x535 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x791B98BC EQ PUSH2 0x4E5 JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0x4FA JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x571AC8B0 GT PUSH2 0x201 JUMPI DUP1 PUSH4 0x571AC8B0 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x5AE401DC EQ PUSH2 0x4BF JUMPI DUP1 PUSH4 0x639D71A9 EQ PUSH2 0x4D2 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x4F04A0DB EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x5023B4DF EQ PUSH2 0x499 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x3068C554 GT PUSH2 0x273 JUMPI DUP1 PUSH4 0x42712A67 GT PUSH2 0x258 JUMPI DUP1 PUSH4 0x42712A67 EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x4659A494 EQ PUSH2 0x451 JUMPI DUP1 PUSH4 0x472B43F3 EQ PUSH2 0x464 JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x3068C554 EQ PUSH2 0x40B JUMPI DUP1 PUSH4 0x3BEB26C4 EQ PUSH2 0x41E JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x11C17848 GT PUSH2 0x2A4 JUMPI DUP1 PUSH4 0x11C17848 EQ PUSH2 0x3AB JUMPI DUP1 PUSH4 0x11ED56C9 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x1F0464D1 EQ PUSH2 0x3EB JUMPI PUSH2 0x36A JUMP JUMPDEST DUP1 PUSH4 0x4E45AAF EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x9B81346 EQ PUSH2 0x398 JUMPI PUSH2 0x36A JUMP JUMPDEST CALLDATASIZE PUSH2 0x36A JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x368 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F742053414D42000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x382 PUSH2 0x37D CALLDATASIZE PUSH1 0x4 PUSH2 0x557F JUMP JUMPDEST PUSH2 0x6EF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x5E39 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x382 PUSH2 0x3A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x561A JUMP JUMPDEST PUSH2 0x877 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x368 PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x53F4 JUMP JUMPDEST PUSH2 0x957 JUMP JUMPDEST PUSH2 0x3DE PUSH2 0x3D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x5674 JUMP JUMPDEST PUSH2 0xAA7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x5BB6 JUMP JUMPDEST PUSH2 0x3FE PUSH2 0x3F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x52E3 JUMP JUMPDEST PUSH2 0xCB3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x5B38 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x419 CALLDATASIZE PUSH1 0x4 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0xD3D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x368 PUSH2 0x439 CALLDATASIZE PUSH1 0x4 PUSH2 0x57F7 JUMP JUMPDEST PUSH2 0xD50 JUMP JUMPDEST PUSH2 0x382 PUSH2 0x44C CALLDATASIZE PUSH1 0x4 PUSH2 0x58C1 JUMP JUMPDEST PUSH2 0xD55 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x515D JUMP JUMPDEST PUSH2 0xF2F JUMP JUMPDEST PUSH2 0x382 PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x58C1 JUMP JUMPDEST PUSH2 0xFE3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1397 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x5A78 JUMP JUMPDEST PUSH2 0x382 PUSH2 0x4A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5652 JUMP JUMPDEST PUSH2 0x13BB JUMP JUMPDEST PUSH2 0x368 PUSH2 0x4BA CALLDATASIZE PUSH1 0x4 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x14A4 JUMP JUMPDEST PUSH2 0x3FE PUSH2 0x4CD CALLDATASIZE PUSH1 0x4 PUSH2 0x52E3 JUMP JUMPDEST PUSH2 0x14DA JUMP JUMPDEST PUSH2 0x368 PUSH2 0x4E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x1553 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1567 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x158B JUMP JUMPDEST PUSH2 0x368 PUSH2 0x51D CALLDATASIZE PUSH1 0x4 PUSH2 0x5856 JUMP JUMPDEST PUSH2 0x15AF JUMP JUMPDEST PUSH2 0x368 PUSH2 0x530 CALLDATASIZE PUSH1 0x4 PUSH2 0x515D JUMP JUMPDEST PUSH2 0x17C7 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x543 CALLDATASIZE PUSH1 0x4 PUSH2 0x5827 JUMP JUMPDEST PUSH2 0x189C JUMP JUMPDEST PUSH2 0x368 PUSH2 0x556 CALLDATASIZE PUSH1 0x4 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x1A62 JUMP JUMPDEST PUSH2 0x3FE PUSH2 0x569 CALLDATASIZE PUSH1 0x4 PUSH2 0x51B8 JUMP JUMPDEST PUSH2 0x1AA0 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x57C CALLDATASIZE PUSH1 0x4 PUSH2 0x57F7 JUMP JUMPDEST PUSH2 0x1BFA JUMP JUMPDEST PUSH2 0x3DE PUSH2 0x58F CALLDATASIZE PUSH1 0x4 PUSH2 0x532D JUMP JUMPDEST PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x382 PUSH2 0x5A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x54D9 JUMP JUMPDEST PUSH2 0x1CC2 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x5B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x5894 JUMP JUMPDEST PUSH2 0x1E85 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x5C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x515D JUMP JUMPDEST PUSH2 0x1E91 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1F46 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x1F6A JUMP JUMPDEST PUSH2 0x368 PUSH2 0x5F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x1A76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x61D PUSH2 0x618 CALLDATASIZE PUSH1 0x4 PUSH2 0x504A JUMP JUMPDEST PUSH2 0x1F7C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x5BC9 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x638 CALLDATASIZE PUSH1 0x4 PUSH2 0x5075 JUMP JUMPDEST PUSH2 0x2129 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x64B CALLDATASIZE PUSH1 0x4 PUSH2 0x50B6 JUMP JUMPDEST PUSH2 0x2240 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x65E CALLDATASIZE PUSH1 0x4 PUSH2 0x57F7 JUMP JUMPDEST PUSH2 0x23A6 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x671 CALLDATASIZE PUSH1 0x4 PUSH2 0x504A JUMP JUMPDEST PUSH2 0x2422 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x682 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x368 PUSH2 0x691 CALLDATASIZE PUSH1 0x4 PUSH2 0x51F8 JUMP JUMPDEST PUSH2 0x2431 JUMP JUMPDEST PUSH2 0x3DE PUSH2 0x6A4 CALLDATASIZE PUSH1 0x4 PUSH2 0x5663 JUMP JUMPDEST PUSH2 0x2483 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x368 PUSH2 0x6C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x5360 JUMP JUMPDEST PUSH2 0x2523 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x6D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x504A JUMP JUMPDEST PUSH2 0x2574 JUMP JUMPDEST PUSH2 0x368 PUSH2 0x6EA CALLDATASIZE PUSH1 0x4 PUSH2 0x515D JUMP JUMPDEST PUSH2 0x2580 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x80 ADD MLOAD EQ ISZERO PUSH2 0x7AC JUMPI POP DUP2 MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x756 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x76E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x782 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7A6 SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE JUMPDEST PUSH2 0x828 DUP4 PUSH1 0x80 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x40 ADD MLOAD DUP11 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x7EA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH2 0x809 JUMPI CALLER PUSH2 0x80B JUMP JUMPDEST ADDRESS JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE PUSH2 0x2618 JUMP JUMPDEST SWAP2 POP DUP3 PUSH1 0xA0 ADD MLOAD DUP3 LT ISZERO PUSH2 0x871 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5CB9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8EB PUSH1 0x40 DUP4 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0x890 SWAP1 PUSH1 0x20 DUP7 ADD PUSH2 0x5027 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SWAP1 DUP1 PUSH2 0x8A8 DUP9 DUP1 PUSH2 0x5E7D JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP CALLER PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE PUSH2 0x27C9 JUMP JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH1 0x60 DUP3 ADD CALLDATALOAD DUP2 GT ISZERO PUSH2 0x92E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C4B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 SGT DUP1 PUSH2 0x966 JUMPI POP PUSH1 0x0 DUP4 SGT JUMPDEST PUSH2 0x96F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x97D DUP3 DUP5 ADD DUP5 PUSH2 0x5686 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x991 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x29B0 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x9C3 PUSH32 0x0 DUP5 DUP5 DUP5 PUSH2 0x29E1 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 SGT PUSH2 0xA04 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP10 PUSH2 0xA35 JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT DUP11 JUMPDEST SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0xA54 JUMPI PUSH2 0xA4F DUP6 DUP8 PUSH1 0x20 ADD MLOAD CALLER DUP5 PUSH2 0x29F7 JUMP JUMPDEST PUSH2 0xA9B JUMP JUMPDEST DUP6 MLOAD PUSH2 0xA5F SWAP1 PUSH2 0x2BD5 JUMP JUMPDEST ISZERO PUSH2 0xA84 JUMPI DUP6 MLOAD PUSH2 0xA6F SWAP1 PUSH2 0x2BDD JUMP JUMPDEST DUP7 MSTORE PUSH2 0xA7E DUP2 CALLER PUSH1 0x0 DUP10 PUSH2 0x27C9 JUMP JUMPDEST POP PUSH2 0xA9B JUMP JUMPDEST DUP1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0xA9B DUP5 DUP8 PUSH1 0x20 ADD MLOAD CALLER DUP5 PUSH2 0x29F7 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x160 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP1 PUSH2 0xCAB SWAP1 PUSH32 0x8831645600000000000000000000000000000000000000000000000000000000 SWAP1 DUP1 PUSH2 0xAEA PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB18 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB43 PUSH1 0x60 DUP8 ADD PUSH1 0x40 DUP9 ADD PUSH2 0x57DD JUMP JUMPDEST PUSH3 0xFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB5D PUSH1 0x80 DUP8 ADD PUSH1 0x60 DUP9 ADD PUSH2 0x53B5 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB75 PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x53B5 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD SWAP1 PUSH2 0xB95 SWAP1 PUSH2 0xB90 SWAP1 DUP9 ADD DUP9 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x2C12 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBB0 DUP7 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB90 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP2 MSTORE PUSH1 0xA0 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC0 DUP7 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0xBDA PUSH2 0x100 DUP8 ADD PUSH1 0xE0 DUP9 ADD PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC29 SWAP2 SWAP1 PUSH2 0x5D34 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x1C04 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH1 0x1 NUMBER SUB BLOCKHASH EQ PUSH2 0xD28 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426C6F636B686173680000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD32 DUP5 DUP5 PUSH2 0x1AA0 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD4A DUP5 DUP5 CALLER DUP6 DUP6 PUSH2 0x2240 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB5 PUSH32 0x0 DUP8 DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2CB7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDC1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP5 DUP2 GT ISZERO PUSH2 0xE05 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C4B JUMP JUMPDEST PUSH2 0xE9E DUP5 DUP5 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE15 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE2A SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST CALLER PUSH2 0xE98 PUSH32 0x0 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE5C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE71 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP10 DUP10 PUSH1 0x1 DUP2 DUP2 LT PUSH2 0xE7E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE93 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x2DF0 JUMP JUMPDEST DUP5 PUSH2 0x29F7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x1 EQ ISZERO PUSH2 0xEC5 JUMPI CALLER SWAP2 POP PUSH2 0xEE8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x2 EQ ISZERO PUSH2 0xEE8 JUMPI ADDRESS SWAP2 POP JUMPDEST PUSH2 0xF26 DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP3 POP PUSH2 0x2EDB SWAP2 POP POP JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8FCBAF0C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xFF DUP6 AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xE4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0x8FCBAF0C SWAP2 PUSH2 0x104 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA9B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH2 0x1099 JUMPI POP PUSH1 0x1 DUP5 DUP5 PUSH1 0x0 DUP2 PUSH2 0xFF9 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x100E SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1046 SWAP2 SWAP1 PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x105E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1096 SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST SWAP7 POP JUMPDEST PUSH2 0x1124 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x10A9 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x10BE SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP3 PUSH2 0x10C9 JUMPI CALLER PUSH2 0x10CB JUMP JUMPDEST ADDRESS JUMPDEST PUSH2 0x111E PUSH32 0x0 DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x10FC JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1111 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP11 DUP11 PUSH1 0x1 DUP2 DUP2 LT PUSH2 0xE7E JUMPI INVALID JUMPDEST DUP11 PUSH2 0x29F7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x1 EQ ISZERO PUSH2 0x114B JUMPI CALLER SWAP3 POP PUSH2 0x116E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x2 EQ ISZERO PUSH2 0x116E JUMPI ADDRESS SWAP3 POP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD DUP2 DUP2 LT PUSH2 0x119E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x11B3 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11EB SWAP2 SWAP1 PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1217 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x123B SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST SWAP1 POP PUSH2 0x127B DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 SWAP3 POP PUSH2 0x2EDB SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1350 DUP2 DUP8 DUP8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD DUP2 DUP2 LT PUSH2 0x12AD JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x12C2 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12FA SWAP2 SWAP1 PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1326 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x134A SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST SWAP1 PUSH2 0x31E0 JUMP JUMPDEST SWAP3 POP DUP7 DUP4 LT ISZERO PUSH2 0x138C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5CB9 JUMP JUMPDEST POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1464 PUSH1 0x80 DUP4 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0x13D4 SWAP1 PUSH1 0x60 DUP7 ADD PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x13E4 PUSH1 0xE0 DUP7 ADD PUSH1 0xC0 DUP8 ADD PUSH2 0x5027 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1402 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST PUSH2 0x1412 PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x57DD JUMP JUMPDEST PUSH2 0x141F PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x5027 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1431 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x27C9 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0xA0 ADD CALLDATALOAD DUP2 GT ISZERO PUSH2 0x92E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C4B JUMP JUMPDEST PUSH2 0x14CE DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31F0 JUMP JUMPDEST PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH2 0x14E6 PUSH2 0x333C JUMP JUMPDEST GT ISZERO PUSH2 0xD28 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73616374696F6E20746F6F206F6C6400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x155E DUP2 PUSH1 0x0 PUSH2 0x31F0 JUMP JUMPDEST PUSH2 0x14A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x15C0 JUMPI POP PUSH1 0x64 DUP3 GT ISZERO JUMPDEST PUSH2 0x15C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1652 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1666 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x167C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP2 LT ISZERO PUSH2 0x16EF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E742053414D42000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x17C0 JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2E1A7D4D DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1768 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x177C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x2710 PUSH2 0x1798 DUP6 DUP5 PUSH2 0x3342 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x179F JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x17B2 JUMPI PUSH2 0x17B2 DUP4 DUP3 PUSH2 0x3366 JUMP JUMPDEST PUSH2 0x17BE DUP6 DUP3 DUP5 SUB PUSH2 0x3366 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 PUSH4 0xDD62ED3E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x185C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1870 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1886 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD LT ISZERO PUSH2 0x17BE JUMPI PUSH2 0x17BE DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0xF2F JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1925 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1939 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x194F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x19C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E742053414D42000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1A5D JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2E1A7D4D DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1A5D DUP3 DUP3 PUSH2 0x3366 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1A6D DUP2 PUSH1 0x0 PUSH2 0x31F0 JUMP JUMPDEST PUSH2 0x1A76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14CE DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31F0 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1AB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1AED JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1AD8 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1BF3 JUMPI PUSH1 0x0 DUP1 ADDRESS DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x1B0B JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x1B1D SWAP2 SWAP1 PUSH2 0x5E7D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B2B SWAP3 SWAP2 SWAP1 PUSH2 0x5A4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B66 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B6B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x1BD1 JUMPI PUSH1 0x44 DUP2 MLOAD LT ISZERO PUSH2 0x1B84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD SWAP1 POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1B9E SWAP2 SWAP1 PUSH2 0x546F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x5BB6 JUMP JUMPDEST DUP1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1BDE JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x1AF3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x14D7 DUP2 CALLER PUSH2 0x189C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x1C4D SWAP2 SWAP1 PUSH2 0x5A5C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1C8A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP3 POP SWAP1 POP DUP1 PUSH2 0x871 JUMPI PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x1CA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1B9E SWAP2 SWAP1 PUSH2 0x546F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD EQ ISZERO PUSH2 0x1D93 JUMPI PUSH1 0x1 SWAP1 POP PUSH1 0x0 PUSH2 0x1CE5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x29B0 JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1D3C SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D8C SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE POP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1DA0 JUMPI CALLER PUSH2 0x1DA2 JUMP JUMPDEST ADDRESS JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x0 PUSH2 0x1DB4 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x2BD5 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E0D DUP6 PUSH1 0x40 ADD MLOAD DUP3 PUSH2 0x1DCD JUMPI DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x1DCF JUMP JUMPDEST ADDRESS JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1DE9 DUP12 PUSH1 0x0 ADD MLOAD PUSH2 0x34B4 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x2618 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE DUP1 ISZERO PUSH2 0x1E2D JUMPI DUP5 MLOAD ADDRESS SWAP3 POP PUSH2 0x1E26 SWAP1 PUSH2 0x2BDD JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1E3A JUMP JUMPDEST DUP5 PUSH1 0x40 ADD MLOAD SWAP4 POP POP PUSH2 0x1E40 JUMP JUMPDEST POP PUSH2 0x1DA5 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD DUP4 LT ISZERO PUSH2 0x1E7E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5CB9 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A5D DUP4 CALLER DUP5 DUP5 PUSH2 0x15AF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD DUP7 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 PUSH4 0xDD62ED3E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD LT ISZERO PUSH2 0x17BE JUMPI PUSH2 0x17BE DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x2580 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST SELFBALANCE ISZERO PUSH2 0x1F7A JUMPI PUSH2 0x1F7A CALLER SELFBALANCE PUSH2 0x3366 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E ADDRESS PUSH32 0x0 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FDA SWAP3 SWAP2 SWAP1 PUSH2 0x5A99 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2006 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x202A SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST LT PUSH2 0x2037 JUMPI POP PUSH1 0x0 PUSH2 0x2123 JUMP JUMPDEST PUSH2 0x2061 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31F0 JUMP JUMPDEST ISZERO PUSH2 0x206E JUMPI POP PUSH1 0x1 PUSH2 0x2123 JUMP JUMPDEST PUSH2 0x2098 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31F0 JUMP JUMPDEST ISZERO PUSH2 0x20A5 JUMPI POP PUSH1 0x2 PUSH2 0x2123 JUMP JUMPDEST PUSH2 0x20B0 DUP4 PUSH1 0x0 PUSH2 0x31F0 JUMP JUMPDEST PUSH2 0x20B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x20E3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x31F0 JUMP JUMPDEST ISZERO PUSH2 0x20F0 JUMPI POP PUSH1 0x3 PUSH2 0x2123 JUMP JUMPDEST PUSH2 0x211A DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH2 0x31F0 JUMP JUMPDEST ISZERO PUSH2 0x36A JUMPI POP PUSH1 0x4 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x222F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420746F6B656E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0xD4A JUMPI PUSH2 0xD4A DUP5 DUP4 DUP4 PUSH2 0x34C3 JUMP JUMPDEST PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x2251 JUMPI POP PUSH1 0x64 DUP3 GT ISZERO JUMPDEST PUSH2 0x225A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP2 LT ISZERO PUSH2 0x2360 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420746F6B656E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x17BE JUMPI PUSH1 0x0 PUSH2 0x2710 PUSH2 0x2375 DUP4 DUP7 PUSH2 0x3342 JUMP JUMPDEST DUP2 PUSH2 0x237C JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2390 JUMPI PUSH2 0x2390 DUP8 DUP5 DUP4 PUSH2 0x34C3 JUMP JUMPDEST PUSH2 0x239D DUP8 DUP7 DUP4 DUP6 SUB PUSH2 0x34C3 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x240E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x242D DUP3 DUP3 CALLER PUSH2 0x2129 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x243F DUP7 DUP7 DUP6 PUSH2 0x3698 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x17BE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C82 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCAB PUSH4 0x219F5D17 PUSH1 0xE0 SHL PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH1 0x40 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x24BB DUP7 PUSH1 0x0 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB90 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x24D6 DUP7 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB90 SWAP2 SWAP1 PUSH2 0x5027 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x60 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x80 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC29 SWAP2 SWAP1 PUSH2 0x5CF0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2530 DUP6 DUP5 PUSH2 0x38AB JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x17C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C82 JUMP JUMPDEST PUSH2 0x242D DUP3 CALLER ADDRESS DUP5 PUSH2 0x3B33 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xFF DUP6 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0xD505ACCF SWAP2 PUSH1 0xE4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x1 EQ ISZERO PUSH2 0x2641 JUMPI CALLER SWAP4 POP PUSH2 0x2664 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x2 EQ ISZERO PUSH2 0x2664 JUMPI ADDRESS SWAP4 POP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2676 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x29B0 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP1 DUP5 AND LT PUSH1 0x0 DUP1 PUSH2 0x26A7 DUP7 DUP7 DUP7 PUSH2 0x3D10 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP12 DUP6 PUSH2 0x26CD DUP16 PUSH2 0x3D4E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND ISZERO PUSH2 0x26EF JUMPI DUP14 PUSH2 0x2715 JUMP JUMPDEST DUP8 PUSH2 0x270E JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x2715 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2726 SWAP2 SWAP1 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2755 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5AC0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x276E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2782 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27A6 SWAP2 SWAP1 PUSH2 0x53D1 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP3 PUSH2 0x27B5 JUMPI DUP2 PUSH2 0x27B7 JUMP JUMPDEST DUP1 JUMPDEST PUSH1 0x0 SUB SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x1 EQ ISZERO PUSH2 0x27F2 JUMPI CALLER SWAP4 POP PUSH2 0x2815 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x2 EQ ISZERO PUSH2 0x2815 JUMPI ADDRESS SWAP4 POP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2827 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x29B0 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP1 DUP4 AND LT PUSH1 0x0 DUP1 PUSH2 0x2858 DUP6 DUP8 DUP7 PUSH2 0x3D10 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP12 DUP6 PUSH2 0x287E DUP16 PUSH2 0x3D4E JUMP JUMPDEST PUSH1 0x0 SUB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND ISZERO PUSH2 0x28A3 JUMPI DUP14 PUSH2 0x28C9 JUMP JUMPDEST DUP8 PUSH2 0x28C2 JUMPI PUSH20 0xFFFD8963EFD1FC6A506488495D951D5263988D25 PUSH2 0x28C9 JUMP JUMPDEST PUSH5 0x1000276A4 JUMPDEST DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x28DA SWAP2 SWAP1 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2909 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5AC0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2922 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2936 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x295A SWAP2 SWAP1 PUSH2 0x53D1 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP4 PUSH2 0x296F JUMPI DUP2 DUP4 PUSH1 0x0 SUB PUSH2 0x2975 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x0 SUB JUMPDEST SWAP1 SWAP9 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH2 0x29A1 JUMPI DUP12 DUP2 EQ PUSH2 0x29A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x29BE DUP5 DUP3 PUSH2 0x3D80 JUMP JUMPDEST SWAP3 POP PUSH2 0x29CB DUP5 PUSH1 0x14 PUSH2 0x3E80 JUMP JUMPDEST SWAP1 POP PUSH2 0x29D8 DUP5 PUSH1 0x17 PUSH2 0x3D80 JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF26 DUP6 PUSH2 0x29F2 DUP7 DUP7 DUP7 PUSH2 0x3F70 JUMP JUMPDEST PUSH2 0x3FED JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 ISZERO PUSH2 0x2A52 JUMPI POP DUP1 SELFBALANCE LT ISZERO JUMPDEST ISZERO PUSH2 0x2B9B JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2ABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2AD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2B69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2B7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD4A SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ ISZERO PUSH2 0x2BC9 JUMPI PUSH2 0x2BC4 DUP5 DUP4 DUP4 PUSH2 0x34C3 JUMP JUMPDEST PUSH2 0xD4A JUMP JUMPDEST PUSH2 0xD4A DUP5 DUP5 DUP5 DUP5 PUSH2 0x3B33 JUMP JUMPDEST MLOAD PUSH1 0x42 GT ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0xCAB SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x401D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2C67 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5A78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCAB SWAP2 SWAP1 PUSH2 0x580F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP3 MLOAD LT ISZERO PUSH2 0x2CC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2CE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2D0A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 DUP2 PUSH1 0x1 DUP4 MLOAD SUB DUP2 MLOAD DUP2 LT PUSH2 0x2D1E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD JUMPDEST DUP1 ISZERO PUSH2 0xD35 JUMPI PUSH1 0x0 DUP1 PUSH2 0x2D8B DUP8 DUP7 PUSH1 0x1 DUP7 SUB DUP2 MLOAD DUP2 LT PUSH2 0x2D6A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x2D7E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4204 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x2DAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2D9E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 PUSH2 0x42EC JUMP JUMPDEST DUP5 PUSH1 0x1 DUP6 SUB DUP2 MLOAD DUP2 LT PUSH2 0x2DBC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD PUSH2 0x2D4E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2DFF DUP6 DUP6 PUSH2 0x43C2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 DUP6 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP6 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0x68 DUP5 ADD MSTORE SWAP11 SWAP1 SWAP5 SHL SWAP1 SWAP4 AND PUSH1 0x69 DUP5 ADD MSTORE PUSH1 0x7D DUP4 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH32 0x400E13FC6C59224F20228F0C0561806856AC34B7318F337F8012707C880C351F PUSH1 0x9D DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP3 ADD SWAP1 SWAP8 MSTORE DUP1 MLOAD SWAP7 ADD SWAP6 SWAP1 SWAP6 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP4 MLOAD SUB DUP2 LT ISZERO PUSH2 0x1A5D JUMPI PUSH1 0x0 DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2EF9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x2F10 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x2F28 DUP4 DUP4 PUSH2 0x43C2 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x2F58 PUSH32 0x0 DUP6 DUP6 PUSH2 0x2DF0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2FA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FBA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FDE SWAP2 SWAP1 PUSH2 0x5716 JUMP JUMPDEST POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3040 JUMPI DUP3 DUP5 PUSH2 0x3043 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3084 DUP3 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12FA SWAP2 SWAP1 PUSH2 0x5A78 JUMP JUMPDEST SWAP6 POP PUSH2 0x3091 DUP7 DUP4 DUP4 PUSH2 0x4467 JUMP JUMPDEST SWAP5 POP POP POP POP POP PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x30D5 JUMPI DUP3 PUSH1 0x0 PUSH2 0x30D9 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x2 DUP13 MLOAD SUB DUP11 LT PUSH2 0x30F0 JUMPI DUP11 PUSH2 0x3131 JUMP JUMPDEST PUSH2 0x3131 PUSH32 0x0 DUP10 DUP15 DUP14 PUSH1 0x2 ADD DUP2 MLOAD DUP2 LT PUSH2 0x3124 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2DF0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH32 0x22C0D9F00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 PUSH4 0x22C0D9F SWAP1 PUSH2 0x3199 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x24 DUP2 ADD PUSH2 0x5E42 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x31C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP12 ADD SWAP11 POP PUSH2 0x2EDE SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH32 0x0 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x3247 SWAP3 SWAP2 SWAP1 PUSH2 0x5B12 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE SWAP1 MLOAD PUSH2 0x32D0 SWAP2 SWAP1 PUSH2 0x5A5C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x330D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3312 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xF26 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xF26 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xF26 SWAP2 SWAP1 PUSH2 0x52C9 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x335D JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x335A JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x33DD JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x33A0 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x343F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3444 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x1A5D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354450000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0xCAB DUP3 PUSH1 0x0 PUSH1 0x2B PUSH2 0x401D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 DUP6 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3598 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x355B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x35FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x35FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x362D JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x362D JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x362A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x17C0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 MLOAD DUP6 MLOAD EQ PUSH2 0x36A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x36C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x36FD JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x36EA PUSH2 0x4E70 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x36E2 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x371A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3754 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x3741 PUSH2 0x4E70 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x3739 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x3884 JUMPI PUSH1 0x0 DUP1 PUSH2 0x3783 DUP11 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3775 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH2 0x38AB JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3790 DUP3 PUSH2 0x453D JUMP JUMPDEST DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x379C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP PUSH2 0x37BD DUP2 PUSH2 0x453D JUMP JUMPDEST DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x37C9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x37ED JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3801 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3843 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3857 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x375A JUMP JUMPDEST POP PUSH2 0x388E DUP3 PUSH2 0x454E JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP4 POP PUSH2 0x389C DUP2 PUSH2 0x454E JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP3 POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x38BA DUP7 PUSH2 0x4636 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3AD8 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x38D6 DUP12 PUSH2 0x29B0 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x38E9 DUP5 DUP5 DUP5 PUSH2 0x3D10 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP14 AND PUSH2 0x3912 JUMPI PUSH2 0x3902 DUP4 PUSH2 0x4661 JUMP JUMPDEST PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND SWAP4 POP SWAP1 SIGNEXTEND SWAP1 POP PUSH2 0x39B4 JUMP JUMPDEST PUSH2 0x391C DUP4 DUP15 PUSH2 0x48F9 JUMP JUMPDEST DUP2 PUSH1 0x2 SIGNEXTEND SWAP2 POP POP DUP1 SWAP3 POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x396D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3981 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39A5 SWAP2 SWAP1 PUSH2 0x5751 JUMP JUMPDEST POP POP POP PUSH1 0x2 SWAP3 SWAP1 SWAP3 SIGNEXTEND SWAP4 POP POP POP POP JUMPDEST PUSH1 0x1 DUP10 SUB DUP8 EQ ISZERO PUSH2 0x39F5 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT SWAP10 POP PUSH2 0x3A04 JUMP JUMPDEST PUSH2 0x39FE DUP15 PUSH2 0x2BDD JUMP JUMPDEST SWAP14 POP DUP6 SWAP8 POP JUMPDEST PUSH1 0x0 DUP8 ISZERO DUP1 PUSH2 0x3AA5 JUMPI POP DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x3A75 JUMPI DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x3AA5 JUMP JUMPDEST DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3ABA JUMPI SWAP12 DUP3 ADD SWAP12 SWAP11 DUP2 ADD SWAP11 PUSH2 0x3AC5 JUMP JUMPDEST DUP3 DUP14 SUB SWAP13 POP DUP2 DUP13 SUB SWAP12 POP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 POP PUSH2 0x38C0 SWAP4 POP POP POP POP JUMP JUMPDEST POP DUP3 PUSH2 0x3B29 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MUL SWAP5 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 MUL SWAP4 POP JUMPDEST POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 DUP6 SWAP5 SWAP4 DUP11 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3C10 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3BD3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3C72 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3C77 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x3CA5 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x3CA5 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3CA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x17BE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5354460000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3D46 PUSH32 0x0 PUSH2 0x3D41 DUP7 DUP7 DUP7 PUSH2 0x3F70 JUMP JUMPDEST PUSH2 0x4D2A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x3D7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x3DF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x3E67 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x3EF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x3F67 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3F78 PUSH2 0x4E87 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH2 0x3FB0 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH3 0xFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF9 DUP4 DUP4 PUSH2 0x4D2A JUMP JUMPDEST SWAP1 POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0x4091 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0x4102 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0x4174 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x4193 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x41FB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x41CC JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x41B4 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4213 DUP6 DUP6 PUSH2 0x43C2 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x4224 DUP9 DUP9 DUP9 PUSH2 0x2DF0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x427D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4293 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x42DA JUMPI DUP1 DUP3 PUSH2 0x42DD JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x435C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F4F55545055545F414D4F554E54000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x436C JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x4375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x438D PUSH2 0x3E8 PUSH2 0x4387 DUP7 DUP9 PUSH2 0x3342 JUMP JUMPDEST SWAP1 PUSH2 0x3342 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x43A1 PUSH2 0x3E5 PUSH2 0x4387 DUP7 DUP10 PUSH2 0x31E0 JUMP JUMPDEST SWAP1 POP PUSH2 0x43B8 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0x43B1 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0x4E60 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x43FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x4438 JUMPI DUP3 DUP5 PUSH2 0x443B JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x4460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x44D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F494E5055545F414D4F554E5400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x44E7 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x44F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x44FE DUP6 PUSH2 0x3E5 PUSH2 0x3342 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x450C DUP3 DUP6 PUSH2 0x3342 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4526 DUP4 PUSH2 0x4520 DUP9 PUSH2 0x3E8 PUSH2 0x3342 JUMP JUMPDEST SWAP1 PUSH2 0x4E60 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0x4531 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0xCAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x45E3 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x456A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4594 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH1 0x2 SIGNEXTEND MUL DUP4 ADD SWAP3 POP DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x45B4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 ADD SWAP2 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x4555 JUMP JUMPDEST POP DUP1 DUP3 DUP2 PUSH2 0x45ED JUMPI INVALID JUMPDEST SDIV SWAP3 POP PUSH1 0x0 DUP3 SLT DUP1 ISZERO PUSH2 0x4608 JUMPI POP DUP1 DUP3 DUP2 PUSH2 0x4604 JUMPI INVALID JUMPDEST SMOD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1E7E JUMPI POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP2 SWAP1 POP JUMP JUMPDEST MLOAD PUSH1 0x17 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC SWAP1 SWAP2 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x46C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x46E5 SWAP2 SWAP1 PUSH2 0x5751 JUMP JUMPDEST POP SWAP4 SWAP8 POP SWAP2 SWAP6 POP SWAP4 POP POP PUSH1 0x1 PUSH2 0xFFFF DUP5 AND GT SWAP2 POP PUSH2 0x4731 SWAP1 POP JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5C14 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x476D SWAP2 SWAP1 PUSH2 0x5E2A JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4799 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x47BD SWAP2 SWAP1 PUSH2 0x591C JUMP JUMPDEST POP POP SWAP2 POP SWAP2 POP PUSH2 0x47CB PUSH2 0x333C JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP3 PUSH4 0xFFFFFFFF AND EQ PUSH2 0x47E5 JUMPI DUP5 SWAP6 POP PUSH2 0x48F0 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0xFFFF AND PUSH1 0x1 DUP6 PUSH2 0xFFFF AND DUP8 PUSH2 0xFFFF AND ADD SUB DUP2 PUSH2 0x4801 JUMPI INVALID JUMPDEST MOD SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4842 SWAP2 SWAP1 PUSH2 0x5E39 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x485A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x486E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4892 SWAP2 SWAP1 PUSH2 0x591C JUMP JUMPDEST SWAP4 POP POP SWAP3 POP SWAP3 POP DUP1 PUSH2 0x48D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP1 PUSH2 0x5BDD JUMP JUMPDEST DUP3 DUP7 SUB PUSH4 0xFFFFFFFF DUP2 AND DUP4 DUP8 SUB PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x48E7 JUMPI INVALID JUMPDEST SDIV SWAP11 POP POP POP POP POP POP JUMPDEST POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP4 AND PUSH2 0x496E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4250000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x499D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x49C6 JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH32 0x883BDBFD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP4 PUSH4 0x883BDBFD SWAP4 DUP9 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 DUP6 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP12 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4A61 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4A49 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A98 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 LT ISZERO PUSH2 0x4ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x4AFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x4B14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x4B31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B5E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B46 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x4B87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x4B9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x4BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4BE6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4BCE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4C06 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4C1B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4C35 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4C4A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x4C67 JUMPI INVALID JUMPDEST SDIV SWAP7 POP PUSH1 0x0 DUP3 PUSH1 0x6 SIGNEXTEND SLT DUP1 ISZERO PUSH2 0x4C91 JUMPI POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x4C8A JUMPI INVALID JUMPDEST SMOD PUSH1 0x6 SIGNEXTEND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x4CBC JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 ADD SWAP6 JUMPDEST PUSH4 0xFFFFFFFF DUP9 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 PUSH1 0x20 DUP4 SWAP1 SHL AND PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP2 PUSH2 0x4D1A JUMPI INVALID JUMPDEST DIV SWAP7 POP POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x4D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND DUP4 DUP6 ADD MSTORE PUSH3 0xFFFFFF AND PUSH1 0x60 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP5 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x80 DUP5 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 PUSH1 0xA0 DUP6 ADD MSTORE SWAP5 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 AND PUSH1 0xA1 DUP4 ADD MSTORE PUSH1 0xB5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x203C8EC649B23B7FAF9B73CCADFB1A67AF52A097119C82801F4947EC5DEB6C04 PUSH1 0xD5 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xF5 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xCAE DUP2 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4EC3 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4EDA JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x4460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4F04 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x4F19 PUSH2 0x4F14 DUP4 PUSH2 0x5F04 JUMP JUMPDEST PUSH2 0x5EE0 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP4 DUP6 MUL DUP8 ADD DUP5 ADD DUP9 LT ISZERO PUSH2 0x4F35 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x4F70 JUMPI DUP2 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4F5E JUMPI DUP8 DUP9 REVERT JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4F37 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xCAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4F9D JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4FAB PUSH2 0x4F14 DUP3 PUSH2 0x5F22 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x4FBF JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xCAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xCAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xCAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xCAE DUP2 PUSH2 0x5FBF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5038 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5043 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x505C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5067 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5089 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5094 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x50AB DUP2 PUSH2 0x5F8E JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x50CD JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x50D8 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x50EF DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x5106 DUP2 PUSH2 0x5F8E JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5129 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5134 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5152 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x5175 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x5180 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x519E DUP2 PUSH2 0x5FD1 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x51CA JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x51E0 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x51EC DUP6 DUP3 DUP7 ADD PUSH2 0x4EB2 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x520D JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5224 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5237 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x5247 PUSH2 0x4F14 DUP4 PUSH2 0x5F04 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP9 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x527C JUMPI PUSH2 0x526A DUP15 DUP7 DUP5 CALLDATALOAD DUP12 ADD ADD PUSH2 0x4F8D JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5253 JUMP JUMPDEST POP SWAP1 SWAP10 POP POP POP DUP9 ADD CALLDATALOAD SWAP3 POP POP DUP1 DUP3 GT ISZERO PUSH2 0x5294 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x52A1 DUP8 DUP3 DUP9 ADD PUSH2 0x4EF4 JUMP JUMPDEST SWAP4 POP POP PUSH2 0x52B0 PUSH1 0x40 DUP7 ADD PUSH2 0x5009 JUMP JUMPDEST SWAP2 POP PUSH2 0x52BE PUSH1 0x60 DUP7 ADD PUSH2 0x501C JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52DA JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5043 DUP3 PUSH2 0x4F7D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x52F7 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5314 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5320 DUP7 DUP3 DUP8 ADD PUSH2 0x4EB2 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x533E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5354 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x3D46 DUP5 DUP3 DUP6 ADD PUSH2 0x4F8D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5374 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x538A JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5396 DUP7 DUP3 DUP8 ADD PUSH2 0x4F8D JUMP JUMPDEST SWAP4 POP POP PUSH2 0x53A5 PUSH1 0x20 DUP6 ADD PUSH2 0x5009 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x50AB DUP2 PUSH2 0x5FBF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x53C6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5043 DUP2 PUSH2 0x5FB0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x53E3 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5409 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x542E JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5441 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x544F JUMPI DUP5 DUP6 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x5460 JUMPI DUP5 DUP6 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5480 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5496 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x54A6 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x54B4 PUSH2 0x4F14 DUP3 PUSH2 0x5F22 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x54C8 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0xF26 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x5F62 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x54EA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5501 JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x80 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x5514 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT DUP4 DUP3 GT OR ISZERO PUSH2 0x5529 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x553A JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x5546 DUP8 DUP3 DUP7 ADD PUSH2 0x4F8D JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP2 POP PUSH2 0x5559 DUP3 PUSH2 0x5F8E JUMP JUMPDEST DUP2 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5590 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x55AD JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE PUSH2 0x55B9 DUP4 PUSH2 0x4EA7 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x55C7 PUSH1 0x20 DUP5 ADD PUSH2 0x4EA7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x55D8 PUSH1 0x40 DUP5 ADD PUSH2 0x5009 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x55E9 PUSH1 0x60 DUP5 ADD PUSH2 0x4EA7 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x560E PUSH1 0xC0 DUP5 ADD PUSH2 0x4EA7 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x562B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5641 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 ADD PUSH1 0x80 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x5043 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x871 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x871 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x871 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5697 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x56AE JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x40 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x56C1 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT DUP4 DUP3 GT OR ISZERO PUSH2 0x56D6 JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x56E7 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x56F3 DUP8 DUP3 DUP7 ADD PUSH2 0x4F8D JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP3 POP PUSH2 0x5706 DUP4 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x572A JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5733 DUP5 PUSH2 0x4FD9 JUMP JUMPDEST SWAP3 POP PUSH2 0x5741 PUSH1 0x20 DUP6 ADD PUSH2 0x4FD9 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x50AB DUP2 PUSH2 0x5FBF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x576B JUMPI DUP5 DUP6 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x5776 DUP2 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD SWAP1 SWAP8 POP PUSH2 0x5787 DUP2 PUSH2 0x5FB0 JUMP JUMPDEST SWAP6 POP PUSH2 0x5795 PUSH1 0x40 DUP10 ADD PUSH2 0x4FF7 JUMP JUMPDEST SWAP5 POP PUSH2 0x57A3 PUSH1 0x60 DUP10 ADD PUSH2 0x4FF7 JUMP JUMPDEST SWAP4 POP PUSH2 0x57B1 PUSH1 0x80 DUP10 ADD PUSH2 0x4FF7 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH2 0x57C1 DUP2 PUSH2 0x5FD1 JUMP JUMPDEST SWAP2 POP PUSH2 0x57CF PUSH1 0xC0 DUP10 ADD PUSH2 0x4F7D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x57EE JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5043 DUP3 PUSH2 0x5009 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5808 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5820 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5839 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x584B DUP2 PUSH2 0x5F8E JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x586B JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x587D DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5152 DUP2 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x58A8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x50AB DUP2 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x58D8 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x58FC JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x5908 DUP9 DUP3 DUP10 ADD PUSH2 0x4EB2 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x5106 DUP2 PUSH2 0x5F8E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5931 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD PUSH2 0x593C DUP2 PUSH2 0x5FBF JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x20 DUP6 ADD MLOAD DUP1 PUSH1 0x6 SIGNEXTEND DUP2 EQ PUSH2 0x5953 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x5964 DUP2 PUSH2 0x5F8E JUMP JUMPDEST SWAP2 POP PUSH2 0x52BE PUSH1 0x60 DUP7 ADD PUSH2 0x4F7D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x59A4 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x5F62 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP1 MSTORE JUMP JUMPDEST PUSH3 0xFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x60 SWAP4 DUP5 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0xE8 SWAP4 SWAP1 SWAP4 SHL PUSH32 0xFFFFFF0000000000000000000000000000000000000000000000000000000000 AND PUSH1 0x14 DUP3 ADD MSTORE SWAP3 SHL AND PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x2B ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5A6E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x5F62 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x5B07 PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x598C JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x5BA9 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x5B97 DUP6 DUP4 MLOAD PUSH2 0x598C JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5B5D JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x5043 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x598C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x5 DUP4 LT PUSH2 0x5BD7 JUMPI INVALID JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F4E490000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4E454F0000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6F206D756368207265717565737465640000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH32 0x5444000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x13 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6F206C6974746C6520726563656976656400000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP3 ADD SWAP1 POP PUSH2 0x5D48 DUP3 DUP5 MLOAD PUSH2 0x5972 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x5D5A PUSH1 0x20 DUP5 ADD DUP3 PUSH2 0x5972 JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x5D6D PUSH1 0x40 DUP5 ADD DUP3 PUSH2 0x59DD JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x5D80 PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x59D6 JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x5D93 PUSH1 0x80 DUP5 ADD DUP3 PUSH2 0x59D6 JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD DUP2 DUP5 ADD MSTORE POP PUSH2 0x120 DUP1 DUP5 ADD MLOAD PUSH2 0x5DD1 DUP3 DUP6 ADD DUP3 PUSH2 0x5972 JUMP JUMPDEST POP POP PUSH2 0x140 SWAP3 DUP4 ADD MLOAD SWAP2 SWAP1 SWAP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE DUP3 MLOAD PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x5DFE PUSH1 0x60 DUP5 ADD DUP3 PUSH2 0x598C JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x43B8 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x598C JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x5EB1 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5ECB JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x4460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5EFC JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5F18 JUMPI INVALID JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5F36 JUMPI INVALID JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5F7D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5F65 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD4A JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "115:454:83:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;438:10:17;:18;452:4;438:18;;430:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;115:454:83;;;;;4303:907:52;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9025:462;;;;;;:::i;:::-;;:::i;1883:1319::-;;;;;;;;;;-1:-1:-1;1883:1319:52;;;;;:::i;:::-;;:::i;3197:1005:55:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;760:245:57:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:259:60:-;;;;;;:::i;:::-;;:::i;497:70:83:-;;;;;;;;;;-1:-1:-1;497:70:83;;;;;:::i;:::-;;:::i;3317:662:53:-;;;;;;:::i;:::-;;:::i;1325:289:20:-;;;;;;:::i;:::-;;:::i;2141:1131:53:-;;;;;;:::i;:::-;;:::i;288:48:56:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8292:693:52:-;;;;;;:::i;:::-;;:::i;1769:123:55:-;;;;;;:::i;:::-;;:::i;497:218:57:-;;;;;;:::i;:::-;;:::i;2111:170:55:-;;;;;;:::i;:::-;;:::i;378:49:56:-;;;;;;;;;;;;;:::i;420:38:16:-;;;;;;;;;;;;;:::i;610:686:18:-;;;;;;:::i;:::-;;:::i;1652:348:20:-;;;;;;:::i;:::-;;:::i;521:386:17:-;;;;;;:::i;:::-;;:::i;2323:182:55:-;;;;;;:::i;:::-;;:::i;308:653:15:-;;;;;;:::i;:::-;;:::i;424:123:59:-;;;;;;:::i;:::-;;:::i;2547:475:55:-;;;;;;:::i;:::-;;:::i;5250:1540:52:-;;;;;;:::i;:::-;;:::i;471:229:60:-;;;;;;:::i;:::-;;:::i;973:314:20:-;;;;;;:::i;:::-;;:::i;328:41:16:-;;;;;;;;;;;;;:::i;1362:160:17:-;;;:::i;1934:135:55:-;;;;;;:::i;:::-;;:::i;908:819::-;;;;;;;;;;-1:-1:-1;908:819:55;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;952:365:17:-;;;;;;:::i;:::-;;:::i;1348:678:18:-;;;;;;:::i;:::-;;:::i;600:110:59:-;;;;;;:::i;:::-;;:::i;763:145::-;;;;;;:::i;:::-;;:::i;7824:442:58:-;;;;;;;;;;-1:-1:-1;7824:442:58;;;;;:::i;:::-;;:::i;4244:848:55:-;;;;;;:::i;:::-;;:::i;7427:355:58:-;;;;;;;;;;-1:-1:-1;7427:355:58;;;;;:::i;:::-;;:::i;961:159:59:-;;;;;;:::i;:::-;;:::i;662:273:20:-;;;;;;:::i;:::-;;:::i;4303:907:52:-;4434:17;4574:19;310:1:80;4607:6:52;:15;;;:45;4603:176;;;-1:-1:-1;4728:14:52;;4721:47;;;;;4685:4;;4721:32;;;;;:47;;4762:4;;4721:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4703:15;;;:65;4603:176;4801:324;4833:6;:15;;;4862:6;:16;;;4892:6;:24;;;4930:185;;;;;;;;4988:6;:14;;;5004:6;:10;;;5016:6;:15;;;4971:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4930:185;;;;5057:14;:43;;5090:10;5057:43;;;5082:4;5057:43;4930:185;;;;4801:18;:324::i;:::-;4789:336;;5156:6;:23;;;5143:9;:36;;5135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4303:907;;;;:::o;9025:462::-;9116:16;9144:174;9177:16;;;;;;9207;;;;;;:::i;:::-;9252:56;;;;;;;;;9237:1;;9252:56;9276:11;:6;;:11;:::i;:::-;9252:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9252:56:52;;;-1:-1:-1;9296:10:52;9252:56;;;;;9144:19;:174::i;:::-;-1:-1:-1;;9340:14:52;;9384:22;;;;9372:34;;;9364:65;;;;;;;;;;;;:::i;:::-;1211:17;9439:14;:41;9025:462;;-1:-1:-1;9025:462:52:o;1883:1319::-;2057:1;2042:12;:16;:36;;;;2077:1;2062:12;:16;2042:36;2034:45;;;;;;2152:28;2183:37;;;;2194:5;2183:37;:::i;:::-;2152:68;;2231:15;2248:16;2266:10;2280:27;:4;:9;;;:25;:27::i;:::-;2230:77;;;;;;2317:66;2351:7;2360;2369:8;2379:3;2317:33;:66::i;:::-;;2395:17;2414:19;2464:1;2449:12;:16;:140;;2558:7;2547:18;;:8;:18;;;2575:12;2449:140;;;2495:8;2485:18;;:7;:18;;;2513:12;2449:140;2394:195;;;;2604:12;2600:596;;;2632:49;2636:7;2645:4;:10;;;2657;2669:11;2632:3;:49::i;:::-;2600:596;;;2768:9;;:28;;:26;:28::i;:::-;2764:422;;;2828:9;;:21;;:19;:21::i;:::-;2816:33;;2867:53;2887:11;2900:10;2816:9;:4;2867:19;:53::i;:::-;;2764:422;;;2976:11;2959:14;:28;;;;3121:50;3125:8;3135:4;:10;;;3147;3159:11;3121:3;:50::i;:::-;1883:1319;;;;;;;;;;:::o;3197:1005:55:-;3468:695;;;;;;;;;3274:19;;3324:871;;3405:41;;3468:695;3541:13;;;;:6;:13;:::i;:::-;3468:695;;;;;;3588:6;:13;;;;;;;;;;:::i;:::-;3468:695;;;;;;3632:10;;;;;;;;:::i;:::-;3468:695;;;;;;3679:16;;;;;;;;:::i;:::-;3468:695;;;;;;3732:16;;;;;;;;:::i;:::-;3468:695;;;;;;;;;3790:24;;3800:13;;;;:6;:13;:::i;:::-;3790:9;:24::i;:::-;3468:695;;;;3856:24;3866:6;:13;;;;;;;;;;:::i;3856:24::-;3468:695;;3918:17;;;;3468:695;;;;3973:17;;;;3468:695;;;;;;4027:16;;;;;;;;:::i;:::-;3468:695;;;;;;4079:17;3468:695;;;3361:820;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3324:19;:871::i;:::-;3305:890;;3197:1005;;;;:::o;760:245:57:-;946:14;910:17;330::61;324:1;309:12;:16;299:27;:48;291:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;983:15:57::1;993:4;;983:9;:15::i;:::-;976:22;;371:1:61;760:245:57::0;;;;;;:::o;:259:60:-;938:74;956:5;963:13;978:10;990:7;999:12;938:17;:74::i;:::-;760:259;;;;:::o;497:70:83:-;548:4;:12;497:70::o;3317:662:53:-;3501:16;3540:65;3573:14;3589:9;3600:4;;3540:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3540:32:53;;-1:-1:-1;;;3540:65:53:i;:::-;3606:1;3540:68;;;;;;;;;;;;;;3529:79;;3638:11;3626:8;:23;;3618:54;;;;;;;;;;;;:::i;:::-;3683:97;3687:4;;3692:1;3687:7;;;;;;;;;;;;;;;;;;;;:::i;:::-;3696:10;3708:61;3736:14;3752:4;;3757:1;3752:7;;;;;;;;;;;;;;;;;;;;:::i;:::-;3761:4;;3766:1;3761:7;;;;;;;;;;;;;;;;;;;;:::i;:::-;3708:27;:61::i;:::-;3771:8;3683:3;:97::i;:::-;3836:26;;;455:1:80;3836:26:53;3832:114;;;3869:10;3864:15;;3832:114;;;3898:28;;;606:1:80;3898:28:53;3894:52;;;3941:4;3928:18;;3894:52;3957:15;3963:4;;3957:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3969:2:53;;-1:-1:-1;3957:5:53;;-1:-1:-1;;3957:15:53:i;:::-;3317:662;;;;;;;:::o;1325:289:20:-;1517:90;;;;;;1551:10;1517:90;;;;1571:4;1517:90;;;;;;;;;;;;;;;;1593:4;1517:90;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;;:90;;;;;-1:-1:-1;;1517:90:20;;;;;;;-1:-1:-1;1517:33:20;:90;;;;;;;;;;;;;;;;;;;;;;;;;;2141:1131:53;2325:17;;2494:38;2490:155;;-1:-1:-1;2565:4:53;2601;;2606:1;2601:7;;;;;;;;;;;;;;;;;;:::i;:::-;2594:25;;;2628:4;2594:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2583:51;;2490:155;2655:188;2672:4;;2677:1;2672:7;;;;;;;;;;;;;;;;;;;;:::i;:::-;2693:14;:43;;2726:10;2693:43;;;2718:4;2693:43;2750:61;2778:14;2794:4;;2799:1;2794:7;;;;;;;;;;;;;;;;;;;;:::i;:::-;2803:4;;2808:1;2803:7;;;;;;2750:61;2825:8;2655:3;:188::i;:::-;2899:26;;;455:1:80;2899:26:53;2895:114;;;2932:10;2927:15;;2895:114;;;2961:28;;;606:1:80;2961:28:53;2957:52;;;3004:4;2991:18;;2957:52;3020:21;3051:4;;3056:15;;;3051:21;;;;;;;;;;;;;;;;;;;;:::i;:::-;3044:39;;;3084:2;3044:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3020:67;;3098:15;3104:4;;3098:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3110:2:53;;-1:-1:-1;3098:5:53;;-1:-1:-1;;3098:15:53:i;:::-;3136:62;3184:13;3143:4;;3148:15;;;3143:21;;;;;;;;;;;;;;;;;;;;:::i;:::-;3136:39;;;3176:2;3136:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;:62::i;:::-;3124:74;;3229:12;3216:9;:25;;3208:57;;;;;;;;;;;;:::i;:::-;2141:1131;;;;;;;;;:::o;288:48:56:-;;;:::o;8292:693:52:-;8427:16;8526:247;8559:16;;;;;;8589;;;;;;:::i;:::-;8619:24;;;;;;;;:::i;:::-;8657:106;;;;;;;;8698:6;:15;;;;;;;;;;:::i;:::-;8715:10;;;;;;;;:::i;:::-;8727:14;;;;:6;:14;:::i;:::-;8681:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8657:106;;;;8751:10;8657:106;;;;;8526:19;:247::i;:::-;8515:258;;8804:6;:22;;;8792:8;:34;;8784:65;;;;;;;;;;;;:::i;1769:123:55:-;1848:36;1859:5;1866:17;1848:10;:36::i;:::-;1840:45;;;;;;1769:123;:::o;497:218:57:-;656:14;629:8;244::19;223:17;:15;:17::i;:::-;:29;;215:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2111:170:55;2198:20;2209:5;2216:1;2198:10;:20::i;:::-;2190:29;;;;;378:49:56;;;:::o;420:38:16:-;;;:::o;610:686:18:-;808:1;798:7;:11;:29;;;;;824:3;813:7;:14;;798:29;790:38;;;;;;839:19;867:4;861:21;;;891:4;861:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;861:36:18;;-1:-1:-1;915:28:18;;;;907:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;980:15;;976:314;;1017:4;1011:20;;;1032:11;1011:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1058:17;1105:6;1078:24;1094:7;1078:11;:15;;:24;;;;:::i;:::-;:33;;;;;;;-1:-1:-1;1129:13:18;;1125:74;;1144:55;1175:12;1189:9;1144:30;:55::i;:::-;1213:66;1244:9;1269;1255:11;:23;1213:30;:66::i;:::-;976:314;;610:686;;;;;:::o;1652:348:20:-;1861:50;;;;;;1885:10;1861:50;;;;1905:4;1861:50;;;;;;1914:17;;1861:23;;;;;;:50;;;;;;;;;;;;;;;:23;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1861:50:20;:70;1857:136;;;1945:48;1963:5;1970;1977:6;1985:1;1988;1991;1945:17;:48::i;521:386:17:-;617:19;645:4;639:21;;;669:4;639:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:36:17;;-1:-1:-1;693:28:17;;;;685:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;758:15;;754:147;;795:4;789:20;;;810:11;789:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;836:54;867:9;878:11;836:30;:54::i;:::-;521:386;;;:::o;2323:182:55:-;2418:20;2429:5;2436:1;2418:10;:20::i;:::-;2410:29;;;;;;2457:40;2468:5;2475:21;2457:10;:40::i;308:653:15:-;383:22;439:4;427:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;417:34;;466:9;461:494;481:15;;;461:494;;;518:12;;563:4;582;;587:1;582:7;;;;;;;;;;;;;;;;;;:::i;:::-;555:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;517:73;;;;610:7;605:306;;737:2;721:6;:13;:18;717:32;;;741:8;;;717:32;820:4;812:6;808:17;798:27;;878:6;867:28;;;;;;;;;;;;:::i;:::-;860:36;;;;;;;;;;;:::i;605:306::-;938:6;925:7;933:1;925:10;;;;;;;;;;;;;;;;;:19;-1:-1:-1;;498:3:15;;461:494;;;;308:653;;;;:::o;424:123:59:-;503:37;514:13;529:10;503;:37::i;2547:475:55:-;2628:19;2659:12;2701:15;:20;;2722:4;2701:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2681:46:55;-1:-1:-1;2681:46:55;-1:-1:-1;2681:46:55;2738:278;;2862:2;2846:6;:13;:18;2842:32;;;2866:8;;;2842:32;2937:4;2929:6;2925:17;2915:27;;2987:6;2976:28;;;;;;;;;;;;:::i;5250:1540:52:-;5337:17;5473:19;310:1:80;5506:6:52;:15;;;:45;5502:236;;;5584:4;5567:21;;5603:15;5626:29;:6;:11;;;:27;:29::i;:::-;-1:-1:-1;;5687:40:52;;;;;5602:53;;-1:-1:-1;5687:25:52;;;;;;:40;;5721:4;;5687:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5669:15;;;:58;-1:-1:-1;5502:236:52;5748:13;5764:14;:43;;5797:10;5764:43;;;5789:4;5764:43;5748:59;;5818:887;5845:21;5869:30;:6;:11;;;:28;:30::i;:::-;5845:54;;6011:394;6047:6;:15;;;6080:16;:51;;6115:6;:16;;;6080:51;;;6107:4;6080:51;6200:1;6219:172;;;;;;;;6264:26;:6;:11;;;:24;:26::i;:::-;6219:172;;;;6367:5;6219:172;;;;;6011:18;:394::i;:::-;5993:15;;;:412;6475:220;;;;6568:11;;6531:4;;-1:-1:-1;6568:23:52;;:21;:23::i;:::-;6554:37;;6475:220;;;6642:6;:15;;;6630:27;;6675:5;;;6475:220;5818:887;;;;6736:6;:23;;;6723:9;:36;;6715:68;;;;;;;;;;;;:::i;:::-;5250:1540;;;;;:::o;471:229:60:-;626:67;644:13;659:10;671:7;680:12;626:17;:67::i;973:314:20:-;1177:50;;;;;;1201:10;1177:50;;;;1221:4;1177:50;;;;;;1230:5;;1177:23;;;;;;:50;;;;;;;;;;;;;;;:23;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1177:50:20;:58;1173:107;;;1237:43;1248:5;1255;1262:8;1272:1;1275;1278;1237:10;:43::i;328:41:16:-;;;:::o;1362:160:17:-;1423:21;:25;1419:96;;1450:65;1481:10;1493:21;1450:30;:65::i;:::-;1362:160::o;908:819:55:-;991:12;1113:6;1061:5;1054:23;;;1086:4;1093:15;1054:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;1050:103;;-1:-1:-1;1128:25:55;1121:32;;1050:103;1225:36;1236:5;1243:17;1225:10;:36::i;:::-;1221:65;;;-1:-1:-1;1270:16:55;1263:23;;1221:65;1300:40;1311:5;1318:21;1300:10;:40::i;:::-;1296:79;;;-1:-1:-1;1349:26:55;1342:33;;1296:79;1438:20;1449:5;1456:1;1438:10;:20::i;:::-;1430:29;;;;;;1531:36;1542:5;1549:17;1531:10;:36::i;:::-;1527:75;;;-1:-1:-1;1576:26:55;1569:33;;1527:75;1616:40;1627:5;1634:21;1616:10;:40::i;:::-;1612:89;;;-1:-1:-1;1665:36:55;908:819;;;;;:::o;952:365:17:-;1063:20;1093:5;1086:23;;;1118:4;1086:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1086:38:17;;-1:-1:-1;1142:29:17;;;;1134:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1209:16;;1205:106;;1241:59;1269:5;1276:9;1287:12;1241:27;:59::i;1348:678:18:-;1569:1;1559:7;:11;:29;;;;;1585:3;1574:7;:14;;1559:29;1551:38;;;;;;1600:20;1630:5;1623:23;;;1655:4;1623:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1623:38:18;;-1:-1:-1;1679:29:18;;;;1671:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1746:16;;1742:278;;1778:17;1826:6;1798:25;:12;1815:7;1798:16;:25::i;:::-;:34;;;;;;;-1:-1:-1;1850:13:18;;1846:78;;1865:59;1893:5;1900:12;1914:9;1865:27;:59::i;:::-;1938:71;1966:5;1973:9;1999;1984:12;:24;1938:27;:71::i;:::-;1742:278;1348:678;;;;;;:::o;600:110:59:-;674:4;668:19;;;695:5;668:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;763:145;857:44;868:5;875:13;890:10;857;:44::i;:::-;763:145;;:::o;7824:442:58:-;8022:34;8058;8108:45;8126:5;8133:7;8142:10;8108:17;:45::i;:::-;8021:132;;;;8231:21;8171:81;;8201:27;8171;:57;:81;8163:96;;;;;;;;;;;;:::i;4244:848:55:-;4379:19;4433:652;4514:54;;;4590:463;;;;;;;;4677:6;:14;;;4590:463;;;;4733:24;4743:6;:13;;;;;;;;;;:::i;4733:24::-;4590:463;;;;4799:24;4809:6;:13;;;;;;;;;;:::i;4799:24::-;4590:463;;;;4861:6;:17;;;4590:463;;;;4916:6;:17;;;4590:463;;;;4969:17;4590:463;;;4470:601;;;;;;;;:::i;7427:355:58:-;7588:27;7617;7648:35;7666:4;7672:10;7648:17;:35::i;:::-;7587:96;;;;7747:21;7701:67;;7724:20;7701;:43;:67;7693:82;;;;;;;;;;;;:::i;961:159:59:-;1041:72;1073:5;1080:10;1100:4;1107:5;1041:31;:72::i;662:273:20:-;849:79;;;;;;876:10;849:79;;;;896:4;849:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;;;:79;;;;;-1:-1:-1;;849:79:20;;;;;;;-1:-1:-1;849:26:20;:79;;;;;;;;;;3256:1007:52;3433:17;3514:33;;;455:1:80;3514:33:52;3510:142;;;3561:10;3549:22;;3510:142;;;3590:35;;;606:1:80;3590:35:52;3586:66;;;3647:4;3627:25;;3586:66;3664:15;3681:16;3699:10;3713:27;:4;:9;;;:25;:27::i;:::-;3663:77;;-1:-1:-1;3663:77:52;-1:-1:-1;3663:77:52;-1:-1:-1;3769:18:52;;;;;;;;3751:15;;3845:31;3663:77;;;3845:7;:31::i;:::-;:36;;;3899:9;3926:10;3954:19;:8;:17;:19::i;:::-;3991:22;;;;:157;;4131:17;3991:157;;;4037:10;:70;;4080:27;4037:70;;;4050:27;4037:70;4177:4;4166:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;3845:351;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3798:398;;;;4224:10;:30;;4247:7;4224:30;;;4237:7;4224:30;4222:33;;;3256:1007;-1:-1:-1;;;;;;;;;;;3256:1007:52:o;6845:1407::-;7024:16;7104:33;;;455:1:80;7104:33:52;7100:142;;;7151:10;7139:22;;7100:142;;;7180:35;;;606:1:80;7180:35:52;7176:66;;;7237:4;7217:25;;7176:66;7254:16;7272:15;7289:10;7303:27;:4;:9;;;:25;:27::i;:::-;7253:77;;-1:-1:-1;7253:77:52;-1:-1:-1;7253:77:52;-1:-1:-1;7359:18:52;;;;;;;;7341:15;;7445:31;7253:77;;;7445:7;:31::i;:::-;:36;;;7499:9;7526:10;7555:20;:9;:18;:20::i;:::-;7554:21;;7593:22;;;;:157;;7733:17;7593:157;;;7639:10;:70;;7682:27;7639:70;;;7652:27;7639:70;7779:4;7768:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;7445:353;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7388:410;;;;7809:25;7876:10;:134;;7972:12;7996;7995:13;;7876:134;;;7910:12;7934;7933:13;;7876:134;7844:166;;-1:-1:-1;7844:166:52;-1:-1:-1;8182:22:52;;;8178:67;;8235:9;8214:17;:30;8206:39;;;;;;6845:1407;;;;;;;;;;;;;:::o;1779:240:34:-;1846:14;;;1909:17;:4;1846:14;1909;:17::i;:::-;1900:26;-1:-1:-1;1942:24:34;:4;304:2;1942:13;:24::i;:::-;1936:30;-1:-1:-1;1985:27:34;:4;507:20;1985:14;:27::i;:::-;1976:36;;1779:240;;;;;:::o;742:257:32:-;888:17;924:68;939:7;948:43;971:6;979;987:3;948:22;:43::i;:::-;924:14;:68::i;1713:655:17:-;1822:4;1813:13;;:5;:13;;;:47;;;;;1855:5;1830:21;:30;;1813:47;1809:553;;;1911:4;1905:19;;;1932:5;1905:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1995:4;1989:20;;;2010:9;2021:5;1989:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1809:553:17;;-1:-1:-1;1809:553:17;;2048:22;;;2065:4;2048:22;2044:318;;;2177:52;2205:5;2212:9;2223:5;2177:27;:52::i;:::-;2044:318;;;2288:63;2320:5;2327;2334:9;2345:5;2288:31;:63::i;992:138:34:-;1083:11;777:24;-1:-1:-1;1083:40:34;;992:138::o;2561:149::-;2677:11;;2622:12;;2653:50;;2677:4;;507:20;;2677:25;;2653:10;:50::i;3028:127:55:-;3110:38;;;;;3084:7;;3110:23;;;;;;:38;;3142:4;;3110:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3131:538:79:-;3265:24;3324:1;3309:4;:11;:16;;3301:25;;;;;;3360:4;:11;3346:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3346:26:79;;3336:36;;3412:9;3382:7;3407:1;3390:7;:14;:18;3382:27;;;;;;;;;;;;;;;;;:39;3448:11;;:15;;3431:232;3465:5;;3431:232;;3492:17;3511:18;3533:42;3545:7;3554:4;3563:1;3559;:5;3554:11;;;;;;;;;;;;;;3567:4;3572:1;3567:7;;;;;;;;;;;;;;3533:11;:42::i;:::-;3491:84;;;;3606:46;3618:7;3626:1;3618:10;;;;;;;;;;;;;;3630:9;3641:10;3606:11;:46::i;:::-;3589:7;3601:1;3597;:5;3589:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;3472:3:79;;3431:232;;750:633;869:12;894:14;910;928:26;939:6;947;928:10;:26::i;:::-;1166:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:43;;;;;;1048:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1017:335;;;;;;;;;750:633;-1:-1:-1;;;;;750:633:79:o;820:1276:53:-;894:9;889:1201;923:1;909:4;:11;:15;905:1;:19;889:1201;;;946:13;961:14;980:4;985:1;980:7;;;;;;;;;;;;;;989:4;994:1;998;994:5;989:11;;;;;;;;;;;;;;945:56;;;;1016:14;1036:45;1067:5;1074:6;1036:30;:45::i;:::-;1015:66;;;1095:15;1124:58;1152:14;1168:5;1175:6;1124:27;:58::i;:::-;1095:88;;1197:19;1230:20;1335:16;1353;1375:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1334:59;;;;;;;;;1412:20;1434:21;1488:6;1479:15;;:5;:15;;;:61;;1521:8;1531;1479:61;;;1498:8;1508;1479:61;1411:129;;;;1572:56;1615:12;1579:5;1572:23;;;1604:4;1572:38;;;;;;;;;;;;;;;:::i;:56::-;1558:70;;1661:74;1694:11;1707:12;1721:13;1661:32;:74::i;:::-;1646:89;;889:1201;;;;1764:18;1784;1831:6;1822:15;;:5;:15;;;:73;;1870:12;1892:1;1822:73;;;1849:1;1853:12;1822:73;1763:132;;;;1909:10;1940:1;1926:4;:11;:15;1922:1;:19;:92;;2011:3;1922:92;;;1944:64;1972:14;1988:6;1996:4;2001:1;2005;2001:5;1996:11;;;;;;;;;;;;;;1944:27;:64::i;:::-;2066:12;;;2076:1;2066:12;;;;;;;;;2028:51;;;;1909:105;;-1:-1:-1;2028:9:53;;;;;;:51;;2038:10;;2050;;1909:105;;2028:51;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;926:3:53;;;;;-1:-1:-1;889:1201:53;;-1:-1:-1;;;;;;;;;;889:1201:53;710:111:10;802:5;;;797:16;;;;789:25;;;;;569:297:55;637:4;654:12;668:17;701:5;:10;;735:23;;;760:15;777:6;712:72;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;701:84;;;;712:72;701:84;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;653:132;;;;802:7;:57;;;;-1:-1:-1;814:11:55;;:16;;:44;;;845:4;834:24;;;;;;;;;;;;:::i;395:96:83:-;480:4;;395:96;:::o;986:125:10:-;1044:9;1073:6;;;:30;;-1:-1:-1;;1088:5:10;;;1102:1;1097;1088:5;1097:1;1083:15;;;;;:20;1073:30;1065:39;;;;;2282:165:36;2394:12;;;2354;2394;;;;;;;;;2372:7;;;;2387:5;;2372:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2353:54;;;2425:7;2417:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2245:127:34;2309:12;2340:25;:4;2351:1;618:23;2340:10;:25::i;1183:279:36:-;1313:59;;;1302:10;1313:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1336:24;1313:59;;;1302:71;;;;1267:12;;;;1302:10;;;;1313:59;1302:71;;;1313:59;1302:71;;1313:59;1302:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1266:107;;;;1391:7;:57;;;;-1:-1:-1;1403:11:36;;:16;;:44;;;1434:4;1423:24;;;;;;;;;;;;;;;-1:-1:-1;1423:24:36;1403:44;1383:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6116:1269:58;6263:34;6299;6369:7;:14;6353:5;:12;:30;6345:39;;;;;;6395:69;6516:5;:12;6479:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6395:134;;6539:69;6660:5;:12;6623:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6539:134;;6689:9;6684:466;6708:5;:12;6704:1;:16;6684:466;;;6742:27;6771;6802:39;6820:5;6826:1;6820:8;;;;;;;;;;;;;;6830:10;6802:17;:39::i;:::-;6741:100;;;;6895:29;6903:20;6895:7;:29::i;:::-;6855;6885:1;6855:32;;;;;;;;;;;;;;:37;;:69;;;;;;;;;;;6978:29;6986:20;6978:7;:29::i;:::-;6938;6968:1;6938:32;;;;;;;;;;;;;;:37;;:69;;;;;;;;;;;7063:7;7071:1;7063:10;;;;;;;;;;;;;;7021:29;7051:1;7021:32;;;;;;;;;;;;;;:39;;:52;;;;;;;;;;;7129:7;7137:1;7129:10;;;;;;;;;;;;;;7087:29;7117:1;7087:32;;;;;;;;;;;;;;;;;;;:52;;;;:39;;:52;-1:-1:-1;;6722:3:58;;6684:466;;;;7190:74;7234:29;7190:43;:74::i;:::-;7160:104;;;;7304:74;7348:29;7304:43;:74::i;:::-;7274:104;;;;6116:1269;;;;;;;;:::o;2888:2574::-;3000:27;3029;3072:23;3106:16;3125:15;:4;:13;:15::i;:::-;3106:34;-1:-1:-1;3150:23:58;;3183:2047;3207:8;3203:1;:12;3183:2047;;;3298:15;3315:16;3333:10;3347:22;:4;:20;:22::i;:::-;3297:72;;;;;;3383:17;3403:38;3418:7;3427:8;3437:3;3403:14;:38::i;:::-;3383:58;-1:-1:-1;3526:18:58;;3594:15;;;3590:395;;3757:36;3788:4;3757:30;:36::i;:::-;3728:65;;;;;-1:-1:-1;3728:65:58;;;-1:-1:-1;3590:395:58;;;3850:48;3880:4;3887:10;3850:21;:48::i;:::-;3832:66;;;;;;;;;;3957:4;3944:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;3916:54:58;;;;;;-1:-1:-1;;;;3590:395:58;4019:1;4008:8;:12;4003:1;:17;3999:682;;;4469:8;4459:18;;:7;:18;;;4438:39;;3999:682;;;4607:16;:4;:14;:16::i;:::-;4600:23;;4659:7;4641:25;;3999:682;4857:8;4869:6;;;4868:81;;;4899:7;4881:25;;:15;:25;;;:67;;4941:7;4930:18;;:8;:18;;;4881:67;;;4919:8;4909:18;;:7;:18;;;4881:67;4857:92;;4967:3;4963:257;;;4990:35;;;;5043;;;;4963:257;;;5141:11;5117:35;;;;5194:11;5170:35;;;;4963:257;-1:-1:-1;;3217:3:58;;;;;-1:-1:-1;3183:2047:58;;-1:-1:-1;;;;3183:2047:58;;;5345:18;5340:116;;5403:2;5379:26;;;;5443:2;5419:26;;;;5340:116;2888:2574;;;;;;;;:::o;561:330:36:-;722:69;;;698:10;722:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;745:28;722:69;;;698:103;;;;663:12;;;;698:10;;;;722:69;698:103;;;722:69;698:103;;722:69;698:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;662:139;;;;819:7;:57;;;;-1:-1:-1;831:11:36;;:16;;:44;;;862:4;851:24;;;;;;;;;;;;;;;-1:-1:-1;851:24:36;831:44;811:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1511:245:52;1624:12;1668:80;1695:7;1704:43;1727:6;1735;1743:3;1704:22;:43::i;:::-;1668:26;:80::i;:::-;1648:101;1511:245;-1:-1:-1;;;;1511:245:52:o;924:123:11:-;976:8;1008;1004:1;:12;996:21;;;;;;-1:-1:-1;1038:1:11;924:123::o;3214:416:31:-;3293:7;3335:6;3320;3329:2;3320:11;:21;;3312:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3399:6;3408:2;3399:11;3382:6;:13;:28;;3374:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3524:30:31;3540:4;3524:30;3518:37;3557:27;3514:71;;;3214:416::o;3636:365::-;3714:6;3754;3740;3749:1;3740:10;:20;;3732:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3817:6;3826:1;3817:10;3800:6;:13;:27;;3792:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3929:29:31;3945:3;3929:29;3923:36;;3636:365::o;784:244:35:-;871:14;;:::i;:::-;910:6;901:15;;:6;:15;;;897:56;;;938:6;;946;897:56;-1:-1:-1;970:51:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;784:244::o;1248:269:32:-;1370:17;1419:44;1446:7;1455;1419:26;:44::i;:::-;1399:65;-1:-1:-1;1482:10:32;:27;;;;1474:36;;;;;399:2809:31;491:12;539:7;523;533:2;523:12;:23;;515:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;603:6;592:7;583:6;:16;:26;;575:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;672:7;663:6;:16;646:6;:13;:33;;638:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;712:22;775:15;;803:1967;;;;2911:4;2905:11;2892:24;;3097:1;3086:9;3079:20;3145:4;3134:9;3130:20;3124:4;3117:34;768:2397;;803:1967;985:4;979:11;966:24;;1644:2;1635:7;1631:16;2026:9;2019:17;2013:4;2009:28;1997:9;1986;1982:25;1978:60;2074:7;2070:2;2066:16;2326:6;2312:9;2305:17;2299:4;2295:28;2283:9;2275:6;2271:22;2267:57;2263:70;2100:425;2359:3;2355:2;2352:11;2100:425;;;2497:9;;2486:21;;2400:4;2392:13;;;;2432;2100:425;;;-1:-1:-1;;2543:26:31;;;2751:2;2734:11;2747:7;2730:25;2724:4;2717:39;-1:-1:-1;768:2397:31;-1:-1:-1;3192:9:31;399:2809;-1:-1:-1;;;;399:2809:31:o;1438:427:79:-;1561:16;1579;1608:14;1628:26;1639:6;1647;1628:10;:26::i;:::-;1607:47;;;1665:16;1683;1716:32;1724:7;1733:6;1741;1716:7;:32::i;:::-;1705:56;;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1705:58:79;;;;;;;1664:99;;;;;-1:-1:-1;1664:99:79;;-1:-1:-1;1796:16:79;;;;;;;;:62;;1839:8;1849;1796:62;;;1816:8;1826;1796:62;1773:85;;;;-1:-1:-1;1438:427:79;-1:-1:-1;;;;;;;1438:427:79:o;2601:452::-;2733:16;2781:1;2769:9;:13;2761:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2843:1;2831:9;:13;:31;;;;;2861:1;2848:10;:14;2831:31;2823:40;;;;;;2873:17;2893:34;2922:4;2893:24;:9;2907;2893:13;:24::i;:::-;:28;;:34::i;:::-;2873:54;-1:-1:-1;2937:19:79;2959:34;2989:3;2959:25;:10;2974:9;2959:14;:25::i;:34::-;2937:56;;3014:32;3044:1;3027:11;3015:9;:23;;;;;;;3014:29;:32::i;:::-;3003:43;2601:452;-1:-1:-1;;;;;;2601:452:79:o;391:270::-;466:14;482;526:6;516:16;;:6;:16;;;;508:25;;;;;;571:6;562:15;;:6;:15;;;:53;;600:6;608;562:53;;;581:6;589;562:53;543:72;;-1:-1:-1;543:72:79;-1:-1:-1;633:20:79;;;625:29;;;;;;391:270;;;;;:::o;1984:499::-;2116:17;2164:1;2153:8;:12;2145:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2225:1;2213:9;:13;:31;;;;;2243:1;2230:10;:14;2213:31;2205:40;;;;;;2255:23;2281:17;:8;2294:3;2281:12;:17::i;:::-;2255:43;-1:-1:-1;2308:17:79;2328:31;2255:43;2348:10;2328:19;:31::i;:::-;2308:51;-1:-1:-1;2369:19:79;2391:40;2415:15;2391:19;:9;2405:4;2391:13;:19::i;:::-;:23;;:40::i;:::-;2369:62;;2465:11;2453:9;:23;;;;;;;1984:499;-1:-1:-1;;;;;;;1984:499:79:o;5539:103:58:-;5633:1;5615:19;;;;;;5607:28;;;;;7520:879:33;7640:32;7760:16;7833:19;7972:9;7967:204;7987:16;:23;7983:1;:27;7967:204;;;8078:16;8095:1;8078:19;;;;;;;;;;;;;;:26;;;8071:34;;8044:16;8061:1;8044:19;;;;;;;;;;;;;;:24;;;:61;;;8031:74;;;;8134:16;8151:1;8134:19;;;;;;;;;;;;;;:26;;;8119:41;;;;;;8012:3;;;;;;;7967:204;;;;8235:11;8216:9;:31;;;;;;8181:67;;8319:1;8307:9;:13;:55;;;;;8344:11;8325:9;:31;;;;;;:36;;8307:55;8303:89;;;-1:-1:-1;;8364:28:33;;;7520:879;-1:-1:-1;7520:879:33:o;1282:235:34:-;1471:11;507:20;1471:23;;;;1470:39;;1282:235::o;810:1472:58:-;916:23;941:17;974:23;1007:29;1112:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1046:78:58;;-1:-1:-1;1046:78:58;;-1:-1:-1;1046:78:58;-1:-1:-1;;1251:1:58;1226:26;;;;;-1:-1:-1;1218:42:58;;-1:-1:-1;1218:42:58;;;;;;;;;;;:::i;:::-;1578:27;1607:20;1635:4;:17;;;1653:16;1635:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1577:93;;;;;;1715:17;:15;:17::i;:::-;1684:49;;:20;:49;;;1680:596;;1769:11;1749:31;;1680:596;;;1811:17;1890:22;1831:81;;1885:1;1860:22;1832:50;;1840:16;1832:25;;:50;:54;1831:81;;;;;;1811:101;;1927:31;1960:24;1988:20;2028:4;:17;;;2046:9;2028:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1926:130;;;;;;;2079:15;2071:31;;;;;;;;;;;;:::i;:::-;2132:47;;;2219:45;;;2220:35;;;2219:45;;;;;;;;2193:72;;1680:596;;;;;;810:1472;;;;;;;:::o;1058:1220:33:-;1153:24;;1228:15;;;1220:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1291:15;;;1304:1;1291:15;;;;;;;;1261:27;;1291:15;;;;;;;;;;-1:-1:-1;1291:15:33;1261:45;;1333:10;1316:11;1328:1;1316:14;;;;;;;;;;;;;:27;;;;;;;;;;;1370:1;1353:11;1365:1;1353:14;;;;;;;;:18;;;;:14;;;;;;;;;;:18;1470:52;;;;;;;;;;;;;;;;;;;1383:30;;;;1470:39;;;;;;1510:11;;1470:52;;;;;;;;;;;;;;;;;1383:30;1470:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1470:52:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1470:52:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1382:140;;;;1533:26;1583:15;1599:1;1583:18;;;;;;;;;;;;;;1562:15;1578:1;1562:18;;;;;;;;;;;;;;:39;1533:68;;1611:43;1709:34;1744:1;1709:37;;;;;;;;;;;;;;1657:34;1692:1;1657:37;;;;;;;;;;;;;;:89;1611:135;;1807:10;1784:33;;:20;:33;;;;;;;;1757:61;;1900:1;1877:20;:24;;;:68;;;;;1929:10;1906:33;;:20;:33;;;;;;;;:38;;;;1877:68;1873:94;;;1947:20;;;;;1873:94;2120:19;;;2142:17;2120:39;2219:50;2267:2;2219:50;;;;;2201:69;;2219:50;2201:69;;;;;2169:102;;1058:1220;;;;;;;;;;;:::o;1276:512:35:-;1360:12;1405:3;:10;;;1392:23;;:3;:10;;;:23;;;1384:32;;;;;;-1:-1:-1;1639:10:35;;1651;;;;;1663:7;;;;;1628:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1618:54;;;;;;1510:229;;;;;;;;;;;;;;;;;;;;;241:66;1510:229;;;;;;;;;;;;;;;;;;;;;;;;;1479:278;;;;;;1276:512::o;435:111:10:-;527:5;;;522:16;;;;514:25;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:138:89:-;84:20;;113:33;84:20;113:33;:::i;157:404::-;;;290:3;283:4;275:6;271:17;267:27;257:2;;315:8;305;298:26;257:2;-1:-1:-1;345:20:89;;388:18;377:30;;374:2;;;427:8;417;410:26;374:2;471:4;463:6;459:17;447:29;;534:3;527:4;519;511:6;507:17;499:6;495:30;491:41;488:50;485:2;;;551:1;548;541:12;566:840;;679:3;672:4;664:6;660:17;656:27;646:2;;701:5;694;687:20;646:2;741:6;728:20;767:4;791:63;806:47;850:2;806:47;:::i;:::-;791:63;:::i;:::-;888:15;;;919:12;;;;951:15;;;997:11;;;985:24;;981:33;;978:42;-1:-1:-1;975:2:89;;;1037:5;1030;1023:20;975:2;1063:5;1077:300;1091:2;1088:1;1085:9;1077:300;;;1162:3;1149:17;1210:34;1203:5;1199:46;1192:5;1189:57;1179:2;;1264:5;1257;1250:20;1179:2;1285:18;;1323:12;;;;1355;;;;1109:1;1102:9;1077:300;;;-1:-1:-1;1395:5:89;;636:770;-1:-1:-1;;;;;;;636:770:89:o;1411:166::-;1489:13;;1538;;1531:21;1521:32;;1511:2;;1567:1;1564;1557:12;1582:485;;1679:3;1672:4;1664:6;1660:17;1656:27;1646:2;;1701:5;1694;1687:20;1646:2;1741:6;1728:20;1772:49;1787:33;1817:2;1787:33;:::i;1772:49::-;1846:2;1837:7;1830:19;1892:3;1885:4;1880:2;1872:6;1868:15;1864:26;1861:35;1858:2;;;1913:5;1906;1899:20;1858:2;1982;1975:4;1967:6;1963:17;1956:4;1947:7;1943:18;1930:55;2005:16;;;2023:4;2001:27;1994:42;;;;2009:7;1636:431;-1:-1:-1;;1636:431:89:o;2072:190::-;2153:13;;2206:30;2195:42;;2185:53;;2175:2;;2252:1;2249;2242:12;2267:165;2347:13;;2400:6;2389:18;;2379:29;;2369:2;;2422:1;2419;2412:12;2437:163;2506:20;;2566:8;2555:20;;2545:31;;2535:2;;2590:1;2587;2580:12;2605:136;2674:20;;2703:32;2674:20;2703:32;:::i;2746:259::-;;2858:2;2846:9;2837:7;2833:23;2829:32;2826:2;;;2879:6;2871;2864:22;2826:2;2923:9;2910:23;2942:33;2969:5;2942:33;:::i;:::-;2994:5;2816:189;-1:-1:-1;;;2816:189:89:o;3010:327::-;;;3139:2;3127:9;3118:7;3114:23;3110:32;3107:2;;;3160:6;3152;3145:22;3107:2;3204:9;3191:23;3223:33;3250:5;3223:33;:::i;:::-;3275:5;3327:2;3312:18;;;;3299:32;;-1:-1:-1;;;3097:240:89:o;3342:470::-;;;;3488:2;3476:9;3467:7;3463:23;3459:32;3456:2;;;3509:6;3501;3494:22;3456:2;3553:9;3540:23;3572:33;3599:5;3572:33;:::i;:::-;3624:5;-1:-1:-1;3676:2:89;3661:18;;3648:32;;-1:-1:-1;3732:2:89;3717:18;;3704:32;3745:35;3704:32;3745:35;:::i;:::-;3799:7;3789:17;;;3446:366;;;;;:::o;3817:683::-;;;;;;3997:3;3985:9;3976:7;3972:23;3968:33;3965:2;;;4019:6;4011;4004:22;3965:2;4063:9;4050:23;4082:33;4109:5;4082:33;:::i;:::-;4134:5;-1:-1:-1;4186:2:89;4171:18;;4158:32;;-1:-1:-1;4242:2:89;4227:18;;4214:32;4255:35;4214:32;4255:35;:::i;:::-;4309:7;-1:-1:-1;4363:2:89;4348:18;;4335:32;;-1:-1:-1;4419:3:89;4404:19;;4391:33;4433:35;4391:33;4433:35;:::i;:::-;4487:7;4477:17;;;3955:545;;;;;;;;:::o;4505:539::-;;;;;4668:3;4656:9;4647:7;4643:23;4639:33;4636:2;;;4690:6;4682;4675:22;4636:2;4734:9;4721:23;4753:33;4780:5;4753:33;:::i;:::-;4805:5;-1:-1:-1;4857:2:89;4842:18;;4829:32;;-1:-1:-1;4908:2:89;4893:18;;4880:32;;-1:-1:-1;4964:2:89;4949:18;;4936:32;4977:35;4936:32;4977:35;:::i;:::-;4626:418;;;;-1:-1:-1;4626:418:89;;-1:-1:-1;;4626:418:89:o;5049:673::-;;;;;;;5244:3;5232:9;5223:7;5219:23;5215:33;5212:2;;;5266:6;5258;5251:22;5212:2;5310:9;5297:23;5329:33;5356:5;5329:33;:::i;:::-;5381:5;-1:-1:-1;5433:2:89;5418:18;;5405:32;;-1:-1:-1;5484:2:89;5469:18;;5456:32;;-1:-1:-1;5540:2:89;5525:18;;5512:32;5553:33;5512:32;5553:33;:::i;:::-;5202:520;;;;-1:-1:-1;5202:520:89;;5659:3;5644:19;;5631:33;;5711:3;5696:19;;;5683:33;;-1:-1:-1;5202:520:89;-1:-1:-1;;5202:520:89:o;5727:474::-;;;5885:2;5873:9;5864:7;5860:23;5856:32;5853:2;;;5906:6;5898;5891:22;5853:2;5951:9;5938:23;5984:18;5976:6;5973:30;5970:2;;;6021:6;6013;6006:22;5970:2;6065:76;6133:7;6124:6;6113:9;6109:22;6065:76;:::i;:::-;6160:8;;6039:102;;-1:-1:-1;5843:358:89;-1:-1:-1;;;;5843:358:89:o;6206:1340::-;;;;;6426:3;6414:9;6405:7;6401:23;6397:33;6394:2;;;6448:6;6440;6433:22;6394:2;6493:9;6480:23;6522:18;6563:2;6555:6;6552:14;6549:2;;;6584:6;6576;6569:22;6549:2;6627:6;6616:9;6612:22;6602:32;;6672:7;6665:4;6661:2;6657:13;6653:27;6643:2;;6699:6;6691;6684:22;6643:2;6740;6727:16;6762:4;6786:63;6801:47;6845:2;6801:47;:::i;6786:63::-;6883:15;;;6914:12;;;;6946:11;;;6975:6;6990:210;7004:2;7001:1;6998:9;6990:210;;;7061:64;7117:7;7112:2;7105:3;7092:17;7088:2;7084:26;7080:35;7061:64;:::i;:::-;7049:77;;7146:12;;;;7178;;;;7022:1;7015:9;6990:210;;;-1:-1:-1;7219:5:89;;-1:-1:-1;;;7262:18:89;;7249:32;;-1:-1:-1;;7293:16:89;;;7290:2;;;7327:6;7319;7312:22;7290:2;;7355:69;7416:7;7405:8;7394:9;7390:24;7355:69;:::i;:::-;7345:79;;;7443:39;7478:2;7467:9;7463:18;7443:39;:::i;:::-;7433:49;;7501:39;7536:2;7525:9;7521:18;7501:39;:::i;:::-;7491:49;;6384:1162;;;;;;;:::o;7551:214::-;;7671:2;7659:9;7650:7;7646:23;7642:32;7639:2;;;7692:6;7684;7677:22;7639:2;7720:39;7749:9;7720:39;:::i;7770:542::-;;;;7945:2;7933:9;7924:7;7920:23;7916:32;7913:2;;;7966:6;7958;7951:22;7913:2;8007:9;7994:23;7984:33;;8068:2;8057:9;8053:18;8040:32;8095:18;8087:6;8084:30;8081:2;;;8132:6;8124;8117:22;8081:2;8176:76;8244:7;8235:6;8224:9;8220:22;8176:76;:::i;:::-;7903:409;;8271:8;;-1:-1:-1;8150:102:89;;-1:-1:-1;;;;7903:409:89:o;8317:342::-;;8438:2;8426:9;8417:7;8413:23;8409:32;8406:2;;;8459:6;8451;8444:22;8406:2;8504:9;8491:23;8537:18;8529:6;8526:30;8523:2;;;8574:6;8566;8559:22;8523:2;8602:51;8645:7;8636:6;8625:9;8621:22;8602:51;:::i;8664:551::-;;;;8817:2;8805:9;8796:7;8792:23;8788:32;8785:2;;;8838:6;8830;8823:22;8785:2;8883:9;8870:23;8916:18;8908:6;8905:30;8902:2;;;8953:6;8945;8938:22;8902:2;8981:51;9024:7;9015:6;9004:9;9000:22;8981:51;:::i;:::-;8971:61;;;9051:39;9086:2;9075:9;9071:18;9051:39;:::i;:::-;9041:49;;9140:2;9129:9;9125:18;9112:32;9153;9179:5;9153:32;:::i;9220:255::-;;9330:2;9318:9;9309:7;9305:23;9301:32;9298:2;;;9351:6;9343;9336:22;9298:2;9395:9;9382:23;9414:31;9439:5;9414:31;:::i;9480:253::-;;;9618:2;9606:9;9597:7;9593:23;9589:32;9586:2;;;9639:6;9631;9624:22;9586:2;-1:-1:-1;;9667:16:89;;9723:2;9708:18;;;9702:25;9667:16;;9702:25;;-1:-1:-1;9576:157:89:o;9738:775::-;;;;;9901:2;9889:9;9880:7;9876:23;9872:32;9869:2;;;9922:6;9914;9907:22;9869:2;9963:9;9950:23;9940:33;;10020:2;10009:9;10005:18;9992:32;9982:42;;10075:2;10064:9;10060:18;10047:32;10098:18;10139:2;10131:6;10128:14;10125:2;;;10160:6;10152;10145:22;10125:2;10203:6;10192:9;10188:22;10178:32;;10248:7;10241:4;10237:2;10233:13;10229:27;10219:2;;10275:6;10267;10260:22;10219:2;10320;10307:16;10346:2;10338:6;10335:14;10332:2;;;10367:6;10359;10352:22;10332:2;10417:7;10412:2;10403:6;10399:2;10395:15;10391:24;10388:37;10385:2;;;10443:6;10435;10428:22;10385:2;9859:654;;;;-1:-1:-1;;10479:2:89;10471:11;;-1:-1:-1;;;9859:654:89:o;10518:676::-;;10651:2;10639:9;10630:7;10626:23;10622:32;10619:2;;;10672:6;10664;10657:22;10619:2;10710:9;10704:16;10743:18;10735:6;10732:30;10729:2;;;10780:6;10772;10765:22;10729:2;10808:22;;10861:4;10853:13;;10849:27;-1:-1:-1;10839:2:89;;10895:6;10887;10880:22;10839:2;10929;10923:9;10954:49;10969:33;10999:2;10969:33;:::i;10954:49::-;11026:2;11019:5;11012:17;11066:7;11061:2;11056;11052;11048:11;11044:20;11041:33;11038:2;;;11092:6;11084;11077:22;11038:2;11110:54;11161:2;11156;11149:5;11145:14;11140:2;11136;11132:11;11110:54;:::i;11199:1042::-;;11345:2;11333:9;11324:7;11320:23;11316:32;11313:2;;;11366:6;11358;11351:22;11313:2;11411:9;11398:23;11440:18;11481:2;11473:6;11470:14;11467:2;;;11502:6;11494;11487:22;11467:2;11530:22;;;;11586:4;11568:16;;;11564:27;11561:2;;;11609:6;11601;11594:22;11561:2;11647;11641:9;11689:4;11681:6;11677:17;11744:6;11732:10;11729:22;11724:2;11712:10;11709:18;11706:46;11703:2;;;11755:9;11703:2;11782;11775:22;11822:16;;11850;;;11847:2;;;11884:6;11876;11869:22;11847:2;11917:46;11955:7;11944:8;11940:2;11936:17;11917:46;:::i;:::-;11909:6;11902:62;;12007:2;12003;11999:11;11986:25;11973:38;;12020:33;12047:5;12020:33;:::i;:::-;12086:5;12081:2;12073:6;12069:15;12062:30;12146:2;12142;12138:11;12125:25;12120:2;12112:6;12108:15;12101:50;12205:2;12201;12197:11;12184:25;12179:2;12171:6;12167:15;12160:50;12229:6;12219:16;;;;;11303:938;;;;:::o;12246:897::-;;12398:3;12386:9;12377:7;12373:23;12369:33;12366:2;;;12420:6;12412;12405:22;12366:2;12458;12452:9;12500:3;12492:6;12488:16;12570:6;12558:10;12555:22;12534:18;12522:10;12519:34;12516:62;12513:2;;;12581:9;12513:2;12608;12601:22;12647:31;12668:9;12647:31;:::i;:::-;12639:6;12632:47;12712:40;12748:2;12737:9;12733:18;12712:40;:::i;:::-;12707:2;12699:6;12695:15;12688:65;12786:39;12821:2;12810:9;12806:18;12786:39;:::i;:::-;12781:2;12773:6;12769:15;12762:64;12859:40;12895:2;12884:9;12880:18;12859:40;:::i;:::-;12854:2;12846:6;12842:15;12835:65;12962:3;12951:9;12947:19;12934:33;12928:3;12920:6;12916:16;12909:59;13030:3;13019:9;13015:19;13002:33;12996:3;12988:6;12984:16;12977:59;13070:41;13106:3;13095:9;13091:19;13070:41;:::i;:::-;13064:3;13052:16;;13045:67;13056:6;12356:787;-1:-1:-1;;;12356:787:89:o;13148:427::-;;13297:2;13285:9;13276:7;13272:23;13268:32;13265:2;;;13318:6;13310;13303:22;13265:2;13363:9;13350:23;13396:18;13388:6;13385:30;13382:2;;;13433:6;13425;13418:22;13382:2;13461:22;;13517:3;13499:16;;;13495:26;13492:2;;;13539:6;13531;13524:22;13580:220;;13735:3;13723:9;13714:7;13710:23;13706:33;13703:2;;;13757:6;13749;13742:22;13805:220;;13960:3;13948:9;13939:7;13935:23;13931:33;13928:2;;;13982:6;13974;13967:22;14030:207;;14172:3;14160:9;14151:7;14147:23;14143:33;14140:2;;;14194:6;14186;14179:22;14242:928;;14388:2;14376:9;14367:7;14363:23;14359:32;14356:2;;;14409:6;14401;14394:22;14356:2;14454:9;14441:23;14483:18;14524:2;14516:6;14513:14;14510:2;;;14545:6;14537;14530:22;14510:2;14573:22;;;;14629:4;14611:16;;;14607:27;14604:2;;;14652:6;14644;14637:22;14604:2;14690:4;14684:11;14734:4;14726:6;14722:17;14789:6;14777:10;14774:22;14769:2;14757:10;14754:18;14751:46;14748:2;;;14800:9;14748:2;14827:4;14820:24;14869:16;;14897;;;14894:2;;;14931:6;14923;14916:22;14894:2;14964:46;15002:7;14991:8;14987:2;14983:17;14964:46;:::i;:::-;14956:6;14949:62;;15054:2;15050;15046:11;15033:25;15020:38;;15067:33;15094:5;15067:33;:::i;:::-;15128:2;15116:15;;15109:30;;;;-1:-1:-1;15120:6:89;14346:824;-1:-1:-1;;;14346:824:89:o;15175:435::-;;;;15331:2;15319:9;15310:7;15306:23;15302:32;15299:2;;;15352:6;15344;15337:22;15299:2;15380:42;15412:9;15380:42;:::i;:::-;15370:52;;15441:51;15488:2;15477:9;15473:18;15441:51;:::i;:::-;15431:61;;15535:2;15524:9;15520:18;15514:25;15548:32;15574:5;15548:32;:::i;15879:867::-;;;;;;;;16094:3;16082:9;16073:7;16069:23;16065:33;16062:2;;;16116:6;16108;16101:22;16062:2;16153:9;16147:16;16172:33;16199:5;16172:33;:::i;:::-;16274:2;16259:18;;16253:25;16224:5;;-1:-1:-1;16287:33:89;16253:25;16287:33;:::i;:::-;16339:7;-1:-1:-1;16365:50:89;16411:2;16396:18;;16365:50;:::i;:::-;16355:60;;16434:50;16480:2;16469:9;16465:18;16434:50;:::i;:::-;16424:60;;16503:51;16549:3;16538:9;16534:19;16503:51;:::i;:::-;16493:61;;16599:3;16588:9;16584:19;16578:26;16613:33;16638:7;16613:33;:::i;:::-;16665:7;-1:-1:-1;16691:49:89;16735:3;16720:19;;16691:49;:::i;:::-;16681:59;;16052:694;;;;;;;;;;:::o;16751:196::-;;16862:2;16850:9;16841:7;16837:23;16833:32;16830:2;;;16883:6;16875;16868:22;16830:2;16911:30;16931:9;16911:30;:::i;16952:190::-;;17064:2;17052:9;17043:7;17039:23;17035:32;17032:2;;;17085:6;17077;17070:22;17032:2;-1:-1:-1;17113:23:89;;17022:120;-1:-1:-1;17022:120:89:o;17147:194::-;;17270:2;17258:9;17249:7;17245:23;17241:32;17238:2;;;17291:6;17283;17276:22;17238:2;-1:-1:-1;17319:16:89;;17228:113;-1:-1:-1;17228:113:89:o;17346:327::-;;;17475:2;17463:9;17454:7;17450:23;17446:32;17443:2;;;17496:6;17488;17481:22;17443:2;17537:9;17524:23;17514:33;;17597:2;17586:9;17582:18;17569:32;17610:33;17637:5;17610:33;:::i;:::-;17662:5;17652:15;;;17433:240;;;;;:::o;17678:539::-;;;;;17841:3;17829:9;17820:7;17816:23;17812:33;17809:2;;;17863:6;17855;17848:22;17809:2;17904:9;17891:23;17881:33;;17964:2;17953:9;17949:18;17936:32;17977:33;18004:5;17977:33;:::i;:::-;18029:5;-1:-1:-1;18081:2:89;18066:18;;18053:32;;-1:-1:-1;18137:2:89;18122:18;;18109:32;18150:35;18109:32;18150:35;:::i;18769:395::-;;;;18915:2;18903:9;18894:7;18890:23;18886:32;18883:2;;;18936:6;18928;18921:22;18883:2;18977:9;18964:23;18954:33;;19034:2;19023:9;19019:18;19006:32;18996:42;;19088:2;19077:9;19073:18;19060:32;19101:33;19128:5;19101:33;:::i;19169:737::-;;;;;;19367:3;19355:9;19346:7;19342:23;19338:33;19335:2;;;19389:6;19381;19374:22;19335:2;19430:9;19417:23;19407:33;;19487:2;19476:9;19472:18;19459:32;19449:42;;19542:2;19531:9;19527:18;19514:32;19569:18;19561:6;19558:30;19555:2;;;19606:6;19598;19591:22;19555:2;19650:76;19718:7;19709:6;19698:9;19694:22;19650:76;:::i;:::-;19745:8;;-1:-1:-1;19624:102:89;-1:-1:-1;;19830:2:89;19815:18;;19802:32;19843:33;19802:32;19843:33;:::i;19911:651::-;;;;;20079:3;20067:9;20058:7;20054:23;20050:33;20047:2;;;20101:6;20093;20086:22;20047:2;20138:9;20132:16;20157:32;20183:5;20157:32;:::i;:::-;20208:5;20198:15;;;20258:2;20247:9;20243:18;20237:25;20307:7;20304:1;20293:22;20284:7;20281:35;20271:2;;20335:6;20327;20320:22;20271:2;20415;20400:18;;20394:25;20363:7;;-1:-1:-1;20428:35:89;20394:25;20428:35;:::i;:::-;20482:7;-1:-1:-1;20508:48:89;20552:2;20537:18;;20508:48;:::i;20567:129::-;20646:42;20635:54;20623:67;;20613:83::o;20701:318::-;;20782:5;20776:12;20809:6;20804:3;20797:19;20825:63;20881:6;20874:4;20869:3;20865:14;20858:4;20851:5;20847:16;20825:63;:::i;:::-;20933:2;20921:15;20938:66;20917:88;20908:98;;;;21008:4;20904:109;;20752:267;-1:-1:-1;;20752:267:89:o;21024:93::-;21101:1;21090:20;21078:33;;21068:49::o;21122:94::-;21200:8;21189:20;21177:33;;21167:49::o;21221:514::-;21509:2;21505:15;;;21414:66;21501:24;;;21489:37;;21564:3;21560:16;;;;21578:66;21556:89;21551:2;21542:12;;21535:111;21680:15;;21676:24;21671:2;21662:12;;21655:46;21726:2;21717:12;;21394:341::o;21740:273::-;;21923:6;21915;21910:3;21897:33;21949:16;;21974:15;;;21949:16;21887:126;-1:-1:-1;21887:126:89:o;22018:274::-;;22185:6;22179:13;22201:53;22247:6;22242:3;22235:4;22227:6;22223:17;22201:53;:::i;:::-;22270:16;;;;;22155:137;-1:-1:-1;;22155:137:89:o;22297:226::-;22473:42;22461:55;;;;22443:74;;22431:2;22416:18;;22398:125::o;22767:327::-;22951:42;23020:15;;;23002:34;;23072:15;;23067:2;23052:18;;23045:43;22929:2;22914:18;;22896:198::o;23099:593::-;;23342:42;23423:2;23415:6;23411:15;23400:9;23393:34;23477:6;23470:14;23463:22;23458:2;23447:9;23443:18;23436:50;23522:6;23517:2;23506:9;23502:18;23495:34;23577:2;23569:6;23565:15;23560:2;23549:9;23545:18;23538:43;;23618:3;23612;23601:9;23597:19;23590:32;23639:47;23681:3;23670:9;23666:19;23658:6;23639:47;:::i;:::-;23631:55;23322:370;-1:-1:-1;;;;;;;23322:370:89:o;23697:297::-;23901:42;23889:55;;;;23871:74;;23976:2;23961:18;;23954:34;23859:2;23844:18;;23826:168::o;23999:865::-;;24188:2;24228;24217:9;24213:18;24258:2;24247:9;24240:21;24281:6;24316;24310:13;24347:6;24339;24332:22;24385:2;24374:9;24370:18;24363:25;;24448:2;24442;24434:6;24430:15;24419:9;24415:31;24411:40;24397:54;;24486:2;24478:6;24474:15;24507:4;24520:315;24534:6;24531:1;24528:13;24520:315;;;24623:66;24611:9;24603:6;24599:22;24595:95;24590:3;24583:108;24714:41;24748:6;24739;24733:13;24714:41;:::i;:::-;24704:51;-1:-1:-1;24813:12:89;;;;24778:15;;;;24556:1;24549:9;24520:315;;;-1:-1:-1;24852:6:89;;24168:696;-1:-1:-1;;;;;;;24168:696:89:o;24869:219::-;;25016:2;25005:9;24998:21;25036:46;25078:2;25067:9;25063:18;25055:6;25036:46;:::i;25093:239::-;25242:2;25227:18;;25275:1;25264:13;;25254:2;;25281:9;25254:2;25301:25;;;25209:123;:::o;25563:326::-;25765:2;25747:21;;;25804:1;25784:18;;;25777:29;25842:5;25837:2;25822:18;;25815:33;25880:2;25865:18;;25737:152::o;25894:326::-;26096:2;26078:21;;;26135:1;26115:18;;;26108:29;26173:5;26168:2;26153:18;;26146:33;26211:2;26196:18;;26068:152::o;26225:342::-;26427:2;26409:21;;;26466:2;26446:18;;;26439:30;26505:20;26500:2;26485:18;;26478:48;26558:2;26543:18;;26399:168::o;26572:325::-;26774:2;26756:21;;;26813:1;26793:18;;;26786:29;26851:4;26846:2;26831:18;;26824:32;26888:2;26873:18;;26746:151::o;26902:343::-;27104:2;27086:21;;;27143:2;27123:18;;;27116:30;27182:21;27177:2;27162:18;;27155:49;27236:2;27221:18;;27076:169::o;27250:582::-;;27466:3;27455:9;27451:19;27443:27;;27503:6;27497:13;27486:9;27479:32;27567:4;27559:6;27555:17;27549:24;27542:4;27531:9;27527:20;27520:54;27630:4;27622:6;27618:17;27612:24;27605:4;27594:9;27590:20;27583:54;27693:4;27685:6;27681:17;27675:24;27668:4;27657:9;27653:20;27646:54;27756:4;27748:6;27744:17;27738:24;27731:4;27720:9;27716:20;27709:54;27819:4;27811:6;27807:17;27801:24;27794:4;27783:9;27779:20;27772:54;27433:399;;;;:::o;27837:1234::-;;28027:3;28016:9;28012:19;28004:27;;28040:46;28076:9;28067:6;28061:13;28040:46;:::i;:::-;28133:4;28125:6;28121:17;28115:24;28148:56;28198:4;28187:9;28183:20;28169:12;28148:56;:::i;:::-;;28253:4;28245:6;28241:17;28235:24;28268:57;28319:4;28308:9;28304:20;28288:14;28268:57;:::i;:::-;;28374:4;28366:6;28362:17;28356:24;28389:56;28439:4;28428:9;28424:20;28408:14;28389:56;:::i;:::-;;28494:4;28486:6;28482:17;28476:24;28509:56;28559:4;28548:9;28544:20;28528:14;28509:56;:::i;:::-;;28621:4;28613:6;28609:17;28603:24;28596:4;28585:9;28581:20;28574:54;28684:4;28676:6;28672:17;28666:24;28659:4;28648:9;28644:20;28637:54;28747:4;28739:6;28735:17;28729:24;28722:4;28711:9;28707:20;28700:54;28773:6;28833:2;28825:6;28821:15;28815:22;28810:2;28799:9;28795:18;28788:50;;28857:6;28912:2;28904:6;28900:15;28894:22;28925:56;28977:2;28966:9;28962:18;28946:14;28925:56;:::i;:::-;-1:-1:-1;;29000:6:89;29048:15;;;29042:22;29022:18;;;;29015:50;27994:1077;:::o;29076:497::-;;29273:2;29262:9;29255:21;29311:6;29305:13;29354:4;29349:2;29338:9;29334:18;29327:32;29382:52;29430:2;29419:9;29415:18;29401:12;29382:52;:::i;:::-;29368:66;;29500:42;29494:2;29486:6;29482:15;29476:22;29472:71;29465:4;29454:9;29450:20;29443:101;29561:6;29553:14;;;29245:328;;;;:::o;29578:189::-;29753:6;29741:19;;;;29723:38;;29711:2;29696:18;;29678:89::o;29772:177::-;29918:25;;;29906:2;29891:18;;29873:76::o;29954:483::-;;30185:6;30174:9;30167:25;30228:6;30223:2;30212:9;30208:18;30201:34;30283:42;30275:6;30271:55;30266:2;30255:9;30251:18;30244:83;30363:3;30358:2;30347:9;30343:18;30336:31;30384:47;30426:3;30415:9;30411:19;30403:6;30384:47;:::i;30442:592::-;;;30585:11;30572:25;30675:66;30664:8;30648:14;30644:29;30640:102;30620:18;30616:127;30606:2;;30760:4;30754;30747:18;30606:2;30790:33;;30842:20;;;-1:-1:-1;30885:18:89;30874:30;;30871:2;;;30920:4;30914;30907:18;30871:2;30956:4;30944:17;;-1:-1:-1;30987:14:89;30983:27;;;30973:38;;30970:2;;;31024:1;31021;31014:12;31039:242;31109:2;31103:9;31139:17;;;31186:18;31171:34;;31207:22;;;31168:62;31165:2;;;31233:9;31165:2;31260;31253:22;31083:198;;-1:-1:-1;31083:198:89:o;31286:181::-;;31383:18;31375:6;31372:30;31369:2;;;31405:9;31369:2;-1:-1:-1;31456:4:89;31437:17;;;31433:28;;31359:108::o;31472:240::-;;31555:18;31547:6;31544:30;31541:2;;;31577:9;31541:2;-1:-1:-1;31625:4:89;31613:17;31632:66;31609:90;31701:4;31605:101;;31531:181::o;31717:258::-;31789:1;31799:113;31813:6;31810:1;31807:13;31799:113;;;31889:11;;;31883:18;31870:11;;;31863:39;31835:2;31828:10;31799:113;;;31930:6;31927:1;31924:13;31921:2;;;-1:-1:-1;;31965:1:89;31947:16;;31940:27;31770:205::o;31980:156::-;32068:42;32061:5;32057:54;32050:5;32047:65;32037:2;;32126:1;32123;32116:12;32141:120;32230:5;32227:1;32216:20;32209:5;32206:31;32196:2;;32251:1;32248;32241:12;32266:123;32353:10;32346:5;32342:22;32335:5;32332:33;32322:2;;32379:1;32376;32369:12;32394:116;32480:4;32473:5;32469:16;32462:5;32459:27;32449:2;;32500:1;32497;32490:12"
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "approveMax(address)": "571ac8b0",
              "approveMaxMinusOne(address)": "cab372ce",
              "approveZeroThenMax(address)": "639d71a9",
              "approveZeroThenMaxMinusOne(address)": "ab3fdd50",
              "astraCLSwapCallback(int256,int256,bytes)": "11c17848",
              "callPositionManager(bytes)": "b3a2af13",
              "checkOracleSlippage(bytes,uint24,uint32)": "f25801a7",
              "checkOracleSlippage(bytes[],uint128[],uint24,uint32)": "efdeed8e",
              "exactInput((bytes,address,uint256,uint256))": "b858183f",
              "exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))": "04e45aaf",
              "exactOutput((bytes,address,uint256,uint256))": "09b81346",
              "exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))": "5023b4df",
              "factory()": "c45a0155",
              "factoryClassic()": "4f04a0db",
              "getApprovalType(address,uint256)": "dee00f35",
              "increaseLiquidity((address,address,uint256,uint256,uint256))": "f100b205",
              "mint((address,address,uint24,int24,int24,uint256,uint256,address))": "11ed56c9",
              "multicall(bytes32,bytes[])": "1f0464d1",
              "multicall(bytes[])": "ac9650d8",
              "multicall(uint256,bytes[])": "5ae401dc",
              "positionManager()": "791b98bc",
              "pull(address,uint256)": "f2d5d56b",
              "refundAMB()": "c53af304",
              "selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)": "f3995c67",
              "selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)": "4659a494",
              "selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)": "a4a78f0c",
              "selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)": "c2e3140a",
              "setTime(uint256)": "3beb26c4",
              "swapExactTokensForTokens(uint256,uint256,address[],address)": "472b43f3",
              "swapTokensForExactTokens(uint256,uint256,address[],address)": "42712a67",
              "sweepToken(address,uint256)": "e90a182f",
              "sweepToken(address,uint256,address)": "df2ab5bb",
              "sweepTokenWithFee(address,uint256,address,uint256,address)": "e0e189a0",
              "sweepTokenWithFee(address,uint256,uint256,address)": "3068c554",
              "unwrapSAMB(uint256)": "acf8a4ed",
              "unwrapSAMB(uint256,address)": "a98ce37f",
              "unwrapSAMBWithFee(uint256,address,uint256,address)": "97e87d9d",
              "unwrapSAMBWithFee(uint256,uint256,address)": "bc122a54",
              "wrapAMB(uint256)": "e4a40545"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factoryClassic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factoryCL\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_positionManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_SAMB\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveMax\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveMaxMinusOne\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveZeroThenMax\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approveZeroThenMaxMinusOne\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"astraCLSwapCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callPositionManager\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"paths\",\"type\":\"bytes[]\"},{\"internalType\":\"uint128[]\",\"name\":\"amounts\",\"type\":\"uint128[]\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"}],\"internalType\":\"struct ICLSwapRouter.ExactInputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ICLSwapRouter.ExactInputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactInputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"}],\"internalType\":\"struct ICLSwapRouter.ExactOutputParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutput\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaximum\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct ICLSwapRouter.ExactOutputSingleParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"exactOutputSingle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factoryClassic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"getApprovalType\",\"outputs\":[{\"internalType\":\"enum IApproveAndCall.ApprovalType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"}],\"internalType\":\"struct IApproveAndCall.IncreaseLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"increaseLiquidity\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"internalType\":\"struct IApproveAndCall.MintParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"previousBlockhash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"positionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"pull\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitAllowed\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitAllowedIfNecessary\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"selfPermitIfNecessary\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_time\",\"type\":\"uint256\"}],\"name\":\"setTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMin\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"swapExactTokensForTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMax\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"swapTokensForExactTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"sweepTokenWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"}],\"name\":\"unwrapSAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountMinimum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeBips\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"unwrapSAMBWithFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"wrapAMB\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveMax(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveMaxMinusOne(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveZeroThenMax(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"approveZeroThenMaxMinusOne(address)\":{\"params\":{\"token\":\"The token to approve\"}},\"astraCLSwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IAstraCLPoolActions#swap call\"}},\"callPositionManager(bytes)\":{\"params\":{\"data\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"checkOracleSlippage(bytes,uint24,uint32)\":{\"params\":{\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"path\":\"The path to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"params\":{\"amounts\":\"The weights for each entry in `paths`\",\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"paths\":\"The paths to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}},\"exactInput((bytes,address,uint256,uint256))\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"exactOutput((bytes,address,uint256,uint256))\":{\"params\":{\"params\":\"The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"params\":{\"params\":\"The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata\"},\"returns\":{\"amountIn\":\"The amount of the input token\"}},\"getApprovalType(address,uint256)\":{\"details\":\"Lens to be called off-chain to determine which (if any) of the relevant approval functions should be called\",\"params\":{\"amount\":\"The amount to approve\",\"token\":\"The token to approve\"},\"returns\":{\"_0\":\"The required approval type\"}},\"increaseLiquidity((address,address,uint256,uint256,uint256))\":{\"params\":{\"params\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"mint((address,address,uint24,int24,int24,uint256,uint256,address))\":{\"params\":{\"params\":\"Calldata to pass along to the position manager\"},\"returns\":{\"result\":\"The result from the call\"}},\"multicall(bytes32,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"previousBlockhash\":\"The expected parent blockHash\"},\"returns\":{\"_0\":\"The results from each of the calls passed in via data\"}},\"multicall(bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"multicall(uint256,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"deadline\":\"The time by which this function must be called before failing\"},\"returns\":{\"_0\":\"The results from each of the calls passed in via data\"}},\"pull(address,uint256)\":{\"params\":{\"token\":\"The token to pull\",\"value\":\"The amount to pay\"}},\"refundAMB()\":{\"details\":\"Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps that use ether for the input amount\"},\"selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this).\",\"params\":{\"deadline\":\"A timestamp, the current blocktime must be less than or equal to this timestamp\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\",\"value\":\"The amount that can be spent of token\"}},\"selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this)\",\"params\":{\"expiry\":\"The timestamp at which the permit is no longer valid\",\"nonce\":\"The current nonce of the owner\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this) Can be used instead of #selfPermitAllowed to prevent calls from failing due to a frontrun of a call to #selfPermitAllowed.\",\"params\":{\"expiry\":\"The timestamp at which the permit is no longer valid\",\"nonce\":\"The current nonce of the owner\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\"}},\"selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"The `owner` is always msg.sender and the `spender` is always address(this). Can be used instead of #selfPermit to prevent calls from failing due to a frontrun of a call to #selfPermit\",\"params\":{\"deadline\":\"A timestamp, the current blocktime must be less than or equal to this timestamp\",\"r\":\"Must produce valid secp256k1 signature from the holder along with `v` and `s`\",\"s\":\"Must produce valid secp256k1 signature from the holder along with `r` and `v`\",\"token\":\"The address of the token spent\",\"v\":\"Must produce valid secp256k1 signature from the holder along with `r` and `s`\",\"value\":\"The amount that can be spent of token\"}},\"swapExactTokensForTokens(uint256,uint256,address[],address)\":{\"details\":\"Setting `amountIn` to 0 will cause the contract to look up its own balance, and swap the entire amount, enabling contracts to send tokens before calling this function.\",\"params\":{\"amountIn\":\"The amount of token to swap\",\"amountOutMin\":\"The minimum amount of output that must be received\",\"path\":\"The ordered list of tokens to swap through\",\"to\":\"The recipient address\"},\"returns\":{\"amountOut\":\"The amount of the received token\"}},\"swapTokensForExactTokens(uint256,uint256,address[],address)\":{\"params\":{\"amountInMax\":\"The maximum amount of input that the caller will pay\",\"amountOut\":\"The amount of token to swap for\",\"path\":\"The ordered list of tokens to swap through\",\"to\":\"The recipient address\"},\"returns\":{\"amountIn\":\"The amount of token to pay\"}},\"sweepToken(address,uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"token\":\"The contract address of the token which will be transferred to msg.sender\"}},\"sweepToken(address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\",\"params\":{\"amountMinimum\":\"The minimum amount of token required for a transfer\",\"recipient\":\"The destination address of the token\",\"token\":\"The contract address of the token which will be transferred to `recipient`\"}},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing the token from users\"},\"unwrapSAMB(uint256)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\"}},\"unwrapSAMB(uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\",\"params\":{\"amountMinimum\":\"The minimum amount of SAMB to unwrap\",\"recipient\":\"The address receiving AMB\"}},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"details\":\"The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\"},\"wrapAMB(uint256)\":{\"details\":\"The resulting SAMB is custodied by the router, thus will require further distribution\",\"params\":{\"value\":\"The amount of AMB to wrap\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveMax(address)\":{\"notice\":\"Approves a token for the maximum possible amount\"},\"approveMaxMinusOne(address)\":{\"notice\":\"Approves a token for the maximum possible amount minus one\"},\"approveZeroThenMax(address)\":{\"notice\":\"Approves a token for zero, then the maximum possible amount\"},\"approveZeroThenMaxMinusOne(address)\":{\"notice\":\"Approves a token for zero, then the maximum possible amount minus one\"},\"astraCLSwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\"},\"callPositionManager(bytes)\":{\"notice\":\"Calls the position manager with arbitrary calldata\"},\"checkOracleSlippage(bytes,uint24,uint32)\":{\"notice\":\"Ensures that the current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"notice\":\"Ensures that the weighted average current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"},\"exactInput((bytes,address,uint256,uint256))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another along the specified path\"},\"exactInputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another token\"},\"exactOutput((bytes,address,uint256,uint256))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed) that may remain in the router after the swap.\"},\"exactOutputSingle((address,address,uint24,address,uint256,uint256,uint160))\":{\"notice\":\"Swaps as little as possible of one token for `amountOut` of another token that may remain in the router after the swap.\"},\"increaseLiquidity((address,address,uint256,uint256,uint256))\":{\"notice\":\"Calls the position manager's increaseLiquidity function\"},\"mint((address,address,uint24,int24,int24,uint256,uint256,address))\":{\"notice\":\"Calls the position manager's mint function\"},\"multicall(bytes32,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(uint256,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"pull(address,uint256)\":{\"notice\":\"Transfers the specified amount of a token from the msg.sender to address(this)\"},\"refundAMB()\":{\"notice\":\"Refunds any AMB balance held by this contract to the `msg.sender`\"},\"selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend a given token from `msg.sender`\"},\"selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\"},\"selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\"},\"selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Permits this contract to spend a given token from `msg.sender`\"},\"swapExactTokensForTokens(uint256,uint256,address[],address)\":{\"notice\":\"Swaps `amountIn` of one token for as much as possible of another token\"},\"swapTokensForExactTokens(uint256,uint256,address[],address)\":{\"notice\":\"Swaps as little as possible of one token for an exact amount of another token\"},\"sweepToken(address,uint256)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender\"},\"sweepToken(address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient\"},\"sweepTokenWithFee(address,uint256,address,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to recipient, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"sweepTokenWithFee(address,uint256,uint256,address)\":{\"notice\":\"Transfers the full amount of a token held by this contract to msg.sender, with a percentage between 0 (exclusive) and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMB(uint256)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB.\"},\"unwrapSAMB(uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB.\"},\"unwrapSAMBWithFee(uint256,address,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to recipient as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"unwrapSAMBWithFee(uint256,uint256,address)\":{\"notice\":\"Unwraps the contract's SAMB balance and sends it to msg.sender as AMB, with a percentage between 0 (exclusive), and 1 (inclusive) going to feeRecipient\"},\"wrapAMB(uint256)\":{\"notice\":\"Wraps the contract's AMB balance into SAMB\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockTimeSwapRouter.sol\":\"MockTimeSwapRouter02\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":{\"keccak256\":\"0xaa82f63f0c930e51d6aaae0d59e7bf3ef5b32371ac0549f6e07bfcab5b4dcb16\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73419af0b4f35f02c3b89d387d6ac46041637a7133e249de617103b7567bf4c4\",\"dweb:/ipfs/QmTfwEX1dCoUUUMaMFzDnqDcFXihHQnEG1fbkBFpidRs8o\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"@airdao/astra-cl-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x5340256039418f5d03512a44173d3dcf1da277a73a461e06fb5668f49cfc46f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75dee99795d1125875233a7f1d356935099cc97b4085c0e451060d77db85d144\",\"dweb:/ipfs/QmTGqyrxVLQd8TBaarqSQDiYvq1QFutCdmTyXk6JpxzKTN\"]},\"@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0x86715eb960f18e01ac94e3bba4614ed51a887fa3c5bd1c43bf80aa98e019cf2d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bfc1d5d58e59015086b0e65a6c3a2ddad312e2350480510f6c0c8167f3d71a37\",\"dweb:/ipfs/QmQndULYjFsHKHjMAKLMfc12vWbVB5FawtioHtvwcWRJZp\"]},\"@airdao/astra-cl-core/contracts/libraries/SafeCast.sol\":{\"keccak256\":\"0xd4c1c1b67f946b077d7c52a158113763a89a210fc2927b8491055a962ecd18c0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5344400c74320ca8dbe19241db7ff49babbd6c875c1b561c79d6e4315a9fb5f9\",\"dweb:/ipfs/QmRKCNTbkovxK1WvejXZr3iAHhGN97ZT1yWGsWCJFkrT5X\"]},\"@airdao/astra-cl-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xe22d07f1ebf9c8468c81cb6905bfc8f8a54fa2f9b4a50742202a47cdbcb5af80\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d4773ca5008d2a2f496370695942c8ba3d6e1d487adbf5cda1149da12e3a6268\",\"dweb:/ipfs/QmcPYTLpEWfU8e3KAYBfHH7uYR4tGAkvnWrWS1CG8EkyLC\"]},\"@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol\":{\"keccak256\":\"0x1aa66f71234064a0c0976f62233f2edbd69554e5ad817dc97f318bc8e11f4da6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b3a40450e9d6b0f9cb91b40ffd6215612505bd74e7d954529958f4edc6ee7b93\",\"dweb:/ipfs/QmewsUCHK5N5KhNtqEwK8JgsXFADyFBrQRS5HoDWM5gi3b\"]},\"@airdao/astra-cl-periphery/contracts/base/Multicall.sol\":{\"keccak256\":\"0xfcfd78c62d2145634a791d5680a1af7055fbd301c415d29c09333c99c37d9037\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0d1c8f4a18cec8ad49e5269c5b07c7f6fd497dfc1b7b777f8ddcfb8055efd803\",\"dweb:/ipfs/QmdeCTnfHM3RGtQuo3DMX9m7gPspGGwQp7ho6m9cJjjnER\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol\":{\"keccak256\":\"0x88e12ecce0236f43cac955dee8ae50e8ffba7d133625ba18b590d51b9e030098\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9f10d1317582a91e7842901c6888c4bb28939817cefa3d3f88458c2ec653b6ed\",\"dweb:/ipfs/QmP2qV22Uq6Pou1VkgNzRnXHzNJ71CBpVBYhYDnLccBx8U\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x93f6d5b75cb4e7204ae63f45722eb82ac62f732d56cbf31f3a65ce2ea262cc6d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a23090fa2e584774818eeb9e548086b8c383acd9d35830845191fd114bfbf03b\",\"dweb:/ipfs/QmXr9EGVoUMCGttgsDFJZ5UBrBjY42qBV2FRakCDi8aeTs\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol\":{\"keccak256\":\"0xc736bab599912d6212e8414ee4ba7af0c1e08ff6aa11caa85f5f6e07f7d421c3\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://06f6c13a86900c71fa486fc029a59d1b7eb96162bb42885b5f845d995294893e\",\"dweb:/ipfs/QmUcBxMsmncw9n6eXhzzwSasGBvBGKH5FT8HSrAxrsXV4A\"]},\"@airdao/astra-cl-periphery/contracts/base/SelfPermit.sol\":{\"keccak256\":\"0xe75aedfc1eff6c84adac82b2bc41d197127a74530f0c344a7a122a6c8ec186be\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://05150ae691e10f2c9c82ad46de86c8b6683d8eba995e6f9ff82eaefc064902e9\",\"dweb:/ipfs/QmdKxxmxCPxV7qe11MbRhpaQXDAnnKWH1BoTMmEXYPAA7g\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IERC721Permit.sol\":{\"keccak256\":\"0x383d39a13ce10019d4ebd27a694d085c03a1498a1cc31ec1511fac91b5296342\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3d22d9cc7a33829bd31da42d96bd75401a675ef32c8eb4d9e3074c21ec1241b6\",\"dweb:/ipfs/QmNrvD2T3k3wH5kWz6Kss9mSjxdJhXAA6NTH1Evj8j3k6A\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol\":{\"keccak256\":\"0xa8f9d0061ee730a522dc4bae6bd5cabb3e997e2c5983da183e912bdca93dfa7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://496b68d4f72d58cc83cf51bd9cc9c99aaa46dc3c3df7c951a9e50ba29ee33016\",\"dweb:/ipfs/Qmc3bkXwuRP8mDpcKgvLgbCKn8tD8PGCaBjnLHSPMJCRGD\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol\":{\"keccak256\":\"0x920448f826d2d8e40aae06ce855644abac394c085a769605399d80cb36bde27f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6b299cd039cf1fb92c9c58f666dfbb2753431f3904bed659ddd653ad9a503045\",\"dweb:/ipfs/QmZWb11WyJgGCW35e2opF3Ncstu59krJCDPAZpHWU9rqix\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0x57bd5b069f6e66edd42a9b41e5864bfcd2aa7d404337d6c57a083fb589fc59bd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4efa92b18c295755437180f93a19179ef15dfe24a6db10ae876c41247fd4a907\",\"dweb:/ipfs/QmYJTRqE5BEjqyNoZqoctVFgxZF336cK9ba1RSd2LbgFkG\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol\":{\"keccak256\":\"0x95eb2970f74b59074666d156779b7eeb1a34228476ac26f987f6f563b834098d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bd17994291ec4231d4fa66af52e0cfd4f7883365ecb41f534acf08afffa8806d\",\"dweb:/ipfs/QmUjst3v8zu8DE9Ue3YHJJoRLcZGd9CXP3jVoC2tSAUjs9\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPoolInitializer.sol\":{\"keccak256\":\"0x5d9b76c0eed9d836f8ab1d65a37921c56c46a69802f28c312f239ce159634473\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ab60ec035cd2f600d7e89828bcf1427a674defdcb4c511679144aae42273ba2d\",\"dweb:/ipfs/QmYWy2dAG2Mq4BUwybjVCbGtXYRG8Lz1jRfK6L924YuwRa\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol\":{\"keccak256\":\"0x402d04301ffd41853f4949a574b8853c46d076910ed734f5e4478bf64369a3ed\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6a5536d179ff3777920ff8ed60cfc457f7a4dda1373c8f0394b2a8e0fe537525\",\"dweb:/ipfs/QmdaYGikTmmi2vbECnoomZ8vS8PBiD4Bq8BoFCYqFZmKgR\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol\":{\"keccak256\":\"0x8c4c1b8e724e0a78cb691d703dd37cd91b8bd6600537fb227807a194025a792d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://783be851155842a02cdb0483c3a69ecc0e7ae8545f65cec1d4aeb355b2026a7d\",\"dweb:/ipfs/QmZNBQosTjpGNKB3Eo2K6Zzye7FYiLVoEki5iPB2Y69jz2\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol\":{\"keccak256\":\"0x5b5789677c6b7e447fd774a5c065d9547c85f22e950e18690f686a6b779d78dc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c2e45681c8d5c704fbfef7369ff7878e6af2d987ba564eb97148ee6e8db87e49\",\"dweb:/ipfs/Qmeg4ynPmWipSVb6BRj4o8uZRbE2bQk8nCwp9apMAEq8Xk\"]},\"@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol\":{\"keccak256\":\"0xed1b8acd0184eb321d5f4b5c2576608d1c12f5db1bb72d950054438f7f1946a6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f55d6aca86dcf1f1ab6413f48964f821306a29914c2117c16f20446faa5d6d0a\",\"dweb:/ipfs/QmWKbbg6kA9kkPVrCh6hJMnPhK1NhuVoHEd9s3vmYWsvTa\"]},\"@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol\":{\"keccak256\":\"0xf21a3d7e2bc14386ce7b072b124b580df53441a32591770845860e8947f942d0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6941e21d9bc52bddc65079c5e7bc9d6ffd6553f6ed7f3d3b340996a55115b46f\",\"dweb:/ipfs/QmaDJ9uafahho77WP5izBCRL4W3mVM7NFL5q5QR5YvAC3A\"]},\"@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol\":{\"keccak256\":\"0xf9dab1f6ac5c82c1a19688e900ab355a266e85af4f76346db925789352081c31\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1ba91097b8fdd8a46d9b837e7a80f8e3ccdaeb3d49870c6558b88d5064abdfce\",\"dweb:/ipfs/QmaocoW3nkgMSZjTLXm15ERTPN2yFLMAWE114s1R99hgrS\"]},\"@airdao/astra-cl-periphery/contracts/libraries/Path.sol\":{\"keccak256\":\"0x0a6928608f48763796089e22dfc02a462cce63bb7727663961b3ed8c4f3eb862\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73bb4f107faf873db8700ce8950d2c4c88d41e0e1716da599bb733ad884f95eb\",\"dweb:/ipfs/QmZXSaPVpgDXpkKqYRdByJ3UXaMV2ATkr7V72nRZij8wmB\"]},\"@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0xdd82100913bcb7c490e9e6912ab33994bd97d5a59e67209826ebf917bc8271c1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ecfc24c77d80aa718604d8a2c4d59460b76b5fd567d15206414e3838dd6698b7\",\"dweb:/ipfs/QmVtUC9dnade4RkzXaSqEFdAkiEftJ777jmT619LX2VLGv\"]},\"@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x0fef3409a5a161cd12b777fdfa86845d64b86f72c78b8312c9e3c92f9017e5c5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c9df2c76e4581a1d343ea1dd1d0478df7f1c1eef1b476ccea452367ef5b75e65\",\"dweb:/ipfs/QmWZVBRQcn4ekrmCDFkM4BSRAZ1m72GHzUnfzUn39PwQow\"]},\"@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol\":{\"keccak256\":\"0xd2259aac0746706697d6e8097a48b592308fb1e1e78077cc3e0540234dee6648\",\"urls\":[\"bzz-raw://525ef590cf7e5c54030527703a7409b74c70497715aebf8dae0b877ee136dac7\",\"dweb:/ipfs/QmVgR4Pk3i8X8oS8xxNnVsFkDXXGP2wu4YvhG23e3z5K9q\"]},\"@openzeppelin/contracts/drafts/IERC20Permit.sol\":{\"keccak256\":\"0x1aab7754719ba764a8a05bec47e975001400f62986474945eb3dbee6d871259f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c14e8ff1b384bdb68f262669364b1e79fbbd82b85938b7ce788a1395c40c6a2\",\"dweb:/ipfs/QmUKLXfSeEuRUXkeWLBhjHTKeSFoNBCS1RaMXv1AmHXYzn\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xd2f30fad5b24c4120f96dbac83aacdb7993ee610a9092bc23c44463da292bf8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3d4e72409e392c7694b6405a0136cf073d8da016df33ef8f9ad195f724ebfea\",\"dweb:/ipfs/QmPGcddKq6CgsiKnxUUif2q76wRqP3dmdQ6bKuHCLmb8Wa\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xb11597841d47f7a773bca63ca323c76f804cb5d944788de0327db5526319dc82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://930d2da1934886a1098753be4173dd89c45ca0b306a1930accd37e00b1af4aaf\",\"dweb:/ipfs/QmVSXnvEV41d43k8cfpANHoTYMKgBDBL8iCbxkLfEtQZBe\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol\":{\"keccak256\":\"0x2789dfea2d73182683d637db5729201f6730dae6113030a94c828f8688f38f2f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36374eaa68c0737bf7e1ae13d55327b4868fb0825e971ee729f4b8d355ededb4\",\"dweb:/ipfs/QmYN9yuzz4P5SumiT6rgYgTEY8MhnPQapMwx2LHxRKju7r\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0xc82c7d1d732081d9bd23f1555ebdf8f3bc1738bc42c2bfc4b9aa7564d9fa3573\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb07e4ff3352161510a0d1536fe93f3c62526358e073a8bab2a8abbb27d0da1\",\"dweb:/ipfs/QmX7K1JjnWKT1JzZT92Qx5zNJQYbssE533TLFHP88hj2fb\"]},\"contracts/CLSwapRouter.sol\":{\"keccak256\":\"0x030d790990bc095cf80ecb7d6b72cd3b04b0df1b6fcff874218d9e44f7dda6b8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://106cd65a78f0e3efd207074ff77e2959fe1273cb791dc6a3c8cfe2088c883b4a\",\"dweb:/ipfs/QmfKV4VMqshiJnaYbWAttPrZg1RUnq6qUNxJW9xQPpqNEb\"]},\"contracts/ClassicSwapRouter.sol\":{\"keccak256\":\"0xf9fb7f5d64b4f11e961de711759194b868544e3fb5784c743528e3b26a1e7e8d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://075bc67a2a15ca7e3708df20b351d763779a40b01ef22d6836aec827cc9b9eef\",\"dweb:/ipfs/QmeiSdGNmoAorUzhw91rzQwhmRvQ5JPCPNejeX6jk9w2ab\"]},\"contracts/SwapRouter02.sol\":{\"keccak256\":\"0xdc3533f16f44d2aa7c8f18ec85082e97ac6dc11193f3d010f8557138193e6367\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://99a12e004a3105ebde42f0fd6f84f40d54f1641e3cca3a83e271b5f5206c3363\",\"dweb:/ipfs/QmU9yty4rAja8ynQhQmVYguwa9y9ftXGAEyJRB1gmyJgom\"]},\"contracts/base/ApproveAndCall.sol\":{\"keccak256\":\"0x13063feddef07fea199a6a68e44f1966c6d5a68802671be8e2b1cd2d8100206d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://33a8388bd3661aec00be96f965aec095646179b34c53bea67a27130f5b7c3bbd\",\"dweb:/ipfs/QmaUvz1xAe2gjWiX7aZzxA36XSSXhYzChTGQZYYUbifQan\"]},\"contracts/base/ImmutableState.sol\":{\"keccak256\":\"0xa52c8265326bed23bab067cfaf4a260d12a1b653618920534bb3e6d65c51e047\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1579ffa9db15cb07f0dfc0947feaee663c992455ba719373ac358254aad879ca\",\"dweb:/ipfs/QmSyStKaiERPMswqVFsn37CAGanBoTYNA6FUVWyZr9xDtK\"]},\"contracts/base/MulticallExtended.sol\":{\"keccak256\":\"0xce6129abeea57b50dafe59cd055dc6fcc4f2b788bbbc28f4a1b3ae313cf5306e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e751053bdcedb9cbdb4ef995abf6e200a185372ac5bfe6217a5fcb92fec6d209\",\"dweb:/ipfs/QmeQgjAooNtBfN3jB696tyj3Aa5km6qvwFCij6s4nwbKRU\"]},\"contracts/base/OracleSlippage.sol\":{\"keccak256\":\"0x07ac427a696edbfd94c4bed8effc35b0cdd58e03ef686b90cdb53595c192c735\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bdf770fc6939af09a7a804446d1d6ab9e230ff0255bb2922ae88778677071ecc\",\"dweb:/ipfs/QmYRaL4z9KFDtDTkehTXmfNMntPLxsjtAUPp5GoNELvdiK\"]},\"contracts/base/PeripheryPaymentsExtended.sol\":{\"keccak256\":\"0xf2685da6776cf0dc988436351c93f23087320cad14f6a0ff8a8f5fc37847dd99\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a9514e43dcb646ca0e6ddb628d8371f875c843a46307eee68ecf5f89c8cb09fd\",\"dweb:/ipfs/QmeDK6SA7MoZ2VZ1t4e44DbzW1EX7WXjfeNVvaxpzZ8DMh\"]},\"contracts/base/PeripheryPaymentsWithFeeExtended.sol\":{\"keccak256\":\"0x1c57739b3cb14b514f418301c59eac6a385d5d12bd0d674172e37b45abd540d2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5381be26637b6c2b2b6418a2cab3fd66165b472182d2b17474c7ecb0eb034fec\",\"dweb:/ipfs/QmRuNHixFfkVtHSsBih9LSFrqn9XtsbaqM6yRXC1YoHJEn\"]},\"contracts/base/PeripheryValidationExtended.sol\":{\"keccak256\":\"0x9514e5bb1c2b3c8589c74ad4c0e3ac469355ad8a9828ce605d9453b24e186684\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b221acf356ba8fb1f8563a783064595a3e4c0e5afe8ed19ec9102d5b59f0e621\",\"dweb:/ipfs/QmSojhh19Kyci7eFByVXy2gi5rGHmzMeNDvmDszJkDLxLZ\"]},\"contracts/interfaces/IApproveAndCall.sol\":{\"keccak256\":\"0x7d3824ad9a4090e2f4bb98d844f6ceb720f8c2608a909e4c0d86584be32d7fce\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8230cdc6fd9171081943821d71888cec07bf4bae0b5fb85fa7c450f3c2b1ad44\",\"dweb:/ipfs/QmXF9NtVtCjr92ngVwwDjSGpiktGz2BDPHsvVoFPgkSP4K\"]},\"contracts/interfaces/ICLSwapRouter.sol\":{\"keccak256\":\"0xf21791d14cb0fa67db54f04c322e294616240fef896fec0214be7aa196b767ad\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f3d1acf197037424a8e4901b64b4a35381d88ae361c09c5f3660ae59c5cac190\",\"dweb:/ipfs/QmaAHSbWfriiUsiiArgSiuJqw6s9BeP6Mfy3rZsoTzQoiL\"]},\"contracts/interfaces/IClassicSwapRouter.sol\":{\"keccak256\":\"0x5b35aa4bb97961db53c1f178c034c40a9ae4ce2606356b06620b918a5f91ae5a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8e63d5f61b1b28deddeddc89da42e85429966732a661bd53738ca6fb1a478d15\",\"dweb:/ipfs/QmVX5sjGijDfGFNP767L4rtsiL5DC84yJSfUpWiwJN84CP\"]},\"contracts/interfaces/IImmutableState.sol\":{\"keccak256\":\"0x25fee5bdbdbbb57ffb91c3ab66b9c2db351e7f6061ad2f98ef2991f6b27a15e0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7bf237158fbcfabf64bb0da5c7ff0b0161ed76c45c7197ecc5ac54b338786bfc\",\"dweb:/ipfs/QmT74A24bW9qu1dJUxPQLaqLBnSe57PVgfUJxpu3sEf9fg\"]},\"contracts/interfaces/IMulticallExtended.sol\":{\"keccak256\":\"0x0fee6c8fe77db406ea3a2c34767322d4170108596d877fcf9601315de8df502a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://32eb6261abd448977034e5ed22c7e1757f4fd1d667362bb1ad7a972169ce78b8\",\"dweb:/ipfs/QmazeBaXFvy3dTPsoaeuaEsxHEruikeSAXcXkFzyTUvmvQ\"]},\"contracts/interfaces/IOracleSlippage.sol\":{\"keccak256\":\"0xa9d1e4336b20fa992ab6b742f2750b3fb660e0d667eac304c5bbd8a8ea96edfc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://afe7afc18f293b6bc189550f20c318ecccda37241409a031bc94cf7412420dbd\",\"dweb:/ipfs/QmVuiKox1K4Df5QS6RLHQDprYaDMXRRvHW3ym3NDdi3vrq\"]},\"contracts/interfaces/IPeripheryPaymentsExtended.sol\":{\"keccak256\":\"0x373eb395bc1f5b9c92fbdbdf676d12784c907e7253ea9f262621e8ae812e0938\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5b41980a17c8fc46d28a1eca9462ad3b07c1c2b0c547f3cb7ee63b1ca126b96f\",\"dweb:/ipfs/QmcVfvRiaxDA3MBdZECouvChaMzuqgRuPQTnn3raLEukYb\"]},\"contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol\":{\"keccak256\":\"0xfab1e04cf78e4769a60ddff118648cf7a50cd874d500265c315ee6e2d0ac733c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://711d79e27131b59f79d0b7c94eed61b0b08d61bca9066a921a4f47ebc0f3c76f\",\"dweb:/ipfs/QmTw4pADZp6vqygUMVThgMYx7LtT1jwVLM4NcZvPhjSvpT\"]},\"contracts/interfaces/ISwapRouter02.sol\":{\"keccak256\":\"0x366b171042947689893be1ef6934e86a9a5739df07fad70ce3c53bd379435b82\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c707e5b60692f3214f02e1a30dce6215af9c5fcd8e9003f844a43f9ed348900b\",\"dweb:/ipfs/QmZZbwcZymjh34YXP1fEsQcFCZyGWGW8UAGdrkLM31EYFh\"]},\"contracts/libraries/AstraClassicLibrary.sol\":{\"keccak256\":\"0xa0206fe7bc64db0582ab194bf47755b617a204e7e7768593968f9c6e7e7e5d87\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://be4c4afea9bef22f244b7ed926651026515c385410fb469876eff92a21548036\",\"dweb:/ipfs/QmeqP6cPs2igCKpQsA7D8sUiniJtTGXRx5K3rc3XAbVWL3\"]},\"contracts/libraries/Constants.sol\":{\"keccak256\":\"0x6eeb0392bef0afeb03e18f0e2824a96e76e55282176ea8b64e14a0fba91c9bf2\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7ed2216986be881a9924e6efb5f3848367d0fad8cc60c4eb1772791773fedc45\",\"dweb:/ipfs/QmemwuJYDGRheUQxtzxH6mV18xTBFYtVJK26DNtbSSaC9k\"]},\"contracts/test/MockTimeSwapRouter.sol\":{\"keccak256\":\"0x81cd3afacb95d3c3c82e94a071a59c8e2e325a8e1f7cfa9cadce1fe4486d77c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://efa902dfe665260a2436099852c7485edf5c4e0e48f8db8cff9795ea117b239d\",\"dweb:/ipfs/QmTXaYsLWgMqtvGDLpsknE6A9arS22xEPg8fuJvWWJaiC7\"]}},\"version\":1}"
        }
      },
      "contracts/test/OracleSlippageTest.sol": {
        "OracleSlippageTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_factory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_WETH9",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "SAMB",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "paths",
                  "type": "bytes[]"
                },
                {
                  "internalType": "uint128[]",
                  "name": "amounts",
                  "type": "uint128[]"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint24",
                  "name": "maximumTickDivergence",
                  "type": "uint24"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "checkOracleSlippage",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IAstraCLPool",
                  "name": "pool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenIn",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "fee",
                  "type": "uint24"
                }
              ],
              "name": "registerPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_time",
                  "type": "uint256"
                }
              ],
              "name": "setTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IAstraCLPool",
                  "name": "pool",
                  "type": "address"
                }
              ],
              "name": "testGetBlockStartingAndCurrentTick",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "blockStartingTick",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "currentTick",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "paths",
                  "type": "bytes[]"
                },
                {
                  "internalType": "uint128[]",
                  "name": "amounts",
                  "type": "uint128[]"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "testGetSyntheticTicks",
              "outputs": [
                {
                  "internalType": "int256",
                  "name": "averageSyntheticAverageTick",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "averageSyntheticCurrentTick",
                  "type": "int256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "path",
                  "type": "bytes"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsAgo",
                  "type": "uint32"
                }
              ],
              "name": "testGetSyntheticTicks",
              "outputs": [
                {
                  "internalType": "int256",
                  "name": "syntheticAverageTick",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "syntheticCurrentTick",
                  "type": "int256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:507:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "76:117:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "86:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "101:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "95:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "95:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "86:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "171:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "180:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "183:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "173:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "173:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "173:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "130:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "141:5:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "156:3:89",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "161:1:89",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "152:3:89"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "152:11:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "165:1:89",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "148:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "148:19:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "137:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "137:31:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "127:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "127:42:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "120:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "120:50:89"
                              },
                              "nodeType": "YulIf",
                              "src": "117:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "55:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "66:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:179:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "296:209:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "342:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "351:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "359:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "344:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "344:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "344:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "317:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "326:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "313:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "313:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "338:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "309:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "309:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "306:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "377:52:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "419:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "387:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "387:42:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "377:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "438:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "484:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "495:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "480:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "480:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "448:31:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "448:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "438:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "254:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "265:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "277:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "285:6:89",
                            "type": ""
                          }
                        ],
                        "src": "198:307:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_t_address_fromMemory(headStart)\n        value1 := abi_decode_t_address_fromMemory(add(headStart, 32))\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60c06040523480156200001157600080fd5b5060405162001b9938038062001b99833981016040819052620000349162000070565b6001600160601b0319606092831b8116608052911b1660a052620000a7565b80516001600160a01b03811681146200006b57600080fd5b919050565b6000806040838503121562000083578182fd5b6200008e8362000053565b91506200009e6020840162000053565b90509250929050565b60805160601c60a05160601c611ac8620000d1600039806102295250806102625250611ac86000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063ac810c6c11610076578063eaea4bfc1161005b578063eaea4bfc14610138578063efdeed8e1461014b578063f25801a71461015e576100a3565b8063ac810c6c1461010f578063c45a015514610130576100a3565b80630f64f6a9146100a85780631d31557e146100bd5780633beb26c4146100e757806390793ea8146100fa575b600080fd5b6100bb6100b63660046117e4565b610171565b005b6100d06100cb3660046116a7565b610208565b6040516100de929190611977565b60405180910390f35b6100bb6100f53660046118d4565b610222565b610102610227565b6040516100de9190611942565b61012261011d3660046117c1565b61024b565b6040516100de929190611963565b610102610260565b6100d0610146366004611771565b610284565b6100bb610159366004611623565b61029c565b6100bb61016c36600461171c565b6102ff565b73ffffffffffffffffffffffffffffffffffffffff92831660008181526020818152604080832095871680845295825280832062ffffff9095168084529482528083208054979098167fffffffffffffffffffffffff000000000000000000000000000000000000000097881681179098559482528181528482209282529182528381209281529190522080549091169091179055565b600080610216858585610357565b91509150935093915050565b600155565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806102578361056a565b91509150915091565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806102918484610802565b915091509250929050565b6000806102aa868685610357565b915091508362ffffff16818303126102f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ee906119f3565b60405180910390fd5b505050505050565b60008061030c8584610802565b915091508362ffffff1681830312610350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ee906119f3565b5050505050565b600080835185511461036857600080fd5b6000855167ffffffffffffffff8111801561038257600080fd5b506040519080825280602002602001820160405280156103bc57816020015b6103a9611476565b8152602001906001900390816103a15790505b5090506000865167ffffffffffffffff811180156103d957600080fd5b5060405190808252806020026020018201604052801561041357816020015b610400611476565b8152602001906001900390816103f85790505b50905060005b8751811015610543576000806104428a848151811061043457fe5b602002602001015189610802565b9150915061044f82610a8a565b85848151811061045b57fe5b60200260200101516000019060020b908160020b8152505061047c81610a8a565b84848151811061048857fe5b60200260200101516000019060020b908160020b815250508883815181106104ac57fe5b60200260200101518584815181106104c057fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505088838151811061050257fe5b602002602001015184848151811061051657fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff9092169101525050600101610419565b5061054d82610aa0565b60020b935061055b81610aa0565b60020b92505050935093915050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156105b657600080fd5b505afa1580156105ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ee919061183d565b50939750919550935050600161ffff841611915061063a9050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ee906119bc565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016106769190611a2a565b60806040518083038186803b15801561068e57600080fd5b505afa1580156106a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c691906118ec565b5050915091506106d4610b8c565b63ffffffff168263ffffffff16146106ee578495506107f9565b60008361ffff1660018561ffff168761ffff1601038161070a57fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b815260040161074b9190611a39565b60806040518083038186803b15801561076357600080fd5b505afa158015610777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079b91906118ec565b93505092509250806107d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ee90611985565b82860363ffffffff811683870360060b816107f057fe5b059a5050505050505b50505050915091565b60008060008061081186610b92565b90506000805b82811015610a2f57600080600061082d8b610bbd565b9250925092506000610840848484610bee565b905060008063ffffffff8d16610869576108598361056a565b600291820b9350900b905061090b565b610873838e610c33565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156108c457600080fd5b505afa1580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc919061183d565b50505060029290920b93505050505b6001890387141561094c578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610995061095b565b6109558e611064565b9d508597505b60008715806109fc57508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16106109cc578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16106109fc565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015610a11579b82019b9a81019a610a1c565b828d039c50818c039b505b5050600190950194506108179350505050565b5082610a80577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b80600281900b8114610a9b57600080fd5b919050565b6000806000805b8451811015610b3557848181518110610abc57fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16858281518110610ae657fe5b60200260200101516000015160020b0283019250848181518110610b0657fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16820191508080600101915050610aa7565b50808281610b3f57fe5b059250600082128015610b5a5750808281610b5657fe5b0715155b15610b85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201915b5050919050565b60015490565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b60008080610bcb848261109f565b9250610bd884601461119f565b9050610be584601761109f565b91509193909250565b73ffffffffffffffffffffffffffffffffffffffff928316600090815260208181526040808320948616835293815283822062ffffff90931682529190915220541690565b60008063ffffffff8316610ca857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040805160028082526060820183526000926020830190803683370190505090508381600081518110610cd757fe5b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110610d0057fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015610d9b578181015183820152602001610d83565b505050509050019250505060006040518083038186803b158015610dbe57600080fd5b505afa158015610dd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040908152811015610e1957600080fd5b8101908080516040519392919084640100000000821115610e3957600080fd5b908301906020820185811115610e4e57600080fd5b8251866020820283011164010000000082111715610e6b57600080fd5b82525081516020918201928201910280838360005b83811015610e98578181015183820152602001610e80565b5050505090500160405260200180516040519392919084640100000000821115610ec157600080fd5b908301906020820185811115610ed657600080fd5b8251866020820283011164010000000082111715610ef357600080fd5b82525081516020918201928201910280838360005b83811015610f20578181015183820152602001610f08565b5050505090500160405250505091509150600082600081518110610f4057fe5b602002602001015183600181518110610f5557fe5b6020026020010151039050600082600081518110610f6f57fe5b602002602001015183600181518110610f8457fe5b60200260200101510390508763ffffffff168260060b81610fa157fe5b05965060008260060b128015610fcb57508763ffffffff168260060b81610fc457fe5b0760060b15155b15610ff6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff82168161105457fe5b0496505050505050509250929050565b80516060906110999083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161128f565b92915050565b60008182601401101561111357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561118657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561121357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561128657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f01101561130357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561137457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b818301845110156113e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015611405576040519150600082526020820160405261146d565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561143e578051835260209283019201611426565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015290565b600082601f83011261149d578081fd5b813560206114b26114ad83611a66565b611a42565b82815281810190858301855b858110156114e7576114d5898684358b010161157b565b845292840192908401906001016114be565b5090979650505050505050565b600082601f830112611504578081fd5b813560206115146114ad83611a66565b8281528181019085830183850287018401881015611530578586fd5b855b858110156114e75781356fffffffffffffffffffffffffffffffff81168114611559578788fd5b84529284019290840190600101611532565b80518015158114610a9b57600080fd5b600082601f83011261158b578081fd5b813567ffffffffffffffff81111561159f57fe5b6115d060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611a42565b8181528460208386010111156115e4578283fd5b816020850160208301379081016020019190915292915050565b805161ffff81168114610a9b57600080fd5b803562ffffff81168114610a9b57600080fd5b60008060008060808587031215611638578384fd5b843567ffffffffffffffff8082111561164f578586fd5b61165b8883890161148d565b95506020870135915080821115611670578485fd5b5061167d878288016114f4565b93505061168c60408601611610565b9150606085013561169c81611aa9565b939692955090935050565b6000806000606084860312156116bb578283fd5b833567ffffffffffffffff808211156116d2578485fd5b6116de8783880161148d565b945060208601359150808211156116f3578384fd5b50611700868287016114f4565b925050604084013561171181611aa9565b809150509250925092565b600080600060608486031215611730578283fd5b833567ffffffffffffffff811115611746578384fd5b6117528682870161157b565b93505061176160208501611610565b9150604084013561171181611aa9565b60008060408385031215611783578182fd5b823567ffffffffffffffff811115611799578283fd5b6117a58582860161157b565b92505060208301356117b681611aa9565b809150509250929050565b6000602082840312156117d2578081fd5b81356117dd81611a84565b9392505050565b600080600080608085870312156117f9578384fd5b843561180481611a84565b9350602085013561181481611a84565b9250604085013561182481611a84565b915061183260608601611610565b905092959194509250565b600080600080600080600060e0888a031215611857578485fd5b875161186281611a84565b8097505060208801518060020b8114611879578586fd5b9550611887604089016115fe565b9450611895606089016115fe565b93506118a3608089016115fe565b925060a088015160ff811681146118b8578283fd5b91506118c660c0890161156b565b905092959891949750929550565b6000602082840312156118e5578081fd5b5035919050565b60008060008060808587031215611901578182fd5b845161190c81611aa9565b8094505060208501518060060b8114611923578283fd5b604086015190935061193481611a84565b91506118326060860161156b565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600292830b8152910b602082015260400190565b918252602082015260400190565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b61ffff91909116815260200190565b90815260200190565b60405181810167ffffffffffffffff81118282101715611a5e57fe5b604052919050565b600067ffffffffffffffff821115611a7a57fe5b5060209081020190565b73ffffffffffffffffffffffffffffffffffffffff81168114611aa657600080fd5b50565b63ffffffff81168114611aa657600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1B99 CODESIZE SUB DUP1 PUSH3 0x1B99 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x70 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 SHL AND PUSH1 0xA0 MSTORE PUSH3 0xA7 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x83 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH3 0x8E DUP4 PUSH3 0x53 JUMP JUMPDEST SWAP2 POP PUSH3 0x9E PUSH1 0x20 DUP5 ADD PUSH3 0x53 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0x1AC8 PUSH3 0xD1 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x229 MSTORE POP DUP1 PUSH2 0x262 MSTORE POP PUSH2 0x1AC8 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAC810C6C GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xEAEA4BFC GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xEAEA4BFC EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0xEFDEED8E EQ PUSH2 0x14B JUMPI DUP1 PUSH4 0xF25801A7 EQ PUSH2 0x15E JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0xAC810C6C EQ PUSH2 0x10F JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x130 JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0xF64F6A9 EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x1D31557E EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x3BEB26C4 EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0xFA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBB PUSH2 0xB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x17E4 JUMP JUMPDEST PUSH2 0x171 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD0 PUSH2 0xCB CALLDATASIZE PUSH1 0x4 PUSH2 0x16A7 JUMP JUMPDEST PUSH2 0x208 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDE SWAP3 SWAP2 SWAP1 PUSH2 0x1977 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBB PUSH2 0xF5 CALLDATASIZE PUSH1 0x4 PUSH2 0x18D4 JUMP JUMPDEST PUSH2 0x222 JUMP JUMPDEST PUSH2 0x102 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDE SWAP2 SWAP1 PUSH2 0x1942 JUMP JUMPDEST PUSH2 0x122 PUSH2 0x11D CALLDATASIZE PUSH1 0x4 PUSH2 0x17C1 JUMP JUMPDEST PUSH2 0x24B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDE SWAP3 SWAP2 SWAP1 PUSH2 0x1963 JUMP JUMPDEST PUSH2 0x102 PUSH2 0x260 JUMP JUMPDEST PUSH2 0xD0 PUSH2 0x146 CALLDATASIZE PUSH1 0x4 PUSH2 0x1771 JUMP JUMPDEST PUSH2 0x284 JUMP JUMPDEST PUSH2 0xBB PUSH2 0x159 CALLDATASIZE PUSH1 0x4 PUSH2 0x1623 JUMP JUMPDEST PUSH2 0x29C JUMP JUMPDEST PUSH2 0xBB PUSH2 0x16C CALLDATASIZE PUSH1 0x4 PUSH2 0x171C JUMP JUMPDEST PUSH2 0x2FF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 DUP8 AND DUP1 DUP5 MSTORE SWAP6 DUP3 MSTORE DUP1 DUP4 KECCAK256 PUSH3 0xFFFFFF SWAP1 SWAP6 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP8 SWAP1 SWAP9 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP8 DUP9 AND DUP2 OR SWAP1 SWAP9 SSTORE SWAP5 DUP3 MSTORE DUP2 DUP2 MSTORE DUP5 DUP3 KECCAK256 SWAP3 DUP3 MSTORE SWAP2 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x216 DUP6 DUP6 DUP6 PUSH2 0x357 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x257 DUP4 PUSH2 0x56A JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x291 DUP5 DUP5 PUSH2 0x802 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2AA DUP7 DUP7 DUP6 PUSH2 0x357 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x2F7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2EE SWAP1 PUSH2 0x19F3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x30C DUP6 DUP5 PUSH2 0x802 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x350 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2EE SWAP1 PUSH2 0x19F3 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 MLOAD DUP6 MLOAD EQ PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3BC JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x3A9 PUSH2 0x1476 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x3A1 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x413 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x400 PUSH2 0x1476 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x3F8 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x543 JUMPI PUSH1 0x0 DUP1 PUSH2 0x442 DUP11 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x434 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH2 0x802 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x44F DUP3 PUSH2 0xA8A JUMP JUMPDEST DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x45B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP PUSH2 0x47C DUP2 PUSH2 0xA8A JUMP JUMPDEST DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x488 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4AC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4C0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x502 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x516 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x419 JUMP JUMPDEST POP PUSH2 0x54D DUP3 PUSH2 0xAA0 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP4 POP PUSH2 0x55B DUP2 PUSH2 0xAA0 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP3 POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5EE SWAP2 SWAP1 PUSH2 0x183D JUMP JUMPDEST POP SWAP4 SWAP8 POP SWAP2 SWAP6 POP SWAP4 POP POP PUSH1 0x1 PUSH2 0xFFFF DUP5 AND GT SWAP2 POP PUSH2 0x63A SWAP1 POP JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2EE SWAP1 PUSH2 0x19BC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x676 SWAP2 SWAP1 PUSH2 0x1A2A JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x68E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6C6 SWAP2 SWAP1 PUSH2 0x18EC JUMP JUMPDEST POP POP SWAP2 POP SWAP2 POP PUSH2 0x6D4 PUSH2 0xB8C JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP3 PUSH4 0xFFFFFFFF AND EQ PUSH2 0x6EE JUMPI DUP5 SWAP6 POP PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0xFFFF AND PUSH1 0x1 DUP6 PUSH2 0xFFFF AND DUP8 PUSH2 0xFFFF AND ADD SUB DUP2 PUSH2 0x70A JUMPI INVALID JUMPDEST MOD SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x74B SWAP2 SWAP1 PUSH2 0x1A39 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x763 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x777 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x79B SWAP2 SWAP1 PUSH2 0x18EC JUMP JUMPDEST SWAP4 POP POP SWAP3 POP SWAP3 POP DUP1 PUSH2 0x7D9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2EE SWAP1 PUSH2 0x1985 JUMP JUMPDEST DUP3 DUP7 SUB PUSH4 0xFFFFFFFF DUP2 AND DUP4 DUP8 SUB PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x7F0 JUMPI INVALID JUMPDEST SDIV SWAP11 POP POP POP POP POP POP JUMPDEST POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x811 DUP7 PUSH2 0xB92 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xA2F JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x82D DUP12 PUSH2 0xBBD JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x840 DUP5 DUP5 DUP5 PUSH2 0xBEE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP14 AND PUSH2 0x869 JUMPI PUSH2 0x859 DUP4 PUSH2 0x56A JUMP JUMPDEST PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND SWAP4 POP SWAP1 SIGNEXTEND SWAP1 POP PUSH2 0x90B JUMP JUMPDEST PUSH2 0x873 DUP4 DUP15 PUSH2 0xC33 JUMP JUMPDEST DUP2 PUSH1 0x2 SIGNEXTEND SWAP2 POP POP DUP1 SWAP3 POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8FC SWAP2 SWAP1 PUSH2 0x183D JUMP JUMPDEST POP POP POP PUSH1 0x2 SWAP3 SWAP1 SWAP3 SIGNEXTEND SWAP4 POP POP POP POP JUMPDEST PUSH1 0x1 DUP10 SUB DUP8 EQ ISZERO PUSH2 0x94C JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT SWAP10 POP PUSH2 0x95B JUMP JUMPDEST PUSH2 0x955 DUP15 PUSH2 0x1064 JUMP JUMPDEST SWAP14 POP DUP6 SWAP8 POP JUMPDEST PUSH1 0x0 DUP8 ISZERO DUP1 PUSH2 0x9FC JUMPI POP DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x9CC JUMPI DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x9FC JUMP JUMPDEST DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xA11 JUMPI SWAP12 DUP3 ADD SWAP12 SWAP11 DUP2 ADD SWAP11 PUSH2 0xA1C JUMP JUMPDEST DUP3 DUP14 SUB SWAP13 POP DUP2 DUP13 SUB SWAP12 POP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 POP PUSH2 0x817 SWAP4 POP POP POP POP JUMP JUMPDEST POP DUP3 PUSH2 0xA80 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MUL SWAP5 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 MUL SWAP4 POP JUMPDEST POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0xA9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0xB35 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xABC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xAE6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH1 0x2 SIGNEXTEND MUL DUP4 ADD SWAP3 POP DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xB06 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 ADD SWAP2 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0xAA7 JUMP JUMPDEST POP DUP1 DUP3 DUP2 PUSH2 0xB3F JUMPI INVALID JUMPDEST SDIV SWAP3 POP PUSH1 0x0 DUP3 SLT DUP1 ISZERO PUSH2 0xB5A JUMPI POP DUP1 DUP3 DUP2 PUSH2 0xB56 JUMPI INVALID JUMPDEST SMOD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xB85 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 ADD SWAP2 JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST MLOAD PUSH1 0x17 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC SWAP1 SWAP2 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xBCB DUP5 DUP3 PUSH2 0x109F JUMP JUMPDEST SWAP3 POP PUSH2 0xBD8 DUP5 PUSH1 0x14 PUSH2 0x119F JUMP JUMPDEST SWAP1 POP PUSH2 0xBE5 DUP5 PUSH1 0x17 PUSH2 0x109F JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 PUSH3 0xFFFFFF SWAP1 SWAP4 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP4 AND PUSH2 0xCA8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4250000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xCD7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xD00 JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH32 0x883BDBFD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP4 PUSH4 0x883BDBFD SWAP4 DUP9 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 DUP6 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP12 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD9B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD83 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDD2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 LT ISZERO PUSH2 0xE19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0xE4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0xE6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE98 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE80 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0xEC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0xED6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0xEF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF20 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF08 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xF40 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xF55 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xF6F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xF84 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0xFA1 JUMPI INVALID JUMPDEST SDIV SWAP7 POP PUSH1 0x0 DUP3 PUSH1 0x6 SIGNEXTEND SLT DUP1 ISZERO PUSH2 0xFCB JUMPI POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0xFC4 JUMPI INVALID JUMPDEST SMOD PUSH1 0x6 SIGNEXTEND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xFF6 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 ADD SWAP6 JUMPDEST PUSH4 0xFFFFFFFF DUP9 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 PUSH1 0x20 DUP4 SWAP1 SHL AND PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP2 PUSH2 0x1054 JUMPI INVALID JUMPDEST DIV SWAP7 POP POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x1099 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x128F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x1113 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x1186 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x1213 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x1286 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0x1303 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0x1374 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0x13E6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x1405 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x146D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x143E JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x1426 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x149D JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x14B2 PUSH2 0x14AD DUP4 PUSH2 0x1A66 JUMP JUMPDEST PUSH2 0x1A42 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP6 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x14E7 JUMPI PUSH2 0x14D5 DUP10 DUP7 DUP5 CALLDATALOAD DUP12 ADD ADD PUSH2 0x157B JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x14BE JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1504 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x1514 PUSH2 0x14AD DUP4 PUSH2 0x1A66 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP4 DUP6 MUL DUP8 ADD DUP5 ADD DUP9 LT ISZERO PUSH2 0x1530 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x14E7 JUMPI DUP2 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1559 JUMPI DUP8 DUP9 REVERT JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1532 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xA9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x158B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x159F JUMPI INVALID JUMPDEST PUSH2 0x15D0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x1A42 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x15E4 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xA9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xA9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1638 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x164F JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x165B DUP9 DUP4 DUP10 ADD PUSH2 0x148D JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1670 JUMPI DUP5 DUP6 REVERT JUMPDEST POP PUSH2 0x167D DUP8 DUP3 DUP9 ADD PUSH2 0x14F4 JUMP JUMPDEST SWAP4 POP POP PUSH2 0x168C PUSH1 0x40 DUP7 ADD PUSH2 0x1610 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x169C DUP2 PUSH2 0x1AA9 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x16BB JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x16D2 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x16DE DUP8 DUP4 DUP9 ADD PUSH2 0x148D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x16F3 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x1700 DUP7 DUP3 DUP8 ADD PUSH2 0x14F4 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1711 DUP2 PUSH2 0x1AA9 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1730 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1746 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x1752 DUP7 DUP3 DUP8 ADD PUSH2 0x157B JUMP JUMPDEST SWAP4 POP POP PUSH2 0x1761 PUSH1 0x20 DUP6 ADD PUSH2 0x1610 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1711 DUP2 PUSH2 0x1AA9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1783 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1799 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x17A5 DUP6 DUP3 DUP7 ADD PUSH2 0x157B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x17B6 DUP2 PUSH2 0x1AA9 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x17D2 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x17DD DUP2 PUSH2 0x1A84 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x17F9 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1804 DUP2 PUSH2 0x1A84 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x1814 DUP2 PUSH2 0x1A84 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x1824 DUP2 PUSH2 0x1A84 JUMP JUMPDEST SWAP2 POP PUSH2 0x1832 PUSH1 0x60 DUP7 ADD PUSH2 0x1610 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1857 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1862 DUP2 PUSH2 0x1A84 JUMP JUMPDEST DUP1 SWAP8 POP POP PUSH1 0x20 DUP9 ADD MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x1879 JUMPI DUP6 DUP7 REVERT JUMPDEST SWAP6 POP PUSH2 0x1887 PUSH1 0x40 DUP10 ADD PUSH2 0x15FE JUMP JUMPDEST SWAP5 POP PUSH2 0x1895 PUSH1 0x60 DUP10 ADD PUSH2 0x15FE JUMP JUMPDEST SWAP4 POP PUSH2 0x18A3 PUSH1 0x80 DUP10 ADD PUSH2 0x15FE JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x18B8 JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP2 POP PUSH2 0x18C6 PUSH1 0xC0 DUP10 ADD PUSH2 0x156B JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18E5 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1901 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD PUSH2 0x190C DUP2 PUSH2 0x1AA9 JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x20 DUP6 ADD MLOAD DUP1 PUSH1 0x6 SIGNEXTEND DUP2 EQ PUSH2 0x1923 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x1934 DUP2 PUSH2 0x1A84 JUMP JUMPDEST SWAP2 POP PUSH2 0x1832 PUSH1 0x60 DUP7 ADD PUSH2 0x156B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x2 SWAP3 DUP4 SIGNEXTEND DUP2 MSTORE SWAP2 SIGNEXTEND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F4E490000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4E454F0000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH32 0x5444000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1A5E JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1A7A JUMPI INVALID JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1AA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1AA6 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "128:1651:84:-:0;;;299:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;520:18:16;;;;;;;;548:12;;;;;128:1651:84;;14:179:89;95:13;;-1:-1:-1;;;;;137:31:89;;127:42;;117:2;;183:1;180;173:12;117:2;76:117;;;:::o;198:307::-;;;338:2;326:9;317:7;313:23;309:32;306:2;;;359:6;351;344:22;306:2;387:42;419:9;387:42;:::i;:::-;377:52;;448:51;495:2;484:9;480:18;448:51;:::i;:::-;438:61;;296:209;;;;;:::o;:::-;128:1651:84;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:10897:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "82:601:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "131:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "140:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "147:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "133:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "133:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "133:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "110:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "118:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "106:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "106:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "102:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "102:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "95:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "95:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "92:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "164:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "187:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "174:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "174:20:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "168:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "203:14:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "213:4:89",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "207:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "226:74:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "296:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_array$_t_bytes_$dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "252:43:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "252:47:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "237:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "237:63:89"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "230:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "309:16:89",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "322:3:89"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "313:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "341:3:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "346:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "334:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "334:15:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "334:15:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "358:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "369:3:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "374:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "365:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "365:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "358:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "386:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "401:6:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "409:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "397:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "397:15:89"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "390:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "421:14:89",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "430:5:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "425:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "489:165:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "510:3:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "offset",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "542:6:89"
                                                    },
                                                    {
                                                      "arguments": [
                                                        {
                                                          "name": "src",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "563:3:89"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "calldataload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "550:12:89"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "550:17:89"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "538:3:89"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "538:30:89"
                                                },
                                                {
                                                  "name": "_2",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "570:2:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "534:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "534:39:89"
                                            },
                                            {
                                              "name": "end",
                                              "nodeType": "YulIdentifier",
                                              "src": "575:3:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "abi_decode_t_bytes",
                                            "nodeType": "YulIdentifier",
                                            "src": "515:18:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "515:64:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "503:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "503:77:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "503:77:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "593:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "604:3:89"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "609:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "600:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "600:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "593:3:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "625:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "636:3:89"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "641:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "632:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "632:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "625:3:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "455:1:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "458:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "452:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "452:9:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "462:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "464:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "473:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "476:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "469:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "469:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "464:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "448:3:89",
                                "statements": []
                              },
                              "src": "444:210:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "663:14:89",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "672:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "663:5:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_t_array$_t_bytes_$dyn",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "56:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "64:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "72:5:89",
                            "type": ""
                          }
                        ],
                        "src": "14:669:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "758:770:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "807:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "816:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "823:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "809:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "809:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "809:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "786:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "794:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "782:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "782:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "801:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "778:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "778:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "771:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "771:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "768:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "840:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "863:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "850:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "850:20:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "844:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "879:14:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "889:4:89",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "883:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "902:74:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "972:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_array$_t_bytes_$dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "928:43:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "928:47:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "913:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "913:63:89"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "906:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "985:16:89",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "998:3:89"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "989:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "1017:3:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1022:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1010:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1010:15:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1010:15:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1034:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "1045:3:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1050:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1041:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1041:12:89"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "1034:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1062:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1077:6:89"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1085:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1073:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1073:15:89"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "1066:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1143:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1152:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1159:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1145:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1145:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1145:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "1111:6:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "1123:2:89"
                                              },
                                              {
                                                "name": "_2",
                                                "nodeType": "YulIdentifier",
                                                "src": "1127:2:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mul",
                                              "nodeType": "YulIdentifier",
                                              "src": "1119:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1119:11:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1107:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1107:24:89"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1133:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1103:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1103:33:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "1138:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1100:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1100:42:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1097:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1176:14:89",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "1185:5:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1180:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1244:255:89",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "1258:30:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "1284:3:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "calldataload",
                                        "nodeType": "YulIdentifier",
                                        "src": "1271:12:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1271:17:89"
                                    },
                                    "variables": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulTypedName",
                                        "src": "1262:5:89",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "1370:24:89",
                                      "statements": [
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "name": "array",
                                                "nodeType": "YulIdentifier",
                                                "src": "1379:5:89"
                                              },
                                              {
                                                "name": "array",
                                                "nodeType": "YulIdentifier",
                                                "src": "1386:5:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "1372:6:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1372:20:89"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "1372:20:89"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "value",
                                              "nodeType": "YulIdentifier",
                                              "src": "1314:5:89"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "value",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1325:5:89"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1332:34:89",
                                                  "type": "",
                                                  "value": "0xffffffffffffffffffffffffffffffff"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "and",
                                                "nodeType": "YulIdentifier",
                                                "src": "1321:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1321:46:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "eq",
                                            "nodeType": "YulIdentifier",
                                            "src": "1311:2:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1311:57:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "iszero",
                                        "nodeType": "YulIdentifier",
                                        "src": "1304:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1304:65:89"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "1301:2:89"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "1414:3:89"
                                        },
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "1419:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1407:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1407:18:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1407:18:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1438:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "1449:3:89"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1454:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1445:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1445:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "1438:3:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1470:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "1481:3:89"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1486:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1477:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1477:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "1470:3:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1210:1:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1213:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1207:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1207:9:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1217:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1219:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1228:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1231:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1224:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1224:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1219:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1203:3:89",
                                "statements": []
                              },
                              "src": "1199:300:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1508:14:89",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "1517:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "1508:5:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_t_array$_t_uint128_$dyn",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "732:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "740:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "748:5:89",
                            "type": ""
                          }
                        ],
                        "src": "688:840:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1592:107:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1602:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1617:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1611:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1611:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "1602:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1677:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1686:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1689:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1679:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1679:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1679:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1646:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "1667:5:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "1660:6:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1660:13:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "1653:6:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1653:21:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1643:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1643:32:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1636:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1636:40:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1633:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1571:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1582:5:89",
                            "type": ""
                          }
                        ],
                        "src": "1533:166:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1758:547:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1807:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1816:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "1823:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1809:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1809:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1809:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "1786:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1794:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1782:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1782:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "1801:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1778:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1778:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1771:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1771:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1768:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1840:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1863:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1850:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1850:20:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1844:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1909:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "1911:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1911:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1911:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1885:2:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1889:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1882:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1882:26:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1879:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1931:128:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "1973:2:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1977:4:89",
                                                "type": "",
                                                "value": "0x1f"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "1969:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1969:13:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1984:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "1965:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1965:86:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2053:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1961:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1961:97:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocateMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1946:14:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1946:113:89"
                              },
                              "variables": [
                                {
                                  "name": "array_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1935:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2075:7:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2084:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2068:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2068:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2068:19:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2135:24:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "2144:5:89"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "2151:5:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2137:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2137:20:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2137:20:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "2110:6:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2118:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2106:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2106:15:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2123:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2102:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2102:26:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "2130:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2099:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2099:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2096:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "array_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2185:7:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2194:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2181:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2181:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "2205:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2213:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2201:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2201:17:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2220:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "2168:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2168:55:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2168:55:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "array_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2247:7:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2256:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2243:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2243:16:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2261:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2239:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2239:27:89"
                                  },
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "2268:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2232:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2232:42:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2232:42:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2283:16:89",
                              "value": {
                                "name": "array_1",
                                "nodeType": "YulIdentifier",
                                "src": "2292:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "2283:5:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1732:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "1740:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "1748:5:89",
                            "type": ""
                          }
                        ],
                        "src": "1704:601:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2371:104:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2381:22:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2396:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2390:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2390:13:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2381:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2453:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2462:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2465:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2455:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2455:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2455:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2425:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "2436:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2443:6:89",
                                            "type": "",
                                            "value": "0xffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2432:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2432:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2422:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2422:29:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2415:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2415:37:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2412:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint16_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2350:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2361:5:89",
                            "type": ""
                          }
                        ],
                        "src": "2310:165:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2530:113:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2540:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2562:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2549:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2549:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2540:5:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2621:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2630:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2633:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2623:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2623:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2623:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2591:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "2602:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2609:8:89",
                                            "type": "",
                                            "value": "0xffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2598:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2598:20:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2588:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2588:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2581:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2581:39:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2578:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2509:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2520:5:89",
                            "type": ""
                          }
                        ],
                        "src": "2480:163:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2826:676:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2873:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2882:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2890:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2875:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2875:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2875:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2847:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2856:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2843:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2843:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2868:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2839:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2839:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2836:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2908:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2935:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2922:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2922:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2912:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2954:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2964:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2958:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3009:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3018:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3026:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3011:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3011:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3011:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2997:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3005:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2994:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2994:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2991:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3044:75:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3091:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "3102:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3087:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3087:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3111:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_bytes_$dyn",
                                  "nodeType": "YulIdentifier",
                                  "src": "3054:32:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3054:65:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3044:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3128:48:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3161:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3172:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3157:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3157:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3144:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3144:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3132:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3205:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3214:6:89"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3222:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3207:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3207:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3207:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3191:8:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3201:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3188:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3188:16:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3185:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3240:79:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3289:9:89"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3300:8:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3285:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3285:24:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3311:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_uint128_$dyn",
                                  "nodeType": "YulIdentifier",
                                  "src": "3250:34:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3250:69:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3240:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3328:49:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3362:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3373:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3358:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3358:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3338:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3338:39:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3328:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3386:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3416:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3427:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3412:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3412:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3399:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3399:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3390:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3466:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "3440:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3440:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3440:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3481:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3491:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "3481:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_array$_t_uint128_$dyn_memory_ptrt_uint24t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2768:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2779:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2791:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2799:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2807:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2815:6:89",
                            "type": ""
                          }
                        ],
                        "src": "2648:854:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3669:617:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3715:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3724:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3732:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3717:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3717:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3717:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3690:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3699:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3686:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3686:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3711:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3682:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3682:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3679:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3750:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3777:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3764:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3764:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "3754:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3796:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3806:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3800:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3851:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3860:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3868:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3853:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3853:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3853:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "3839:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3847:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3836:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3836:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3833:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3886:75:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3933:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "3944:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3929:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3929:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3953:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_bytes_$dyn",
                                  "nodeType": "YulIdentifier",
                                  "src": "3896:32:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3896:65:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3886:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3970:48:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4003:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4014:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3999:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3999:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3986:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3986:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3974:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4047:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "4056:6:89"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "4064:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4049:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4049:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4049:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4033:8:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4043:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4030:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4030:16:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4027:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4082:79:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4131:9:89"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4142:8:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4127:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4127:24:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4153:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_uint128_$dyn",
                                  "nodeType": "YulIdentifier",
                                  "src": "4092:34:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4092:69:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4082:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4170:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4200:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4211:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4196:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4196:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4183:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4183:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4174:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4250:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "4224:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4224:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4224:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4265:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4275:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4265:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_array$_t_uint128_$dyn_memory_ptrt_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3619:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3630:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3642:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3650:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3658:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3507:779:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4402:440:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4448:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4457:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4465:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4450:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4450:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4450:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4423:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4432:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4419:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4419:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4444:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4415:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4415:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4412:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4483:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4510:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4497:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4497:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "4487:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4563:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4572:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4580:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4565:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4565:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4565:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "4535:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4543:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4532:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4532:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4529:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4598:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4631:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "4642:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4627:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4627:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4651:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "4608:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4608:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4598:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4668:49:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4702:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4713:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4698:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4698:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4678:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4678:39:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4668:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4726:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4756:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4767:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4752:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4752:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4739:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4739:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4730:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4806:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "4780:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4780:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4780:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4821:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4831:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4821:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes_memory_ptrt_uint24t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4352:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4363:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4375:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4383:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4391:6:89",
                            "type": ""
                          }
                        ],
                        "src": "4291:551:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4942:382:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4988:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4997:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5005:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4990:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4990:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4990:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4963:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4972:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4959:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4959:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4984:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4955:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4955:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "4952:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5023:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5050:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5037:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5037:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "5027:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5103:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5112:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5120:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5105:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5105:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5105:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "5075:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5083:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5072:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5072:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5069:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5138:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5171:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "5182:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5167:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5167:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "5191:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "5148:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5148:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5138:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5208:45:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5238:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5249:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5234:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5234:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5221:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5221:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5212:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5288:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "5262:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5262:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5262:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5303:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5313:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5303:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes_memory_ptrt_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4900:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4911:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4923:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4931:6:89",
                            "type": ""
                          }
                        ],
                        "src": "4847:477:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5418:189:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5464:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5473:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5481:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5466:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5466:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5466:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5439:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5448:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5435:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5435:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5460:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5431:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5431:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5428:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5499:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5525:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5512:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5512:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5503:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5571:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5544:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5544:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5544:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5586:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5596:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5586:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_contract$_IAstraCLPool_$27",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5384:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5395:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5407:6:89",
                            "type": ""
                          }
                        ],
                        "src": "5329:278:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5751:500:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5798:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5807:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5815:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5800:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5800:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5800:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5772:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5781:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5768:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5768:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5793:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5764:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5764:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5761:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5833:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5859:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5846:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5846:23:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5837:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5905:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5878:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5878:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5878:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5920:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5930:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5920:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5944:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5976:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5987:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5972:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5972:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5959:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5959:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5948:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6027:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "6000:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6000:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6000:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6044:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "6054:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "6044:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6070:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6102:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6113:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6098:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6098:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6085:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6085:32:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "6074:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6153:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "6126:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6126:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6126:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6170:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "6180:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6170:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6196:49:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6230:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6241:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6226:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6226:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint24",
                                  "nodeType": "YulIdentifier",
                                  "src": "6206:19:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6206:39:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "6196:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_contract$_IAstraCLPool_$27t_addresst_addresst_uint24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5693:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5704:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5716:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5724:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5732:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "5740:6:89",
                            "type": ""
                          }
                        ],
                        "src": "5612:639:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6429:770:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6476:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6485:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6493:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6478:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6478:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6478:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6450:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6459:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "6446:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6446:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6471:3:89",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6442:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6442:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6439:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6511:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6530:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6524:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6524:16:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "6515:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "6576:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "6549:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6549:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6549:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6591:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "6601:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "6591:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6615:40:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6640:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6651:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6636:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6636:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6630:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6630:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6619:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6711:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6720:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "6728:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6713:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6713:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6713:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6677:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6697:1:89",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "6700:7:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "6686:10:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6686:22:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "6674:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6674:35:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6667:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6667:43:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6664:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6746:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "6756:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "6746:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6772:60:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6817:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6828:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6813:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6813:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6782:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6782:50:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6772:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6841:60:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6886:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6897:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6882:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6882:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6851:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6851:50:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "6841:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6910:61:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6955:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6966:3:89",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6951:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6951:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6920:30:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6920:51:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "6910:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6980:41:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7005:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7016:3:89",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7001:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7001:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6995:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6995:26:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "6984:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7073:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value5",
                                          "nodeType": "YulIdentifier",
                                          "src": "7082:6:89"
                                        },
                                        {
                                          "name": "value5",
                                          "nodeType": "YulIdentifier",
                                          "src": "7090:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7075:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7075:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7075:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "7043:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "7056:7:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7065:4:89",
                                            "type": "",
                                            "value": "0xff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "7052:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7052:18:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "7040:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7040:31:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "7033:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7033:39:89"
                              },
                              "nodeType": "YulIf",
                              "src": "7030:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7108:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "7118:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "7108:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7134:59:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7177:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7188:3:89",
                                        "type": "",
                                        "value": "192"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7173:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7173:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "7144:28:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7144:49:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value6",
                                  "nodeType": "YulIdentifier",
                                  "src": "7134:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6347:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "6358:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6370:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6378:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6386:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "6394:6:89",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "6402:6:89",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "6410:6:89",
                            "type": ""
                          },
                          {
                            "name": "value6",
                            "nodeType": "YulTypedName",
                            "src": "6418:6:89",
                            "type": ""
                          }
                        ],
                        "src": "6256:943:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7274:120:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7320:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "7329:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "7337:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7322:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7322:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7322:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "7295:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7304:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "7291:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7291:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7316:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7287:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7287:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "7284:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7355:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7378:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7365:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7365:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7355:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7240:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "7251:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7263:6:89",
                            "type": ""
                          }
                        ],
                        "src": "7204:190:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7525:525:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7572:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7581:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7589:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7574:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7574:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7574:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "7546:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7555:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "7542:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7542:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7567:3:89",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7538:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7538:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "7535:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7607:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7626:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7620:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7620:16:89"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "7611:5:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "7671:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "7645:25:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7645:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7645:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7686:15:89",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "7696:5:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7686:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7710:40:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7735:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7746:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7731:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7731:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7725:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7725:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7714:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7806:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7815:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "7823:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7808:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7808:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7808:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7772:7:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7792:1:89",
                                            "type": "",
                                            "value": "6"
                                          },
                                          {
                                            "name": "value_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "7795:7:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "7781:10:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7781:22:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "7769:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7769:35:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "7762:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7762:43:89"
                              },
                              "nodeType": "YulIf",
                              "src": "7759:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7841:17:89",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "7851:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "7841:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7867:40:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7892:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7903:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7888:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7888:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7882:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7882:25:89"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "7871:7:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7943:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "7916:26:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7916:35:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7916:35:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7960:17:89",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "7970:7:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7960:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7986:58:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8029:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8040:2:89",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8025:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8025:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "7996:28:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7996:48:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "7986:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint32t_int56t_uint160t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7467:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "7478:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7490:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7498:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7506:6:89",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "7514:6:89",
                            "type": ""
                          }
                        ],
                        "src": "7399:651:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8156:125:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8166:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8178:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8189:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8174:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8174:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8166:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8208:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8223:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8231:42:89",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8219:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8219:55:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8201:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8201:74:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8201:74:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8125:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8136:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8147:4:89",
                            "type": ""
                          }
                        ],
                        "src": "8055:226:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8407:149:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8417:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8429:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8440:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8425:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8425:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8417:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8459:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8481:1:89",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8484:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "8470:10:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8470:21:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8452:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8452:40:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8452:40:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8512:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8523:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8508:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8508:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8539:1:89",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8542:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "8528:10:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8528:21:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8501:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8501:49:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8501:49:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_int24_t_int24__to_t_int24_t_int24__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8368:9:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8379:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8387:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8398:4:89",
                            "type": ""
                          }
                        ],
                        "src": "8286:270:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8686:119:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8696:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8708:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8719:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8704:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8704:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8696:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8738:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8749:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8731:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8731:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8731:25:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8776:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8787:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8772:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8772:18:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8792:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8765:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8765:34:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8765:34:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_int256_t_int256__to_t_int256_t_int256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8647:9:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8658:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8666:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8677:4:89",
                            "type": ""
                          }
                        ],
                        "src": "8561:244:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8984:152:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9001:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9012:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8994:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8994:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8994:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9035:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9046:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9031:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9031:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9051:1:89",
                                    "type": "",
                                    "value": "3"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9024:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9024:29:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9024:29:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9073:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9084:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9069:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9069:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9089:5:89",
                                    "type": "",
                                    "value": "ONI"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9062:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9062:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9062:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9104:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9116:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9127:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9112:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9112:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9104:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_4375a34c158c497e1dec923d39179cd2bff1d358f7876b16ed4f850d3b707895__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8961:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8975:4:89",
                            "type": ""
                          }
                        ],
                        "src": "8810:326:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9315:152:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9332:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9343:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9325:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9325:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9325:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9366:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9377:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9362:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9362:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9382:1:89",
                                    "type": "",
                                    "value": "3"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9355:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9355:29:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9355:29:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9404:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9415:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9400:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9400:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9420:5:89",
                                    "type": "",
                                    "value": "NEO"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9393:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9393:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9393:33:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9435:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9447:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9458:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9443:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9443:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9435:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_6dc5790d7c4bfaaa2e4f8e2cd517bacd4a3831f85c0964e56f2743cbb847bc46__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9292:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9306:4:89",
                            "type": ""
                          }
                        ],
                        "src": "9141:326:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9646:151:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9663:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9674:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9656:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9656:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9656:21:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9697:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9708:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9693:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9693:18:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9713:1:89",
                                    "type": "",
                                    "value": "2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9686:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9686:29:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9686:29:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9735:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9746:2:89",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9731:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9731:18:89"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9751:4:89",
                                    "type": "",
                                    "value": "TD"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9724:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9724:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9724:32:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9765:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9777:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9788:2:89",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9773:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9773:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9765:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_df7085977c0a4e0ff243c8cdd75cc6add5df901d8b8ca4cde5e0319089f27136__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9623:9:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9637:4:89",
                            "type": ""
                          }
                        ],
                        "src": "9472:325:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9902:89:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9912:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9924:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9935:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9920:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9920:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9912:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9954:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "9969:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9977:6:89",
                                        "type": "",
                                        "value": "0xffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "9965:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9965:19:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9947:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9947:38:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9947:38:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint16__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9871:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9882:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9893:4:89",
                            "type": ""
                          }
                        ],
                        "src": "9802:189:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10097:76:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10107:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10119:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10130:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10115:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10115:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10107:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10149:9:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10160:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10142:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10142:25:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10142:25:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10066:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10077:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10088:4:89",
                            "type": ""
                          }
                        ],
                        "src": "9996:177:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10222:198:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10232:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10248:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "10242:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10242:9:89"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "10232:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10260:35:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "10282:6:89"
                                  },
                                  {
                                    "name": "size",
                                    "nodeType": "YulIdentifier",
                                    "src": "10290:4:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10278:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10278:17:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "10264:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10370:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "10372:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10372:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10372:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "10313:10:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10325:18:89",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10310:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10310:34:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "10349:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "10361:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10346:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10346:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "10307:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10307:62:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10304:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10399:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "10403:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10392:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10392:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10392:22:89"
                            }
                          ]
                        },
                        "name": "allocateMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "10202:4:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "10211:6:89",
                            "type": ""
                          }
                        ],
                        "src": "10178:242:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10498:108:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10542:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "10544:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10544:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10544:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10514:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10522:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10511:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10511:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10508:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10564:36:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "10580:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10588:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "10576:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10576:17:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10595:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10572:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10572:28:89"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "10564:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_t_array$_t_bytes_$dyn",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "10478:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "10489:4:89",
                            "type": ""
                          }
                        ],
                        "src": "10425:181:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10658:109:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10745:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10754:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10757:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10747:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10747:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10747:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "10681:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "10692:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10699:42:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "10688:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10688:54:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "10678:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10678:65:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10671:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10671:73:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10668:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "10647:5:89",
                            "type": ""
                          }
                        ],
                        "src": "10611:156:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10818:77:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10873:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10882:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10885:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10875:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10875:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10875:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "10841:5:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "10852:5:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10859:10:89",
                                            "type": "",
                                            "value": "0xffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "10848:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10848:22:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "10838:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10838:33:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10831:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10831:41:89"
                              },
                              "nodeType": "YulIf",
                              "src": "10828:2:89"
                            }
                          ]
                        },
                        "name": "validator_revert_t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "10807:5:89",
                            "type": ""
                          }
                        ],
                        "src": "10772:123:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_array$_t_bytes_$dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocateMemory(array_allocation_size_t_array$_t_bytes_$dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let src := add(offset, _2)\n        let i := array\n        for { } lt(i, _1) { i := add(i, 1) }\n        {\n            mstore(dst, abi_decode_t_bytes(add(add(offset, calldataload(src)), _2), end))\n            dst := add(dst, _2)\n            src := add(src, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_t_array$_t_uint128_$dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocateMemory(array_allocation_size_t_array$_t_bytes_$dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let src := add(offset, _2)\n        if gt(add(add(offset, mul(_1, _2)), _2), end) { revert(array, array) }\n        let i := array\n        for { } lt(i, _1) { i := add(i, 1) }\n        {\n            let value := calldataload(src)\n            if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(array, array) }\n            mstore(dst, value)\n            dst := add(dst, _2)\n            src := add(src, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_t_bool_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_t_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := calldataload(offset)\n        if gt(_1, 0xffffffffffffffff) { invalid() }\n        let array_1 := allocateMemory(add(and(add(_1, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), array)\n        array := array_1\n    }\n    function abi_decode_t_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_t_uint24(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_array$_t_uint128_$dyn_memory_ptrt_uint24t_uint32(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value0, value0) }\n        value0 := abi_decode_t_array$_t_bytes_$dyn(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(value1, value1) }\n        value1 := abi_decode_t_array$_t_uint128_$dyn(add(headStart, offset_1), dataEnd)\n        value2 := abi_decode_t_uint24(add(headStart, 64))\n        let value := calldataload(add(headStart, 96))\n        validator_revert_t_uint32(value)\n        value3 := value\n    }\n    function abi_decode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_array$_t_uint128_$dyn_memory_ptrt_uint32(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value0, value0) }\n        value0 := abi_decode_t_array$_t_bytes_$dyn(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(value1, value1) }\n        value1 := abi_decode_t_array$_t_uint128_$dyn(add(headStart, offset_1), dataEnd)\n        let value := calldataload(add(headStart, 64))\n        validator_revert_t_uint32(value)\n        value2 := value\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_uint24t_uint32(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        value0 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n        value1 := abi_decode_t_uint24(add(headStart, 32))\n        let value := calldataload(add(headStart, 64))\n        validator_revert_t_uint32(value)\n        value2 := value\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_uint32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        value0 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_t_uint32(value)\n        value1 := value\n    }\n    function abi_decode_tuple_t_contract$_IAstraCLPool_$27(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IAstraCLPool_$27t_addresst_addresst_uint24(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_t_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_t_address(value_2)\n        value2 := value_2\n        value3 := abi_decode_t_uint24(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(value2, value2) }\n        let value := mload(headStart)\n        validator_revert_t_address(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        if iszero(eq(value_1, signextend(2, value_1))) { revert(value2, value2) }\n        value1 := value_1\n        value2 := abi_decode_t_uint16_fromMemory(add(headStart, 64))\n        value3 := abi_decode_t_uint16_fromMemory(add(headStart, 96))\n        value4 := abi_decode_t_uint16_fromMemory(add(headStart, 128))\n        let value_2 := mload(add(headStart, 160))\n        if iszero(eq(value_2, and(value_2, 0xff))) { revert(value5, value5) }\n        value5 := value_2\n        value6 := abi_decode_t_bool_fromMemory(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint32t_int56t_uint160t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n        let value := mload(headStart)\n        validator_revert_t_uint32(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        if iszero(eq(value_1, signextend(6, value_1))) { revert(value2, value2) }\n        value1 := value_1\n        let value_2 := mload(add(headStart, 64))\n        validator_revert_t_address(value_2)\n        value2 := value_2\n        value3 := abi_decode_t_bool_fromMemory(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_int24_t_int24__to_t_int24_t_int24__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, signextend(2, value0))\n        mstore(add(headStart, 32), signextend(2, value1))\n    }\n    function abi_encode_tuple_t_int256_t_int256__to_t_int256_t_int256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_4375a34c158c497e1dec923d39179cd2bff1d358f7876b16ed4f850d3b707895__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 3)\n        mstore(add(headStart, 64), \"ONI\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6dc5790d7c4bfaaa2e4f8e2cd517bacd4a3831f85c0964e56f2743cbb847bc46__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 3)\n        mstore(add(headStart, 64), \"NEO\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_df7085977c0a4e0ff243c8cdd75cc6add5df901d8b8ca4cde5e0319089f27136__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 2)\n        mstore(add(headStart, 64), \"TD\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function allocateMemory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, size)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_t_array$_t_bytes_$dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { invalid() }\n        size := add(mul(length, 0x20), 0x20)\n    }\n    function validator_revert_t_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function validator_revert_t_uint32(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "2013": [
                  {
                    "length": 32,
                    "start": 610
                  }
                ],
                "2017": [
                  {
                    "length": 32,
                    "start": 553
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100a35760003560e01c8063ac810c6c11610076578063eaea4bfc1161005b578063eaea4bfc14610138578063efdeed8e1461014b578063f25801a71461015e576100a3565b8063ac810c6c1461010f578063c45a015514610130576100a3565b80630f64f6a9146100a85780631d31557e146100bd5780633beb26c4146100e757806390793ea8146100fa575b600080fd5b6100bb6100b63660046117e4565b610171565b005b6100d06100cb3660046116a7565b610208565b6040516100de929190611977565b60405180910390f35b6100bb6100f53660046118d4565b610222565b610102610227565b6040516100de9190611942565b61012261011d3660046117c1565b61024b565b6040516100de929190611963565b610102610260565b6100d0610146366004611771565b610284565b6100bb610159366004611623565b61029c565b6100bb61016c36600461171c565b6102ff565b73ffffffffffffffffffffffffffffffffffffffff92831660008181526020818152604080832095871680845295825280832062ffffff9095168084529482528083208054979098167fffffffffffffffffffffffff000000000000000000000000000000000000000097881681179098559482528181528482209282529182528381209281529190522080549091169091179055565b600080610216858585610357565b91509150935093915050565b600155565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806102578361056a565b91509150915091565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806102918484610802565b915091509250929050565b6000806102aa868685610357565b915091508362ffffff16818303126102f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ee906119f3565b60405180910390fd5b505050505050565b60008061030c8584610802565b915091508362ffffff1681830312610350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ee906119f3565b5050505050565b600080835185511461036857600080fd5b6000855167ffffffffffffffff8111801561038257600080fd5b506040519080825280602002602001820160405280156103bc57816020015b6103a9611476565b8152602001906001900390816103a15790505b5090506000865167ffffffffffffffff811180156103d957600080fd5b5060405190808252806020026020018201604052801561041357816020015b610400611476565b8152602001906001900390816103f85790505b50905060005b8751811015610543576000806104428a848151811061043457fe5b602002602001015189610802565b9150915061044f82610a8a565b85848151811061045b57fe5b60200260200101516000019060020b908160020b8152505061047c81610a8a565b84848151811061048857fe5b60200260200101516000019060020b908160020b815250508883815181106104ac57fe5b60200260200101518584815181106104c057fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505088838151811061050257fe5b602002602001015184848151811061051657fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff9092169101525050600101610419565b5061054d82610aa0565b60020b935061055b81610aa0565b60020b92505050935093915050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156105b657600080fd5b505afa1580156105ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ee919061183d565b50939750919550935050600161ffff841611915061063a9050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ee906119bc565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016106769190611a2a565b60806040518083038186803b15801561068e57600080fd5b505afa1580156106a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c691906118ec565b5050915091506106d4610b8c565b63ffffffff168263ffffffff16146106ee578495506107f9565b60008361ffff1660018561ffff168761ffff1601038161070a57fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b815260040161074b9190611a39565b60806040518083038186803b15801561076357600080fd5b505afa158015610777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079b91906118ec565b93505092509250806107d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ee90611985565b82860363ffffffff811683870360060b816107f057fe5b059a5050505050505b50505050915091565b60008060008061081186610b92565b90506000805b82811015610a2f57600080600061082d8b610bbd565b9250925092506000610840848484610bee565b905060008063ffffffff8d16610869576108598361056a565b600291820b9350900b905061090b565b610873838e610c33565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156108c457600080fd5b505afa1580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc919061183d565b50505060029290920b93505050505b6001890387141561094c578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610995061095b565b6109558e611064565b9d508597505b60008715806109fc57508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16106109cc578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16106109fc565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015610a11579b82019b9a81019a610a1c565b828d039c50818c039b505b5050600190950194506108179350505050565b5082610a80577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b80600281900b8114610a9b57600080fd5b919050565b6000806000805b8451811015610b3557848181518110610abc57fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16858281518110610ae657fe5b60200260200101516000015160020b0283019250848181518110610b0657fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16820191508080600101915050610aa7565b50808281610b3f57fe5b059250600082128015610b5a5750808281610b5657fe5b0715155b15610b85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201915b5050919050565b60015490565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b60008080610bcb848261109f565b9250610bd884601461119f565b9050610be584601761109f565b91509193909250565b73ffffffffffffffffffffffffffffffffffffffff928316600090815260208181526040808320948616835293815283822062ffffff90931682529190915220541690565b60008063ffffffff8316610ca857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040805160028082526060820183526000926020830190803683370190505090508381600081518110610cd757fe5b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110610d0057fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015610d9b578181015183820152602001610d83565b505050509050019250505060006040518083038186803b158015610dbe57600080fd5b505afa158015610dd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040908152811015610e1957600080fd5b8101908080516040519392919084640100000000821115610e3957600080fd5b908301906020820185811115610e4e57600080fd5b8251866020820283011164010000000082111715610e6b57600080fd5b82525081516020918201928201910280838360005b83811015610e98578181015183820152602001610e80565b5050505090500160405260200180516040519392919084640100000000821115610ec157600080fd5b908301906020820185811115610ed657600080fd5b8251866020820283011164010000000082111715610ef357600080fd5b82525081516020918201928201910280838360005b83811015610f20578181015183820152602001610f08565b5050505090500160405250505091509150600082600081518110610f4057fe5b602002602001015183600181518110610f5557fe5b6020026020010151039050600082600081518110610f6f57fe5b602002602001015183600181518110610f8457fe5b60200260200101510390508763ffffffff168260060b81610fa157fe5b05965060008260060b128015610fcb57508763ffffffff168260060b81610fc457fe5b0760060b15155b15610ff6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff82168161105457fe5b0496505050505050509250929050565b80516060906110999083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161128f565b92915050565b60008182601401101561111357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561118657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561121357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561128657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b60608182601f01101561130357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561137457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b818301845110156113e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015611405576040519150600082526020820160405261146d565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561143e578051835260209283019201611426565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015290565b600082601f83011261149d578081fd5b813560206114b26114ad83611a66565b611a42565b82815281810190858301855b858110156114e7576114d5898684358b010161157b565b845292840192908401906001016114be565b5090979650505050505050565b600082601f830112611504578081fd5b813560206115146114ad83611a66565b8281528181019085830183850287018401881015611530578586fd5b855b858110156114e75781356fffffffffffffffffffffffffffffffff81168114611559578788fd5b84529284019290840190600101611532565b80518015158114610a9b57600080fd5b600082601f83011261158b578081fd5b813567ffffffffffffffff81111561159f57fe5b6115d060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611a42565b8181528460208386010111156115e4578283fd5b816020850160208301379081016020019190915292915050565b805161ffff81168114610a9b57600080fd5b803562ffffff81168114610a9b57600080fd5b60008060008060808587031215611638578384fd5b843567ffffffffffffffff8082111561164f578586fd5b61165b8883890161148d565b95506020870135915080821115611670578485fd5b5061167d878288016114f4565b93505061168c60408601611610565b9150606085013561169c81611aa9565b939692955090935050565b6000806000606084860312156116bb578283fd5b833567ffffffffffffffff808211156116d2578485fd5b6116de8783880161148d565b945060208601359150808211156116f3578384fd5b50611700868287016114f4565b925050604084013561171181611aa9565b809150509250925092565b600080600060608486031215611730578283fd5b833567ffffffffffffffff811115611746578384fd5b6117528682870161157b565b93505061176160208501611610565b9150604084013561171181611aa9565b60008060408385031215611783578182fd5b823567ffffffffffffffff811115611799578283fd5b6117a58582860161157b565b92505060208301356117b681611aa9565b809150509250929050565b6000602082840312156117d2578081fd5b81356117dd81611a84565b9392505050565b600080600080608085870312156117f9578384fd5b843561180481611a84565b9350602085013561181481611a84565b9250604085013561182481611a84565b915061183260608601611610565b905092959194509250565b600080600080600080600060e0888a031215611857578485fd5b875161186281611a84565b8097505060208801518060020b8114611879578586fd5b9550611887604089016115fe565b9450611895606089016115fe565b93506118a3608089016115fe565b925060a088015160ff811681146118b8578283fd5b91506118c660c0890161156b565b905092959891949750929550565b6000602082840312156118e5578081fd5b5035919050565b60008060008060808587031215611901578182fd5b845161190c81611aa9565b8094505060208501518060060b8114611923578283fd5b604086015190935061193481611a84565b91506118326060860161156b565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600292830b8152910b602082015260400190565b918252602082015260400190565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b61ffff91909116815260200190565b90815260200190565b60405181810167ffffffffffffffff81118282101715611a5e57fe5b604052919050565b600067ffffffffffffffff821115611a7a57fe5b5060209081020190565b73ffffffffffffffffffffffffffffffffffffffff81168114611aa657600080fd5b50565b63ffffffff81168114611aa657600080fdfea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAC810C6C GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xEAEA4BFC GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xEAEA4BFC EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0xEFDEED8E EQ PUSH2 0x14B JUMPI DUP1 PUSH4 0xF25801A7 EQ PUSH2 0x15E JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0xAC810C6C EQ PUSH2 0x10F JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x130 JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0xF64F6A9 EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x1D31557E EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x3BEB26C4 EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0x90793EA8 EQ PUSH2 0xFA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBB PUSH2 0xB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x17E4 JUMP JUMPDEST PUSH2 0x171 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD0 PUSH2 0xCB CALLDATASIZE PUSH1 0x4 PUSH2 0x16A7 JUMP JUMPDEST PUSH2 0x208 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDE SWAP3 SWAP2 SWAP1 PUSH2 0x1977 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBB PUSH2 0xF5 CALLDATASIZE PUSH1 0x4 PUSH2 0x18D4 JUMP JUMPDEST PUSH2 0x222 JUMP JUMPDEST PUSH2 0x102 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDE SWAP2 SWAP1 PUSH2 0x1942 JUMP JUMPDEST PUSH2 0x122 PUSH2 0x11D CALLDATASIZE PUSH1 0x4 PUSH2 0x17C1 JUMP JUMPDEST PUSH2 0x24B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDE SWAP3 SWAP2 SWAP1 PUSH2 0x1963 JUMP JUMPDEST PUSH2 0x102 PUSH2 0x260 JUMP JUMPDEST PUSH2 0xD0 PUSH2 0x146 CALLDATASIZE PUSH1 0x4 PUSH2 0x1771 JUMP JUMPDEST PUSH2 0x284 JUMP JUMPDEST PUSH2 0xBB PUSH2 0x159 CALLDATASIZE PUSH1 0x4 PUSH2 0x1623 JUMP JUMPDEST PUSH2 0x29C JUMP JUMPDEST PUSH2 0xBB PUSH2 0x16C CALLDATASIZE PUSH1 0x4 PUSH2 0x171C JUMP JUMPDEST PUSH2 0x2FF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 DUP8 AND DUP1 DUP5 MSTORE SWAP6 DUP3 MSTORE DUP1 DUP4 KECCAK256 PUSH3 0xFFFFFF SWAP1 SWAP6 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP8 SWAP1 SWAP9 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP8 DUP9 AND DUP2 OR SWAP1 SWAP9 SSTORE SWAP5 DUP3 MSTORE DUP2 DUP2 MSTORE DUP5 DUP3 KECCAK256 SWAP3 DUP3 MSTORE SWAP2 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x216 DUP6 DUP6 DUP6 PUSH2 0x357 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x257 DUP4 PUSH2 0x56A JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x291 DUP5 DUP5 PUSH2 0x802 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2AA DUP7 DUP7 DUP6 PUSH2 0x357 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x2F7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2EE SWAP1 PUSH2 0x19F3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x30C DUP6 DUP5 PUSH2 0x802 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 PUSH3 0xFFFFFF AND DUP2 DUP4 SUB SLT PUSH2 0x350 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2EE SWAP1 PUSH2 0x19F3 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 MLOAD DUP6 MLOAD EQ PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3BC JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x3A9 PUSH2 0x1476 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x3A1 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x413 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x400 PUSH2 0x1476 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x3F8 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x543 JUMPI PUSH1 0x0 DUP1 PUSH2 0x442 DUP11 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x434 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH2 0x802 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x44F DUP3 PUSH2 0xA8A JUMP JUMPDEST DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x45B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP PUSH2 0x47C DUP2 PUSH2 0xA8A JUMP JUMPDEST DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x488 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH1 0x2 SIGNEXTEND SWAP1 DUP2 PUSH1 0x2 SIGNEXTEND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4AC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4C0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x502 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x516 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x419 JUMP JUMPDEST POP PUSH2 0x54D DUP3 PUSH2 0xAA0 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP4 POP PUSH2 0x55B DUP2 PUSH2 0xAA0 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND SWAP3 POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5EE SWAP2 SWAP1 PUSH2 0x183D JUMP JUMPDEST POP SWAP4 SWAP8 POP SWAP2 SWAP6 POP SWAP4 POP POP PUSH1 0x1 PUSH2 0xFFFF DUP5 AND GT SWAP2 POP PUSH2 0x63A SWAP1 POP JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2EE SWAP1 PUSH2 0x19BC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x676 SWAP2 SWAP1 PUSH2 0x1A2A JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x68E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6C6 SWAP2 SWAP1 PUSH2 0x18EC JUMP JUMPDEST POP POP SWAP2 POP SWAP2 POP PUSH2 0x6D4 PUSH2 0xB8C JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP3 PUSH4 0xFFFFFFFF AND EQ PUSH2 0x6EE JUMPI DUP5 SWAP6 POP PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0xFFFF AND PUSH1 0x1 DUP6 PUSH2 0xFFFF AND DUP8 PUSH2 0xFFFF AND ADD SUB DUP2 PUSH2 0x70A JUMPI INVALID JUMPDEST MOD SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x252C09D7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x74B SWAP2 SWAP1 PUSH2 0x1A39 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x763 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x777 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x79B SWAP2 SWAP1 PUSH2 0x18EC JUMP JUMPDEST SWAP4 POP POP SWAP3 POP SWAP3 POP DUP1 PUSH2 0x7D9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2EE SWAP1 PUSH2 0x1985 JUMP JUMPDEST DUP3 DUP7 SUB PUSH4 0xFFFFFFFF DUP2 AND DUP4 DUP8 SUB PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0x7F0 JUMPI INVALID JUMPDEST SDIV SWAP11 POP POP POP POP POP POP JUMPDEST POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x811 DUP7 PUSH2 0xB92 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xA2F JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x82D DUP12 PUSH2 0xBBD JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x840 DUP5 DUP5 DUP5 PUSH2 0xBEE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP14 AND PUSH2 0x869 JUMPI PUSH2 0x859 DUP4 PUSH2 0x56A JUMP JUMPDEST PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND SWAP4 POP SWAP1 SIGNEXTEND SWAP1 POP PUSH2 0x90B JUMP JUMPDEST PUSH2 0x873 DUP4 DUP15 PUSH2 0xC33 JUMP JUMPDEST DUP2 PUSH1 0x2 SIGNEXTEND SWAP2 POP POP DUP1 SWAP3 POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8FC SWAP2 SWAP1 PUSH2 0x183D JUMP JUMPDEST POP POP POP PUSH1 0x2 SWAP3 SWAP1 SWAP3 SIGNEXTEND SWAP4 POP POP POP POP JUMPDEST PUSH1 0x1 DUP10 SUB DUP8 EQ ISZERO PUSH2 0x94C JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT SWAP10 POP PUSH2 0x95B JUMP JUMPDEST PUSH2 0x955 DUP15 PUSH2 0x1064 JUMP JUMPDEST SWAP14 POP DUP6 SWAP8 POP JUMPDEST PUSH1 0x0 DUP8 ISZERO DUP1 PUSH2 0x9FC JUMPI POP DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x9CC JUMPI DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT PUSH2 0x9FC JUMP JUMPDEST DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xA11 JUMPI SWAP12 DUP3 ADD SWAP12 SWAP11 DUP2 ADD SWAP11 PUSH2 0xA1C JUMP JUMPDEST DUP3 DUP14 SUB SWAP13 POP DUP2 DUP13 SUB SWAP12 POP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 POP PUSH2 0x817 SWAP4 POP POP POP POP JUMP JUMPDEST POP DUP3 PUSH2 0xA80 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MUL SWAP5 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 MUL SWAP4 POP JUMPDEST POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0xA9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0xB35 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xABC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xAE6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH1 0x2 SIGNEXTEND MUL DUP4 ADD SWAP3 POP DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xB06 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 ADD SWAP2 POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0xAA7 JUMP JUMPDEST POP DUP1 DUP3 DUP2 PUSH2 0xB3F JUMPI INVALID JUMPDEST SDIV SWAP3 POP PUSH1 0x0 DUP3 SLT DUP1 ISZERO PUSH2 0xB5A JUMPI POP DUP1 DUP3 DUP2 PUSH2 0xB56 JUMPI INVALID JUMPDEST SMOD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xB85 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 ADD SWAP2 JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST MLOAD PUSH1 0x17 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC SWAP1 SWAP2 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xBCB DUP5 DUP3 PUSH2 0x109F JUMP JUMPDEST SWAP3 POP PUSH2 0xBD8 DUP5 PUSH1 0x14 PUSH2 0x119F JUMP JUMPDEST SWAP1 POP PUSH2 0xBE5 DUP5 PUSH1 0x17 PUSH2 0x109F JUMP JUMPDEST SWAP2 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 PUSH3 0xFFFFFF SWAP1 SWAP4 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH4 0xFFFFFFFF DUP4 AND PUSH2 0xCA8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4250000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xCD7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xD00 JUMPI INVALID JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH32 0x883BDBFD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP4 PUSH4 0x883BDBFD SWAP4 DUP9 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 DUP6 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP12 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD9B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD83 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDD2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 LT ISZERO PUSH2 0xE19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0xE4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0xE6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE98 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE80 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0xEC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0xED6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0xEF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF20 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF08 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xF40 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xF55 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xF6F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xF84 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB SWAP1 POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0xFA1 JUMPI INVALID JUMPDEST SDIV SWAP7 POP PUSH1 0x0 DUP3 PUSH1 0x6 SIGNEXTEND SLT DUP1 ISZERO PUSH2 0xFCB JUMPI POP DUP8 PUSH4 0xFFFFFFFF AND DUP3 PUSH1 0x6 SIGNEXTEND DUP2 PUSH2 0xFC4 JUMPI INVALID JUMPDEST SMOD PUSH1 0x6 SIGNEXTEND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xFF6 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 ADD SWAP6 JUMPDEST PUSH4 0xFFFFFFFF DUP9 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 PUSH1 0x20 DUP4 SWAP1 SHL AND PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP2 PUSH2 0x1054 JUMPI INVALID JUMPDEST DIV SWAP7 POP POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x1099 SWAP1 DUP4 SWAP1 PUSH1 0x17 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 ADD PUSH2 0x128F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x14 ADD LT ISZERO PUSH2 0x1113 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F766572666C6F770000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO PUSH2 0x1186 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F416464726573735F6F75744F66426F756E64730000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD PUSH13 0x1000000000000000000000000 SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP3 PUSH1 0x3 ADD LT ISZERO PUSH2 0x1213 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F766572666C6F77000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x3 ADD DUP4 MLOAD LT ISZERO PUSH2 0x1286 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F55696E7432345F6F75744F66426F756E6473000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 DUP3 PUSH1 0x1F ADD LT ISZERO PUSH2 0x1303 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP3 DUP5 ADD LT ISZERO PUSH2 0x1374 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F766572666C6F77000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP4 ADD DUP5 MLOAD LT ISZERO PUSH2 0x13E6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x736C6963655F6F75744F66426F756E6473000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x1405 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x146D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x143E JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x1426 JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x149D JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x14B2 PUSH2 0x14AD DUP4 PUSH2 0x1A66 JUMP JUMPDEST PUSH2 0x1A42 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP6 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x14E7 JUMPI PUSH2 0x14D5 DUP10 DUP7 DUP5 CALLDATALOAD DUP12 ADD ADD PUSH2 0x157B JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x14BE JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1504 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x1514 PUSH2 0x14AD DUP4 PUSH2 0x1A66 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP2 DUP2 ADD SWAP1 DUP6 DUP4 ADD DUP4 DUP6 MUL DUP8 ADD DUP5 ADD DUP9 LT ISZERO PUSH2 0x1530 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP6 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x14E7 JUMPI DUP2 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1559 JUMPI DUP8 DUP9 REVERT JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1532 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xA9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x158B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x159F JUMPI INVALID JUMPDEST PUSH2 0x15D0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x1A42 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x15E4 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP1 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xA9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0xA9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1638 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x164F JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x165B DUP9 DUP4 DUP10 ADD PUSH2 0x148D JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1670 JUMPI DUP5 DUP6 REVERT JUMPDEST POP PUSH2 0x167D DUP8 DUP3 DUP9 ADD PUSH2 0x14F4 JUMP JUMPDEST SWAP4 POP POP PUSH2 0x168C PUSH1 0x40 DUP7 ADD PUSH2 0x1610 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x169C DUP2 PUSH2 0x1AA9 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x16BB JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x16D2 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x16DE DUP8 DUP4 DUP9 ADD PUSH2 0x148D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x16F3 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x1700 DUP7 DUP3 DUP8 ADD PUSH2 0x14F4 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1711 DUP2 PUSH2 0x1AA9 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1730 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1746 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x1752 DUP7 DUP3 DUP8 ADD PUSH2 0x157B JUMP JUMPDEST SWAP4 POP POP PUSH2 0x1761 PUSH1 0x20 DUP6 ADD PUSH2 0x1610 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1711 DUP2 PUSH2 0x1AA9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1783 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1799 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x17A5 DUP6 DUP3 DUP7 ADD PUSH2 0x157B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x17B6 DUP2 PUSH2 0x1AA9 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x17D2 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x17DD DUP2 PUSH2 0x1A84 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x17F9 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1804 DUP2 PUSH2 0x1A84 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x1814 DUP2 PUSH2 0x1A84 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x1824 DUP2 PUSH2 0x1A84 JUMP JUMPDEST SWAP2 POP PUSH2 0x1832 PUSH1 0x60 DUP7 ADD PUSH2 0x1610 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1857 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1862 DUP2 PUSH2 0x1A84 JUMP JUMPDEST DUP1 SWAP8 POP POP PUSH1 0x20 DUP9 ADD MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x1879 JUMPI DUP6 DUP7 REVERT JUMPDEST SWAP6 POP PUSH2 0x1887 PUSH1 0x40 DUP10 ADD PUSH2 0x15FE JUMP JUMPDEST SWAP5 POP PUSH2 0x1895 PUSH1 0x60 DUP10 ADD PUSH2 0x15FE JUMP JUMPDEST SWAP4 POP PUSH2 0x18A3 PUSH1 0x80 DUP10 ADD PUSH2 0x15FE JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x18B8 JUMPI DUP3 DUP4 REVERT JUMPDEST SWAP2 POP PUSH2 0x18C6 PUSH1 0xC0 DUP10 ADD PUSH2 0x156B JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18E5 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1901 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD PUSH2 0x190C DUP2 PUSH2 0x1AA9 JUMP JUMPDEST DUP1 SWAP5 POP POP PUSH1 0x20 DUP6 ADD MLOAD DUP1 PUSH1 0x6 SIGNEXTEND DUP2 EQ PUSH2 0x1923 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x1934 DUP2 PUSH2 0x1A84 JUMP JUMPDEST SWAP2 POP PUSH2 0x1832 PUSH1 0x60 DUP7 ADD PUSH2 0x156B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x2 SWAP3 DUP4 SIGNEXTEND DUP2 MSTORE SWAP2 SIGNEXTEND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F4E490000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x3 SWAP1 DUP3 ADD MSTORE PUSH32 0x4E454F0000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE PUSH32 0x5444000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1A5E JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1A7A JUMPI INVALID JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1AA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1AA6 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "128:1651:84:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;573:234;;;;;;:::i;:::-;;:::i;:::-;;1485:292;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;395:70;;;;;;:::i;:::-;;:::i;420:38:16:-;;;:::i;:::-;;;;;;;:::i;1018:218:84:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;328:41:16:-;;;:::i;1242:237:84:-;;;;;;:::i;:::-;;:::i;7824:442:58:-;;;;;;:::i;:::-;;:::i;7427:355::-;;;;;;:::i;:::-;;:::i;573:234:84:-;718:14;;;;:5;:14;;;;;;;;;;;:24;;;;;;;;;;;;:29;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;764:15;;;;;;;;;:24;;;;;;;;;:29;;;;;;;:36;;;;;;;;;;573:234::o;1485:292::-;1636:34;1672;1725:45;1743:5;1750:7;1759:10;1725:17;:45::i;:::-;1718:52;;;;1485:292;;;;;;:::o;395:70::-;446:4;:12;395:70::o;420:38:16:-;;;:::o;1018:218:84:-;1128:23;1153:17;1193:36;1224:4;1193:30;:36::i;:::-;1186:43;;;;1018:218;;;:::o;328:41:16:-;;;:::o;1242:237:84:-;1358:27;1387;1437:35;1455:4;1461:10;1437:17;:35::i;:::-;1430:42;;;;1242:237;;;;;:::o;7824:442:58:-;8022:34;8058;8108:45;8126:5;8133:7;8142:10;8108:17;:45::i;:::-;8021:132;;;;8231:21;8171:81;;8201:27;8171;:57;:81;8163:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;7824:442;;;;;;:::o;7427:355::-;7588:27;7617;7648:35;7666:4;7672:10;7648:17;:35::i;:::-;7587:96;;;;7747:21;7701:67;;7724:20;7701;:43;:67;7693:82;;;;;;;;;;;;:::i;:::-;7427:355;;;;;:::o;6116:1269::-;6263:34;6299;6369:7;:14;6353:5;:12;:30;6345:39;;;;;;6395:69;6516:5;:12;6479:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6395:134;;6539:69;6660:5;:12;6623:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6539:134;;6689:9;6684:466;6708:5;:12;6704:1;:16;6684:466;;;6742:27;6771;6802:39;6820:5;6826:1;6820:8;;;;;;;;;;;;;;6830:10;6802:17;:39::i;:::-;6741:100;;;;6895:29;6903:20;6895:7;:29::i;:::-;6855;6885:1;6855:32;;;;;;;;;;;;;;:37;;:69;;;;;;;;;;;6978:29;6986:20;6978:7;:29::i;:::-;6938;6968:1;6938:32;;;;;;;;;;;;;;:37;;:69;;;;;;;;;;;7063:7;7071:1;7063:10;;;;;;;;;;;;;;7021:29;7051:1;7021:32;;;;;;;;;;;;;;:39;;:52;;;;;;;;;;;7129:7;7137:1;7129:10;;;;;;;;;;;;;;7087:29;7117:1;7087:32;;;;;;;;;;;;;;;;;;;:52;;;;:39;;:52;-1:-1:-1;;6722:3:58;;6684:466;;;;7190:74;7234:29;7190:43;:74::i;:::-;7160:104;;;;7304:74;7348:29;7304:43;:74::i;:::-;7274:104;;;;6116:1269;;;;;;;;:::o;810:1472::-;916:23;941:17;974:23;1007:29;1112:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1046:78:58;;-1:-1:-1;1046:78:58;;-1:-1:-1;1046:78:58;-1:-1:-1;;1251:1:58;1226:26;;;;;-1:-1:-1;1218:42:58;;-1:-1:-1;1218:42:58;;;;;;;;;;;:::i;:::-;1578:27;1607:20;1635:4;:17;;;1653:16;1635:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1577:93;;;;;;1715:17;:15;:17::i;:::-;1684:49;;:20;:49;;;1680:596;;1769:11;1749:31;;1680:596;;;1811:17;1890:22;1831:81;;1885:1;1860:22;1832:50;;1840:16;1832:25;;:50;:54;1831:81;;;;;;1811:101;;1927:31;1960:24;1988:20;2028:4;:17;;;2046:9;2028:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1926:130;;;;;;;2079:15;2071:31;;;;;;;;;;;;:::i;:::-;2132:47;;;2219:45;;;2220:35;;;2219:45;;;;;;;;2193:72;;1680:596;;;;;;810:1472;;;;;;;:::o;2888:2574::-;3000:27;3029;3072:23;3106:16;3125:15;:4;:13;:15::i;:::-;3106:34;-1:-1:-1;3150:23:58;;3183:2047;3207:8;3203:1;:12;3183:2047;;;3298:15;3315:16;3333:10;3347:22;:4;:20;:22::i;:::-;3297:72;;;;;;3383:17;3403:38;3418:7;3427:8;3437:3;3403:14;:38::i;:::-;3383:58;-1:-1:-1;3526:18:58;;3594:15;;;3590:395;;3757:36;3788:4;3757:30;:36::i;:::-;3728:65;;;;;-1:-1:-1;3728:65:58;;;-1:-1:-1;3590:395:58;;;3850:48;3880:4;3887:10;3850:21;:48::i;:::-;3832:66;;;;;;;;;;3957:4;3944:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;3916:54:58;;;;;;-1:-1:-1;;;;3590:395:58;4019:1;4008:8;:12;4003:1;:17;3999:682;;;4469:8;4459:18;;:7;:18;;;4438:39;;3999:682;;;4607:16;:4;:14;:16::i;:::-;4600:23;;4659:7;4641:25;;3999:682;4857:8;4869:6;;;4868:81;;;4899:7;4881:25;;:15;:25;;;:67;;4941:7;4930:18;;:8;:18;;;4881:67;;;4919:8;4909:18;;:7;:18;;;4881:67;4857:92;;4967:3;4963:257;;;4990:35;;;;5043;;;;4963:257;;;5141:11;5117:35;;;;5194:11;5170:35;;;;4963:257;-1:-1:-1;;3217:3:58;;;;;-1:-1:-1;3183:2047:58;;-1:-1:-1;;;;3183:2047:58;;;5345:18;5340:116;;5403:2;5379:26;;;;5443:2;5419:26;;;;5340:116;2888:2574;;;;;;;;:::o;5539:103::-;5633:1;5615:19;;;;;;5607:28;;;;;;5539:103;;;:::o;7520:879:33:-;7640:32;7760:16;7833:19;7972:9;7967:204;7987:16;:23;7983:1;:27;7967:204;;;8078:16;8095:1;8078:19;;;;;;;;;;;;;;:26;;;8071:34;;8044:16;8061:1;8044:19;;;;;;;;;;;;;;:24;;;:61;;;8031:74;;;;8134:16;8151:1;8134:19;;;;;;;;;;;;;;:26;;;8119:41;;;;;;8012:3;;;;;;;7967:204;;;;8235:11;8216:9;:31;;;;;;8181:67;;8319:1;8307:9;:13;:55;;;;;8344:11;8325:9;:31;;;;;;:36;;8307:55;8303:89;;;8364:28;;;;;8303:89;7520:879;;;;;:::o;471:96:84:-;556:4;;471:96;:::o;1282:235:34:-;1471:11;507:20;1471:23;;;;1470:39;;1282:235::o;1779:240::-;1846:14;;;1909:17;:4;1846:14;1909;:17::i;:::-;1900:26;-1:-1:-1;1942:24:34;:4;304:2;1942:13;:24::i;:::-;1936:30;-1:-1:-1;1985:27:34;:4;507:20;1985:14;:27::i;:::-;1976:36;;1779:240;;;;;:::o;813:199:84:-;979:13;;;;943:17;979:13;;;;;;;;;;;:21;;;;;;;;;;;:26;;;;;;;;;;;;;;813:199::o;1058:1220:33:-;1153:24;;1228:15;;;1220:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1291:15;;;1304:1;1291:15;;;;;;;;1261:27;;1291:15;;;;;;;;;;-1:-1:-1;1291:15:33;1261:45;;1333:10;1316:11;1328:1;1316:14;;;;;;;;;;;;;:27;;;;;;;;;;;1370:1;1353:11;1365:1;1353:14;;;;;;;;:18;;;;:14;;;;;;;;;;:18;1470:52;;;;;;;;;;;;;;;;;;;1383:30;;;;1470:39;;;;;;1510:11;;1470:52;;;;;;;;;;;;;;;;;1383:30;1470:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1470:52:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1470:52:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1382:140;;;;1533:26;1583:15;1599:1;1583:18;;;;;;;;;;;;;;1562:15;1578:1;1562:18;;;;;;;;;;;;;;:39;1533:68;;1611:43;1709:34;1744:1;1709:37;;;;;;;;;;;;;;1657:34;1692:1;1657:37;;;;;;;;;;;;;;:89;1611:135;;1807:10;1784:33;;:20;:33;;;;;;;;1757:61;;1900:1;1877:20;:24;;;:68;;;;;1929:10;1906:33;;:20;:33;;;;;;;;:38;;;;1877:68;1873:94;;;1947:20;;;;;1873:94;2120:19;;;2142:17;2120:39;2219:50;2267:2;2219:50;;;;;2201:69;;2219:50;2201:69;;;;;2169:102;;1058:1220;;;;;;;;;;;:::o;2561:149:34:-;2677:11;;2622:12;;2653:50;;2677:4;;507:20;;2677:25;;2653:10;:50::i;:::-;2646:57;2561:149;-1:-1:-1;;2561:149:34:o;3214:416:31:-;3293:7;3335:6;3320;3329:2;3320:11;:21;;3312:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3399:6;3408:2;3399:11;3382:6;:13;:28;;3374:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3524:30:31;3540:4;3524:30;3518:37;3557:27;3514:71;;;3214:416::o;3636:365::-;3714:6;3754;3740;3749:1;3740:10;:20;;3732:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3817:6;3826:1;3817:10;3800:6;:13;:27;;3792:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3929:29:31;3945:3;3929:29;3923:36;;3636:365::o;399:2809::-;491:12;539:7;523;533:2;523:12;:23;;515:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;603:6;592:7;583:6;:16;:26;;575:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;672:7;663:6;:16;646:6;:13;:33;;638:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;712:22;775:15;;803:1967;;;;2911:4;2905:11;2892:24;;3097:1;3086:9;3079:20;3145:4;3134:9;3130:20;3124:4;3117:34;768:2397;;803:1967;985:4;979:11;966:24;;1644:2;1635:7;1631:16;2026:9;2019:17;2013:4;2009:28;1997:9;1986;1982:25;1978:60;2074:7;2070:2;2066:16;2326:6;2312:9;2305:17;2299:4;2295:28;2283:9;2275:6;2271:22;2267:57;2263:70;2100:425;2359:3;2355:2;2352:11;2100:425;;;2497:9;;2486:21;;2400:4;2392:13;;;;2432;2100:425;;;-1:-1:-1;;2543:26:31;;;2751:2;2734:11;2747:7;2730:25;2724:4;2717:39;-1:-1:-1;768:2397:31;-1:-1:-1;3192:9:31;399:2809;-1:-1:-1;;;;399:2809:31:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;14:669:89:-;;125:3;118:4;110:6;106:17;102:27;92:2;;147:5;140;133:20;92:2;187:6;174:20;213:4;237:63;252:47;296:2;252:47;:::i;:::-;237:63;:::i;:::-;334:15;;;365:12;;;;397:15;;;430:5;444:210;458:2;455:1;452:9;444:210;;;515:64;575:3;570:2;563:3;550:17;542:6;538:30;534:39;515:64;:::i;:::-;503:77;;600:12;;;;632;;;;476:1;469:9;444:210;;;-1:-1:-1;672:5:89;;82:601;-1:-1:-1;;;;;;;82:601:89:o;688:840::-;;801:3;794:4;786:6;782:17;778:27;768:2;;823:5;816;809:20;768:2;863:6;850:20;889:4;913:63;928:47;972:2;928:47;:::i;913:63::-;1010:15;;;1041:12;;;;1073:15;;;1119:11;;;1107:24;;1103:33;;1100:42;-1:-1:-1;1097:2:89;;;1159:5;1152;1145:20;1097:2;1185:5;1199:300;1213:2;1210:1;1207:9;1199:300;;;1284:3;1271:17;1332:34;1325:5;1321:46;1314:5;1311:57;1301:2;;1386:5;1379;1372:20;1301:2;1407:18;;1445:12;;;;1477;;;;1231:1;1224:9;1199:300;;1533:166;1611:13;;1660;;1653:21;1643:32;;1633:2;;1689:1;1686;1679:12;1704:601;;1801:3;1794:4;1786:6;1782:17;1778:27;1768:2;;1823:5;1816;1809:20;1768:2;1863:6;1850:20;1889:18;1885:2;1882:26;1879:2;;;1911:9;1879:2;1946:113;2053:4;1984:66;1977:4;1973:2;1969:13;1965:86;1961:97;1946:113;:::i;:::-;2084:2;2075:7;2068:19;2130:3;2123:4;2118:2;2110:6;2106:15;2102:26;2099:35;2096:2;;;2151:5;2144;2137:20;2096:2;2220;2213:4;2205:6;2201:17;2194:4;2185:7;2181:18;2168:55;2243:16;;;2261:4;2239:27;2232:42;;;;2247:7;1758:547;-1:-1:-1;;1758:547:89:o;2310:165::-;2390:13;;2443:6;2432:18;;2422:29;;2412:2;;2465:1;2462;2455:12;2480:163;2549:20;;2609:8;2598:20;;2588:31;;2578:2;;2633:1;2630;2623:12;2648:854;;;;;2868:3;2856:9;2847:7;2843:23;2839:33;2836:2;;;2890:6;2882;2875:22;2836:2;2935:9;2922:23;2964:18;3005:2;2997:6;2994:14;2991:2;;;3026:6;3018;3011:22;2991:2;3054:65;3111:7;3102:6;3091:9;3087:22;3054:65;:::i;:::-;3044:75;;3172:2;3161:9;3157:18;3144:32;3128:48;;3201:2;3191:8;3188:16;3185:2;;;3222:6;3214;3207:22;3185:2;;3250:69;3311:7;3300:8;3289:9;3285:24;3250:69;:::i;:::-;3240:79;;;3338:39;3373:2;3362:9;3358:18;3338:39;:::i;:::-;3328:49;;3427:2;3416:9;3412:18;3399:32;3440;3466:5;3440:32;:::i;:::-;2826:676;;;;-1:-1:-1;2826:676:89;;-1:-1:-1;;2826:676:89:o;3507:779::-;;;;3711:2;3699:9;3690:7;3686:23;3682:32;3679:2;;;3732:6;3724;3717:22;3679:2;3777:9;3764:23;3806:18;3847:2;3839:6;3836:14;3833:2;;;3868:6;3860;3853:22;3833:2;3896:65;3953:7;3944:6;3933:9;3929:22;3896:65;:::i;:::-;3886:75;;4014:2;4003:9;3999:18;3986:32;3970:48;;4043:2;4033:8;4030:16;4027:2;;;4064:6;4056;4049:22;4027:2;;4092:69;4153:7;4142:8;4131:9;4127:24;4092:69;:::i;:::-;4082:79;;;4211:2;4200:9;4196:18;4183:32;4224;4250:5;4224:32;:::i;:::-;4275:5;4265:15;;;3669:617;;;;;:::o;4291:551::-;;;;4444:2;4432:9;4423:7;4419:23;4415:32;4412:2;;;4465:6;4457;4450:22;4412:2;4510:9;4497:23;4543:18;4535:6;4532:30;4529:2;;;4580:6;4572;4565:22;4529:2;4608:51;4651:7;4642:6;4631:9;4627:22;4608:51;:::i;:::-;4598:61;;;4678:39;4713:2;4702:9;4698:18;4678:39;:::i;:::-;4668:49;;4767:2;4756:9;4752:18;4739:32;4780;4806:5;4780:32;:::i;4847:477::-;;;4984:2;4972:9;4963:7;4959:23;4955:32;4952:2;;;5005:6;4997;4990:22;4952:2;5050:9;5037:23;5083:18;5075:6;5072:30;5069:2;;;5120:6;5112;5105:22;5069:2;5148:51;5191:7;5182:6;5171:9;5167:22;5148:51;:::i;:::-;5138:61;;;5249:2;5238:9;5234:18;5221:32;5262;5288:5;5262:32;:::i;:::-;5313:5;5303:15;;;4942:382;;;;;:::o;5329:278::-;;5460:2;5448:9;5439:7;5435:23;5431:32;5428:2;;;5481:6;5473;5466:22;5428:2;5525:9;5512:23;5544:33;5571:5;5544:33;:::i;:::-;5596:5;5418:189;-1:-1:-1;;;5418:189:89:o;5612:639::-;;;;;5793:3;5781:9;5772:7;5768:23;5764:33;5761:2;;;5815:6;5807;5800:22;5761:2;5859:9;5846:23;5878:33;5905:5;5878:33;:::i;:::-;5930:5;-1:-1:-1;5987:2:89;5972:18;;5959:32;6000:35;5959:32;6000:35;:::i;:::-;6054:7;-1:-1:-1;6113:2:89;6098:18;;6085:32;6126:35;6085:32;6126:35;:::i;:::-;6180:7;-1:-1:-1;6206:39:89;6241:2;6226:18;;6206:39;:::i;:::-;6196:49;;5751:500;;;;;;;:::o;6256:943::-;;;;;;;;6471:3;6459:9;6450:7;6446:23;6442:33;6439:2;;;6493:6;6485;6478:22;6439:2;6530:9;6524:16;6549:33;6576:5;6549:33;:::i;:::-;6601:5;6591:15;;;6651:2;6640:9;6636:18;6630:25;6700:7;6697:1;6686:22;6677:7;6674:35;6664:2;;6728:6;6720;6713:22;6664:2;6756:7;-1:-1:-1;6782:50:89;6828:2;6813:18;;6782:50;:::i;:::-;6772:60;;6851:50;6897:2;6886:9;6882:18;6851:50;:::i;:::-;6841:60;;6920:51;6966:3;6955:9;6951:19;6920:51;:::i;:::-;6910:61;;7016:3;7005:9;7001:19;6995:26;7065:4;7056:7;7052:18;7043:7;7040:31;7030:2;;7090:6;7082;7075:22;7030:2;7118:7;-1:-1:-1;7144:49:89;7188:3;7173:19;;7144:49;:::i;:::-;7134:59;;6429:770;;;;;;;;;;:::o;7204:190::-;;7316:2;7304:9;7295:7;7291:23;7287:32;7284:2;;;7337:6;7329;7322:22;7284:2;-1:-1:-1;7365:23:89;;7274:120;-1:-1:-1;7274:120:89:o;7399:651::-;;;;;7567:3;7555:9;7546:7;7542:23;7538:33;7535:2;;;7589:6;7581;7574:22;7535:2;7626:9;7620:16;7645:32;7671:5;7645:32;:::i;:::-;7696:5;7686:15;;;7746:2;7735:9;7731:18;7725:25;7795:7;7792:1;7781:22;7772:7;7769:35;7759:2;;7823:6;7815;7808:22;7759:2;7903;7888:18;;7882:25;7851:7;;-1:-1:-1;7916:35:89;7882:25;7916:35;:::i;:::-;7970:7;-1:-1:-1;7996:48:89;8040:2;8025:18;;7996:48;:::i;8055:226::-;8231:42;8219:55;;;;8201:74;;8189:2;8174:18;;8156:125::o;8286:270::-;8481:1;8470:21;;;8452:40;;8528:21;;8523:2;8508:18;;8501:49;8440:2;8425:18;;8407:149::o;8561:244::-;8731:25;;;8787:2;8772:18;;8765:34;8719:2;8704:18;;8686:119::o;8810:326::-;9012:2;8994:21;;;9051:1;9031:18;;;9024:29;9089:5;9084:2;9069:18;;9062:33;9127:2;9112:18;;8984:152::o;9141:326::-;9343:2;9325:21;;;9382:1;9362:18;;;9355:29;9420:5;9415:2;9400:18;;9393:33;9458:2;9443:18;;9315:152::o;9472:325::-;9674:2;9656:21;;;9713:1;9693:18;;;9686:29;9751:4;9746:2;9731:18;;9724:32;9788:2;9773:18;;9646:151::o;9802:189::-;9977:6;9965:19;;;;9947:38;;9935:2;9920:18;;9902:89::o;9996:177::-;10142:25;;;10130:2;10115:18;;10097:76::o;10178:242::-;10248:2;10242:9;10278:17;;;10325:18;10310:34;;10346:22;;;10307:62;10304:2;;;10372:9;10304:2;10399;10392:22;10222:198;;-1:-1:-1;10222:198:89:o;10425:181::-;;10522:18;10514:6;10511:30;10508:2;;;10544:9;10508:2;-1:-1:-1;10595:4:89;10576:17;;;10572:28;;10498:108::o;10611:156::-;10699:42;10692:5;10688:54;10681:5;10678:65;10668:2;;10757:1;10754;10747:12;10668:2;10658:109;:::o;10772:123::-;10859:10;10852:5;10848:22;10841:5;10838:33;10828:2;;10885:1;10882;10875:12"
            },
            "methodIdentifiers": {
              "SAMB()": "90793ea8",
              "checkOracleSlippage(bytes,uint24,uint32)": "f25801a7",
              "checkOracleSlippage(bytes[],uint128[],uint24,uint32)": "efdeed8e",
              "factory()": "c45a0155",
              "registerPool(address,address,address,uint24)": "0f64f6a9",
              "setTime(uint256)": "3beb26c4",
              "testGetBlockStartingAndCurrentTick(address)": "ac810c6c",
              "testGetSyntheticTicks(bytes,uint32)": "eaea4bfc",
              "testGetSyntheticTicks(bytes[],uint128[],uint32)": "1d31557e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_WETH9\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"SAMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"paths\",\"type\":\"bytes[]\"},{\"internalType\":\"uint128[]\",\"name\":\"amounts\",\"type\":\"uint128[]\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint24\",\"name\":\"maximumTickDivergence\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"checkOracleSlippage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAstraCLPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_time\",\"type\":\"uint256\"}],\"name\":\"setTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAstraCLPool\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"testGetBlockStartingAndCurrentTick\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"blockStartingTick\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"currentTick\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"paths\",\"type\":\"bytes[]\"},{\"internalType\":\"uint128[]\",\"name\":\"amounts\",\"type\":\"uint128[]\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"testGetSyntheticTicks\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"averageSyntheticAverageTick\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"averageSyntheticCurrentTick\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"secondsAgo\",\"type\":\"uint32\"}],\"name\":\"testGetSyntheticTicks\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"syntheticAverageTick\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"syntheticCurrentTick\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"checkOracleSlippage(bytes,uint24,uint32)\":{\"params\":{\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"path\":\"The path to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"params\":{\"amounts\":\"The weights for each entry in `paths`\",\"maximumTickDivergence\":\"The maximum number of ticks that the price can degrade by\",\"paths\":\"The paths to fetch prices over\",\"secondsAgo\":\"The number of seconds ago to compute oracle prices against\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkOracleSlippage(bytes,uint24,uint32)\":{\"notice\":\"Ensures that the current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"},\"checkOracleSlippage(bytes[],uint128[],uint24,uint32)\":{\"notice\":\"Ensures that the weighted average current (synthetic) tick over the path is no worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/OracleSlippageTest.sol\":\"OracleSlippageTest\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"@airdao/astra-cl-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x5340256039418f5d03512a44173d3dcf1da277a73a461e06fb5668f49cfc46f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75dee99795d1125875233a7f1d356935099cc97b4085c0e451060d77db85d144\",\"dweb:/ipfs/QmTGqyrxVLQd8TBaarqSQDiYvq1QFutCdmTyXk6JpxzKTN\"]},\"@airdao/astra-cl-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0xe22d07f1ebf9c8468c81cb6905bfc8f8a54fa2f9b4a50742202a47cdbcb5af80\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d4773ca5008d2a2f496370695942c8ba3d6e1d487adbf5cda1149da12e3a6268\",\"dweb:/ipfs/QmcPYTLpEWfU8e3KAYBfHH7uYR4tGAkvnWrWS1CG8EkyLC\"]},\"@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol\":{\"keccak256\":\"0x1aa66f71234064a0c0976f62233f2edbd69554e5ad817dc97f318bc8e11f4da6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b3a40450e9d6b0f9cb91b40ffd6215612505bd74e7d954529958f4edc6ee7b93\",\"dweb:/ipfs/QmewsUCHK5N5KhNtqEwK8JgsXFADyFBrQRS5HoDWM5gi3b\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol\":{\"keccak256\":\"0x566b2f2f7bf89d107c66316e12b9cad9fade2f9cc2076bceb2090f54bada22da\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d13d485890a8eb6b2b6b38cf0b7fc39c7fc66462a9553159947ece2de55d9ba3\",\"dweb:/ipfs/QmaSEEBMjMvvrLqxmrskUmDwg86g7RHDa6SYiYiA77SJ1X\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x928bd8905080dc786dfeac23c31ac4b6654c5f9a1a998a7d09af315e12d3c0b9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4c71c4cbc831a3d58ea6b41fe8d5454a5776bbb82b28a67ae1ac7d95e86ec02a\",\"dweb:/ipfs/QmSHz3FzBisdCaMfey1cBuAF5rC93b5571zkfBRFVrambU\"]},\"@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol\":{\"keccak256\":\"0xed1b8acd0184eb321d5f4b5c2576608d1c12f5db1bb72d950054438f7f1946a6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f55d6aca86dcf1f1ab6413f48964f821306a29914c2117c16f20446faa5d6d0a\",\"dweb:/ipfs/QmWKbbg6kA9kkPVrCh6hJMnPhK1NhuVoHEd9s3vmYWsvTa\"]},\"@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol\":{\"keccak256\":\"0xf9dab1f6ac5c82c1a19688e900ab355a266e85af4f76346db925789352081c31\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1ba91097b8fdd8a46d9b837e7a80f8e3ccdaeb3d49870c6558b88d5064abdfce\",\"dweb:/ipfs/QmaocoW3nkgMSZjTLXm15ERTPN2yFLMAWE114s1R99hgrS\"]},\"@airdao/astra-cl-periphery/contracts/libraries/Path.sol\":{\"keccak256\":\"0x0a6928608f48763796089e22dfc02a462cce63bb7727663961b3ed8c4f3eb862\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73bb4f107faf873db8700ce8950d2c4c88d41e0e1716da599bb733ad884f95eb\",\"dweb:/ipfs/QmZXSaPVpgDXpkKqYRdByJ3UXaMV2ATkr7V72nRZij8wmB\"]},\"@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0xdd82100913bcb7c490e9e6912ab33994bd97d5a59e67209826ebf917bc8271c1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ecfc24c77d80aa718604d8a2c4d59460b76b5fd567d15206414e3838dd6698b7\",\"dweb:/ipfs/QmVtUC9dnade4RkzXaSqEFdAkiEftJ777jmT619LX2VLGv\"]},\"contracts/base/OracleSlippage.sol\":{\"keccak256\":\"0x07ac427a696edbfd94c4bed8effc35b0cdd58e03ef686b90cdb53595c192c735\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bdf770fc6939af09a7a804446d1d6ab9e230ff0255bb2922ae88778677071ecc\",\"dweb:/ipfs/QmYRaL4z9KFDtDTkehTXmfNMntPLxsjtAUPp5GoNELvdiK\"]},\"contracts/interfaces/IOracleSlippage.sol\":{\"keccak256\":\"0xa9d1e4336b20fa992ab6b742f2750b3fb660e0d667eac304c5bbd8a8ea96edfc\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://afe7afc18f293b6bc189550f20c318ecccda37241409a031bc94cf7412420dbd\",\"dweb:/ipfs/QmVuiKox1K4Df5QS6RLHQDprYaDMXRRvHW3ym3NDdi3vrq\"]},\"contracts/test/OracleSlippageTest.sol\":{\"keccak256\":\"0x80bd36fb17399dfeb49960544a8021d77c4bdb49ca80169ecc02a4eb7a305715\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1b26d1cb3ee294634eef18b52efde7b6cd0c1616b5ba50769249bdac9aae29ad\",\"dweb:/ipfs/QmaP9B2KBdNcLVzovARYEGs8MhAVdkBC6AZR1Bf7iuTKxk\"]}},\"version\":1}"
        }
      },
      "contracts/test/PoolTicksCounterTest.sol": {
        "PoolTicksCounterTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "contract IAstraCLPool",
                  "name": "pool",
                  "type": "address"
                },
                {
                  "internalType": "int24",
                  "name": "tickBefore",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickAfter",
                  "type": "int24"
                }
              ],
              "name": "countInitializedTicksCrossed",
              "outputs": [
                {
                  "internalType": "uint32",
                  "name": "initializedTicksCrossed",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b5061075e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634c5b941c14610030575b600080fd5b6100766004803603606081101561004657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020810135600290810b9160400135900b61008f565b6040805163ffffffff9092168252519081900360200190f35b60006100b273ffffffffffffffffffffffffffffffffffffffff851684846100ba565b949350505050565b60008060008060008060008060088b73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561010e57600080fd5b505afa158015610122573d6000803e3d6000fd5b505050506040513d602081101561013857600080fd5b5051600290810b908c900b8161014a57fe5b0560020b901d905060006101008c73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561019d57600080fd5b505afa1580156101b1573d6000803e3d6000fd5b505050506040513d60208110156101c757600080fd5b5051600290810b908d900b816101d957fe5b0560020b816101e457fe5b079050600060088d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561023157600080fd5b505afa158015610245573d6000803e3d6000fd5b505050506040513d602081101561025b57600080fd5b5051600290810b908d900b8161026d57fe5b0560020b901d905060006101008e73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156102c057600080fd5b505afa1580156102d4573d6000803e3d6000fd5b505050506040513d60208110156102ea57600080fd5b5051600290810b908e900b816102fc57fe5b0560020b8161030757fe5b07905060008160ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296856040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561036857600080fd5b505afa15801561037c573d6000803e3d6000fd5b505050506040513d602081101561039257600080fd5b50511611801561042557508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103e357600080fd5b505afa1580156103f7573d6000803e3d6000fd5b505050506040513d602081101561040d57600080fd5b5051600290810b908d900b8161041f57fe5b0760020b155b801561043657508b60020b8d60020b135b945060008360ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296876040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561049657600080fd5b505afa1580156104aa573d6000803e3d6000fd5b505050506040513d60208110156104c057600080fd5b50511611801561055357508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561051157600080fd5b505afa158015610525573d6000803e3d6000fd5b505050506040513d602081101561053b57600080fd5b5051600290810b908e900b8161054d57fe5b0760020b155b801561056457508b60020b8d60020b125b95508160010b8460010b128061059057508160010b8460010b14801561059057508060ff168360ff1611155b156105a6578399508297508198508096506105b3565b8199508097508398508296505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff87161b9150505b8560010b8760010b136106ea578560010b8760010b1415610624577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff858103161c165b6000818c73ffffffffffffffffffffffffffffffffffffffff16635339c2968a6040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561067b57600080fd5b505afa15801561068f573d6000803e3d6000fd5b505050506040513d60208110156106a557600080fd5b50511690506106b381610712565b61ffff16989098019750506001909501947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105df565b81156106f7576001880397505b8215610704576001880397505b505050505050509392505050565b6000805b821561074b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830190921691600101610716565b9291505056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x75E DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4C5B941C EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP2 PUSH1 0x40 ADD CALLDATALOAD SWAP1 SIGNEXTEND PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH2 0xB2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0xBA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x8 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x122 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x138 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP13 SWAP1 SIGNEXTEND DUP2 PUSH2 0x14A JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x1D9 JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0x1E4 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 PUSH1 0x8 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x245 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x26D JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP15 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x2FC JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0x307 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x392 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x425 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x40D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x41F JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x436 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SGT JUMPDEST SWAP5 POP PUSH1 0x0 DUP4 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x496 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x553 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x525 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x53B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x54D JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x564 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SLT JUMPDEST SWAP6 POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND SLT DUP1 PUSH2 0x590 JUMPI POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND EQ DUP1 ISZERO PUSH2 0x590 JUMPI POP DUP1 PUSH1 0xFF AND DUP4 PUSH1 0xFF AND GT ISZERO JUMPDEST ISZERO PUSH2 0x5A6 JUMPI DUP4 SWAP10 POP DUP3 SWAP8 POP DUP2 SWAP9 POP DUP1 SWAP7 POP PUSH2 0x5B3 JUMP JUMPDEST DUP2 SWAP10 POP DUP1 SWAP8 POP DUP4 SWAP9 POP DUP3 SWAP7 POP JUMPDEST POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP8 AND SHL SWAP2 POP POP JUMPDEST DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND SGT PUSH2 0x6EA JUMPI DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND EQ ISZERO PUSH2 0x624 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP6 DUP2 SUB AND SHR AND JUMPDEST PUSH1 0x0 DUP2 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x68F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND SWAP1 POP PUSH2 0x6B3 DUP2 PUSH2 0x712 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP9 SWAP1 SWAP9 ADD SWAP8 POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5DF JUMP JUMPDEST DUP2 ISZERO PUSH2 0x6F7 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST DUP3 ISZERO PUSH2 0x704 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 ISZERO PUSH2 0x74B JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD SWAP1 SWAP3 AND SWAP2 PUSH1 0x1 ADD PUSH2 0x716 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "187:341:85:-:0;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c80634c5b941c14610030575b600080fd5b6100766004803603606081101561004657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020810135600290810b9160400135900b61008f565b6040805163ffffffff9092168252519081900360200190f35b60006100b273ffffffffffffffffffffffffffffffffffffffff851684846100ba565b949350505050565b60008060008060008060008060088b73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561010e57600080fd5b505afa158015610122573d6000803e3d6000fd5b505050506040513d602081101561013857600080fd5b5051600290810b908c900b8161014a57fe5b0560020b901d905060006101008c73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561019d57600080fd5b505afa1580156101b1573d6000803e3d6000fd5b505050506040513d60208110156101c757600080fd5b5051600290810b908d900b816101d957fe5b0560020b816101e457fe5b079050600060088d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561023157600080fd5b505afa158015610245573d6000803e3d6000fd5b505050506040513d602081101561025b57600080fd5b5051600290810b908d900b8161026d57fe5b0560020b901d905060006101008e73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156102c057600080fd5b505afa1580156102d4573d6000803e3d6000fd5b505050506040513d60208110156102ea57600080fd5b5051600290810b908e900b816102fc57fe5b0560020b8161030757fe5b07905060008160ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296856040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561036857600080fd5b505afa15801561037c573d6000803e3d6000fd5b505050506040513d602081101561039257600080fd5b50511611801561042557508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103e357600080fd5b505afa1580156103f7573d6000803e3d6000fd5b505050506040513d602081101561040d57600080fd5b5051600290810b908d900b8161041f57fe5b0760020b155b801561043657508b60020b8d60020b135b945060008360ff166001901b8f73ffffffffffffffffffffffffffffffffffffffff16635339c296876040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561049657600080fd5b505afa1580156104aa573d6000803e3d6000fd5b505050506040513d60208110156104c057600080fd5b50511611801561055357508d73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561051157600080fd5b505afa158015610525573d6000803e3d6000fd5b505050506040513d602081101561053b57600080fd5b5051600290810b908e900b8161054d57fe5b0760020b155b801561056457508b60020b8d60020b125b95508160010b8460010b128061059057508160010b8460010b14801561059057508060ff168360ff1611155b156105a6578399508297508198508096506105b3565b8199508097508398508296505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff87161b9150505b8560010b8760010b136106ea578560010b8760010b1415610624577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff858103161c165b6000818c73ffffffffffffffffffffffffffffffffffffffff16635339c2968a6040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561067b57600080fd5b505afa15801561068f573d6000803e3d6000fd5b505050506040513d60208110156106a557600080fd5b50511690506106b381610712565b61ffff16989098019750506001909501947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105df565b81156106f7576001880397505b8215610704576001880397505b505050505050509392505050565b6000805b821561074b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830190921691600101610716565b9291505056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4C5B941C EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP2 PUSH1 0x40 ADD CALLDATALOAD SWAP1 SIGNEXTEND PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH2 0xB2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0xBA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x8 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x122 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x138 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP13 SWAP1 SIGNEXTEND DUP2 PUSH2 0x14A JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x1D9 JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0x1E4 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 PUSH1 0x8 DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x245 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x26D JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND SWAP1 SAR SWAP1 POP PUSH1 0x0 PUSH2 0x100 DUP15 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x2FC JUMPI INVALID JUMPDEST SDIV PUSH1 0x2 SIGNEXTEND DUP2 PUSH2 0x307 JUMPI INVALID JUMPDEST SMOD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x392 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x425 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x40D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP14 SWAP1 SIGNEXTEND DUP2 PUSH2 0x41F JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x436 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SGT JUMPDEST SWAP5 POP PUSH1 0x0 DUP4 PUSH1 0xFF AND PUSH1 0x1 SWAP1 SHL DUP16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x496 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND GT DUP1 ISZERO PUSH2 0x553 JUMPI POP DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x525 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x53B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND SWAP1 DUP15 SWAP1 SIGNEXTEND DUP2 PUSH2 0x54D JUMPI INVALID JUMPDEST SMOD PUSH1 0x2 SIGNEXTEND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x564 JUMPI POP DUP12 PUSH1 0x2 SIGNEXTEND DUP14 PUSH1 0x2 SIGNEXTEND SLT JUMPDEST SWAP6 POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND SLT DUP1 PUSH2 0x590 JUMPI POP DUP2 PUSH1 0x1 SIGNEXTEND DUP5 PUSH1 0x1 SIGNEXTEND EQ DUP1 ISZERO PUSH2 0x590 JUMPI POP DUP1 PUSH1 0xFF AND DUP4 PUSH1 0xFF AND GT ISZERO JUMPDEST ISZERO PUSH2 0x5A6 JUMPI DUP4 SWAP10 POP DUP3 SWAP8 POP DUP2 SWAP9 POP DUP1 SWAP7 POP PUSH2 0x5B3 JUMP JUMPDEST DUP2 SWAP10 POP DUP1 SWAP8 POP DUP4 SWAP9 POP DUP3 SWAP7 POP JUMPDEST POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP8 AND SHL SWAP2 POP POP JUMPDEST DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND SGT PUSH2 0x6EA JUMPI DUP6 PUSH1 0x1 SIGNEXTEND DUP8 PUSH1 0x1 SIGNEXTEND EQ ISZERO PUSH2 0x624 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xFF DUP6 DUP2 SUB AND SHR AND JUMPDEST PUSH1 0x0 DUP2 DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5339C296 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x68F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD AND SWAP1 POP PUSH2 0x6B3 DUP2 PUSH2 0x712 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP9 SWAP1 SWAP9 ADD SWAP8 POP POP PUSH1 0x1 SWAP1 SWAP6 ADD SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5DF JUMP JUMPDEST DUP2 ISZERO PUSH2 0x6F7 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST DUP3 ISZERO PUSH2 0x704 JUMPI PUSH1 0x1 DUP9 SUB SWAP8 POP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 ISZERO PUSH2 0x74B JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD SWAP1 SWAP3 AND SWAP2 PUSH1 0x1 ADD PUSH2 0x716 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "187:341:85:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;269:257;;;;;;;;;;;;;;;;-1:-1:-1;269:257:85;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;414:30;463:56;:33;;;497:10;509:9;463:33;:56::i;:::-;456:63;269:257;-1:-1:-1;;;;269:257:85:o;640:3303:81:-;785:30;827:18;855:19;884:17;911:18;939:26;975:25;1128:13;1187:1;1164:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1164:18:81;1151:31;;;;;;;;;;;;;;1150:38;;;;1128:61;;1203:12;1260:3;1238:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1238:18:81;1225:31;;;;;;;;;;;;;;1224:39;;;;;;;;1203:61;;1279:18;1342:1;1319:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1319:18:81;1307:30;;;;;;;;;;;;;;1306:37;;;;1279:65;;1358:17;1419:3;1397:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1397:18:81;1385:30;;;;;;;;;;;;;;1384:38;;;;;;;;1358:65;;1898:1;1882:11;1877:16;;:1;:16;;1844:4;:15;;;1860:12;1844:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1844:29:81;:50;1843:56;1842:117;;;;;1934:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1934:18:81;1922:30;;;;;;;;;;;;;;1921:37;;;1842:117;:161;;;;;1993:9;1980:22;;:10;:22;;;1842:161;1803:200;;2313:1;2302:6;2297:11;;:1;:11;;2269:4;:15;;;2285:7;2269:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2269:24:81;:40;2268:46;2267:108;;;;;2350:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2350:18:81;2337:31;;;;;;;;;;;;;;2336:38;;;2267:108;:152;;;;;2409:9;2396:22;;:10;:22;;;2267:152;2227:192;;2448:12;2438:22;;:7;:22;;;:76;;;;2476:12;2465:23;;:7;:23;;;:48;;;;;2502:11;2492:21;;:6;:21;;;;2465:48;2434:454;;;2549:7;2534:22;;2588:6;2574:20;;2628:12;2612:28;;2673:11;2658:26;;2434:454;;;2738:12;2723:27;;2782:11;2768:25;;2827:7;2811:23;;2867:6;2852:21;;2434:454;-1:-1:-1;;3102:17:81;:32;;;;;-1:-1:-1;;3144:573:81;3167:13;3151:29;;:12;:29;;;3144:573;;3330:13;3314:29;;:12;:29;;;3310:125;;;3378:17;3400:3;:18;;;3378:41;;3370:50;3310:125;3449:14;3498:4;3466;:15;;;3482:12;3466:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3466:29:81;:36;;-1:-1:-1;3543:20:81;3466:36;3543:12;:20::i;:::-;3516:47;;;;;;;-1:-1:-1;;3577:14:81;;;;;3689:17;3144:573;;;3731:20;3727:79;;;3794:1;3767:28;;;;3727:79;3820:21;3816:80;;;3884:1;3857:28;;;;3816:80;3906:30;;;;;;;640:3303;;;;;:::o;3949:197::-;4004:6;;4047:72;4054:6;;4047:72;;4102:5;;;4096:12;;;;4076:6;;4047:72;;;4135:4;3949:197;-1:-1:-1;;3949:197:81:o"
            },
            "methodIdentifiers": {
              "countInitializedTicksCrossed(address,int24,int24)": "4c5b941c"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAstraCLPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickBefore\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickAfter\",\"type\":\"int24\"}],\"name\":\"countInitializedTicksCrossed\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"initializedTicksCrossed\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/PoolTicksCounterTest.sol\":\"PoolTicksCounterTest\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"contracts/libraries/PoolTicksCounter.sol\":{\"keccak256\":\"0x64582f3e6588d786a37e03b48f61725720652a2284308e0dffd5f28c9a3bdd15\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1ad4197021a4fcdee55402bab2a7a934ead5ea04a24262b1dcc8a08f44735eff\",\"dweb:/ipfs/QmfGC9JcqbY3C1cxBFhgLH7hJsqmCLjHwqPPYWn1S3PF1E\"]},\"contracts/test/PoolTicksCounterTest.sol\":{\"keccak256\":\"0xa6d34da5633a1ab8cfb72a3d6b1b0f6411a6158226f6fe02171cec3e2509704b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://11ccf08224a1fe1b6a4f8c5d846b70c5e8c260420bad9f170550d7882350bbb6\",\"dweb:/ipfs/QmQzAfJkNZrG4BxaWufhFn4iGA2Yefx3MzQHCeAtKs5Mq4\"]}},\"version\":1}"
        }
      },
      "contracts/test/TestAstraCLCallee.sol": {
        "TestAstraCLCallee": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "amount0Delta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1Delta",
                  "type": "int256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "astraCLSwapCallback",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Out",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                }
              ],
              "name": "swap0ForExact1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0Out",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                }
              ],
              "name": "swap1ForExact0",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0In",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                }
              ],
              "name": "swapExact0For1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1In",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                }
              ],
              "name": "swapExact1For0",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50610785806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063bac7bf7811610050578063bac7bf7814610133578063e2be91091461017c578063f603482c146101c557610067565b806311c178481461006c5780636dfc0ddb146100ea575b600080fd5b6100e86004803603606081101561008257600080fd5b8135916020810135918101906060810160408201356401000000008111156100a957600080fd5b8201836020820111156100bb57600080fd5b803590602001918460018302840111640100000000831117156100dd57600080fd5b50909250905061020e565b005b6100e86004803603608081101561010057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359160408201358116916060013516610495565b6100e86004803603608081101561014957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359160408201358116916060013516610607565b6100e86004803603608081101561019257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013591604082013581169160600135166106fa565b6100e8600480360360808110156101db57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359160408201358116916060013516610722565b60008282602081101561022057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1690506000851315610366573373ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561028957600080fd5b505afa15801561029d573d6000803e3d6000fd5b505050506040513d60208110156102b357600080fd5b5051604080517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015233602483015260448201899052915191909216916323b872dd9160648083019260209291908290030181600087803b15801561033457600080fd5b505af1158015610348573d6000803e3d6000fd5b505050506040513d602081101561035e57600080fd5b5061048e9050565b6000841361037057fe5b3373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156103b657600080fd5b505afa1580156103ca573d6000803e3d6000fd5b505050506040513d60208110156103e057600080fd5b5051604080517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015233602483015260448201889052915191909216916323b872dd9160648083019260209291908290030181600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b505050506040513d602081101561048b57600080fd5b50505b5050505050565b8373ffffffffffffffffffffffffffffffffffffffff1663128acb088360016104bd87610746565b8533604051602001808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040526040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff16815260200185151581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561058657818101518382015260200161056e565b50505050905090810190601f1680156105b35780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b1580156105d557600080fd5b505af11580156105e9573d6000803e3d6000fd5b505050506040513d60408110156105ff57600080fd5b505050505050565b8373ffffffffffffffffffffffffffffffffffffffff1663128acb0883600161062f87610746565b6000038533604051602001808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040526040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff16815260200185151581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360008381101561058657818101518382015260200161056e565b8373ffffffffffffffffffffffffffffffffffffffff1663128acb088360006104bd87610746565b8373ffffffffffffffffffffffffffffffffffffffff1663128acb0883600061062f875b60007f8000000000000000000000000000000000000000000000000000000000000000821061077457600080fd5b509056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x785 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xBAC7BF78 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0xBAC7BF78 EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0xE2BE9109 EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0xF603482C EQ PUSH2 0x1C5 JUMPI PUSH2 0x67 JUMP JUMPDEST DUP1 PUSH4 0x11C17848 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x6DFC0DDB EQ PUSH2 0xEA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x20E JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x495 JUMP JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x607 JUMP JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x6FA JUMP JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x722 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP PUSH1 0x0 DUP6 SGT ISZERO PUSH2 0x366 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x289 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x29D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP10 SWAP1 MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x348 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x35E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48E SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 SGT PUSH2 0x370 JUMPI INVALID JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP9 SWAP1 MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x461 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x475 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x48B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP4 PUSH1 0x1 PUSH2 0x4BD DUP8 PUSH2 0x746 JUMP JUMPDEST DUP6 CALLER PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x586 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x56E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x5B3 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP4 PUSH1 0x1 PUSH2 0x62F DUP8 PUSH2 0x746 JUMP JUMPDEST PUSH1 0x0 SUB DUP6 CALLER PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 DUP2 LT ISZERO PUSH2 0x586 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x56E JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP4 PUSH1 0x0 PUSH2 0x4BD DUP8 PUSH2 0x746 JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP4 PUSH1 0x0 PUSH2 0x62F DUP8 JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x774 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "344:1733:86:-:0;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100675760003560e01c8063bac7bf7811610050578063bac7bf7814610133578063e2be91091461017c578063f603482c146101c557610067565b806311c178481461006c5780636dfc0ddb146100ea575b600080fd5b6100e86004803603606081101561008257600080fd5b8135916020810135918101906060810160408201356401000000008111156100a957600080fd5b8201836020820111156100bb57600080fd5b803590602001918460018302840111640100000000831117156100dd57600080fd5b50909250905061020e565b005b6100e86004803603608081101561010057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359160408201358116916060013516610495565b6100e86004803603608081101561014957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359160408201358116916060013516610607565b6100e86004803603608081101561019257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013591604082013581169160600135166106fa565b6100e8600480360360808110156101db57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359160408201358116916060013516610722565b60008282602081101561022057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1690506000851315610366573373ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561028957600080fd5b505afa15801561029d573d6000803e3d6000fd5b505050506040513d60208110156102b357600080fd5b5051604080517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015233602483015260448201899052915191909216916323b872dd9160648083019260209291908290030181600087803b15801561033457600080fd5b505af1158015610348573d6000803e3d6000fd5b505050506040513d602081101561035e57600080fd5b5061048e9050565b6000841361037057fe5b3373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156103b657600080fd5b505afa1580156103ca573d6000803e3d6000fd5b505050506040513d60208110156103e057600080fd5b5051604080517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015233602483015260448201889052915191909216916323b872dd9160648083019260209291908290030181600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b505050506040513d602081101561048b57600080fd5b50505b5050505050565b8373ffffffffffffffffffffffffffffffffffffffff1663128acb088360016104bd87610746565b8533604051602001808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040526040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff16815260200185151581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561058657818101518382015260200161056e565b50505050905090810190601f1680156105b35780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b1580156105d557600080fd5b505af11580156105e9573d6000803e3d6000fd5b505050506040513d60408110156105ff57600080fd5b505050505050565b8373ffffffffffffffffffffffffffffffffffffffff1663128acb0883600161062f87610746565b6000038533604051602001808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040526040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff16815260200185151581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360008381101561058657818101518382015260200161056e565b8373ffffffffffffffffffffffffffffffffffffffff1663128acb088360006104bd87610746565b8373ffffffffffffffffffffffffffffffffffffffff1663128acb0883600061062f875b60007f8000000000000000000000000000000000000000000000000000000000000000821061077457600080fd5b509056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xBAC7BF78 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0xBAC7BF78 EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0xE2BE9109 EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0xF603482C EQ PUSH2 0x1C5 JUMPI PUSH2 0x67 JUMP JUMPDEST DUP1 PUSH4 0x11C17848 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x6DFC0DDB EQ PUSH2 0xEA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x20E JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x495 JUMP JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x607 JUMP JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x6FA JUMP JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x722 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP PUSH1 0x0 DUP6 SGT ISZERO PUSH2 0x366 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x289 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x29D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP10 SWAP1 MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x348 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x35E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48E SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 SGT PUSH2 0x370 JUMPI INVALID JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP9 SWAP1 MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x461 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x475 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x48B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP4 PUSH1 0x1 PUSH2 0x4BD DUP8 PUSH2 0x746 JUMP JUMPDEST DUP6 CALLER PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x586 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x56E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x5B3 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP4 PUSH1 0x1 PUSH2 0x62F DUP8 PUSH2 0x746 JUMP JUMPDEST PUSH1 0x0 SUB DUP6 CALLER PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 DUP2 LT ISZERO PUSH2 0x586 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x56E JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP4 PUSH1 0x0 PUSH2 0x4BD DUP8 PUSH2 0x746 JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x128ACB08 DUP4 PUSH1 0x0 PUSH2 0x62F DUP8 JUMPDEST PUSH1 0x0 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 LT PUSH2 0x774 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "344:1733:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1554:521;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1554:521:86;;-1:-1:-1;1554:521:86;-1:-1:-1;1554:521:86;:::i;:::-;;434:272;;;;;;;;;;;;;;;;-1:-1:-1;434:272:86;;;;;;;;;;;;;;;;;;;;;;;:::i;712:275::-;;;;;;;;;;;;;;;;-1:-1:-1;712:275:86;;;;;;;;;;;;;;;;;;;;;;;:::i;993:273::-;;;;;;;;;;;;;;;;-1:-1:-1;993:273:86;;;;;;;;;;;;;;;;;;;;;;;:::i;1272:276::-;;;;;;;;;;;;;;;;-1:-1:-1;1272:276:86;;;;;;;;;;;;;;;;;;;;;;;:::i;1554:521::-;1704:14;1732:4;;1721:27;;;;;;;;;;-1:-1:-1;1721:27:86;;;;-1:-1:-1;1778:1:86;1763:16;;1759:310;;;1815:10;1802:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1802:33:86;1795:97;;;;;;:54;:97;;;;;;;1858:10;1795:97;;;;;;;;;;;;:54;;;;;;;:97;;;;;1802:33;;1795:97;;;;;;;-1:-1:-1;1795:54:86;:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1759:310:86;;-1:-1:-1;1759:310:86;;1945:1;1930:12;:16;1923:24;;;;1981:10;1968:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1968:33:86;1961:97;;;;;;:54;:97;;;;;;;2024:10;1961:97;;;;;;;;;;;;:54;;;;;;;:97;;;;;1968:33;;1961:97;;;;;;;-1:-1:-1;1961:54:86;:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1759:310:86;1554:521;;;;;:::o;434:272::-;607:4;594:23;;;618:9;629:4;635:20;:9;:18;:20::i;:::-;657:17;687:10;676:22;;;;;;;;;;;;;;;;;;;;;;;;;;;594:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;434:272:86:o;712:275::-;886:4;873:23;;;897:9;908:4;915:21;:10;:19;:21::i;:::-;914:22;;938:17;968:10;957:22;;;;;;;;;;;;;;;;;;;;;;;;;;;873:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;993:273;1166:4;1153:23;;;1177:9;1188:5;1195:20;:9;:18;:20::i;1272:276::-;1446:4;1433:23;;;1457:9;1468:5;1476:21;:10;924:123:11;976:8;1008;1004:1;:12;996:21;;;;;;-1:-1:-1;1038:1:11;924:123::o"
            },
            "methodIdentifiers": {
              "astraCLSwapCallback(int256,int256,bytes)": "11c17848",
              "swap0ForExact1(address,uint256,address,uint160)": "bac7bf78",
              "swap1ForExact0(address,uint256,address,uint160)": "f603482c",
              "swapExact0For1(address,uint256,address,uint160)": "6dfc0ddb",
              "swapExact1For0(address,uint256,address,uint160)": "e2be9109"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"amount0Delta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1Delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"astraCLSwapCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"swap0ForExact1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"swap1ForExact0\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0In\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"swapExact0For1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount1In\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"swapExact1For0\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"details\":\"In the implementation you must pay the pool tokens owed for the swap. The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory. amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\",\"params\":{\"amount0Delta\":\"The amount of token0 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token0 to the pool.\",\"amount1Delta\":\"The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool.\",\"data\":\"Any data passed through by the caller via the IAstraCLPoolActions#swap call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"astraCLSwapCallback(int256,int256,bytes)\":{\"notice\":\"Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestAstraCLCallee.sol\":\"TestAstraCLCallee\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol\":{\"keccak256\":\"0xd86f876af8f4253bfc7564ae46cfad2d09d83290f4a6a4b133a44740e73d2640\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bde092b2aba1f27df9701ff9ed1ec7370fb443b0373be6f468ae57dd1e433273\",\"dweb:/ipfs/Qmd3M893Bosob7PVUqC33hcoD2XYHTVFtjgAPhRQibWkFe\"]},\"@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol\":{\"keccak256\":\"0xaa82f63f0c930e51d6aaae0d59e7bf3ef5b32371ac0549f6e07bfcab5b4dcb16\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://73419af0b4f35f02c3b89d387d6ac46041637a7133e249de617103b7567bf4c4\",\"dweb:/ipfs/QmTfwEX1dCoUUUMaMFzDnqDcFXihHQnEG1fbkBFpidRs8o\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol\":{\"keccak256\":\"0x29e91b8993d8df671a62aa4c3a861bac77990d2ac9f7b8ba883eacfb271964f0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d520d78a7d6ed69f53b72fcfea1267fd1d9fa517df6a4138df996f931f8161d8\",\"dweb:/ipfs/QmcRtZcqFBjs163wJxFZ9A4JE6CyR4ySSRqBcDe4KsL4dD\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol\":{\"keccak256\":\"0x17b2c352ea0e1b5c8137c6f1c3aef7ef3b02ac95a6d9a7e165c573c45518748c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://45af49340294535c5e28f80df0f3a2927a8a8f8b2d8a656197c36734ba018659\",\"dweb:/ipfs/QmYXJZArrZF93TaUMibWe8GDQEqAp4yP7oDMDjTqkaPzVW\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol\":{\"keccak256\":\"0x33715230197f3b2e24a7d76c9b4ea78dacbde03d5b5e4614b118f59fad2ca004\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1da6ef4e8c8549ea5836e040233afe78424b33de50bbf8a83bc521fc1ae0b7f5\",\"dweb:/ipfs/QmVt57cHvYNaQ94VrnTgRhDN81hq7zeV3UU1EQ3F8z2kw7\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol\":{\"keccak256\":\"0x366c9b646ed0a7e8a2ff3b01e61b078b0397b605459804948a3b5dbfadf87f07\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4a211d5a178f08cd93b082fddd142fb144f4bc76a0d56f7bddc6b01b5433f864\",\"dweb:/ipfs/QmXbsAbdrcyiHZwksqvQ45m579Qc9C6ThPXQUttP72gUFa\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol\":{\"keccak256\":\"0xf783673049e12e1f5ab4784c9ffdbaef66d4cd7709ac7c43af3ab163dfcc4819\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c64e566d63ff5e1cf081d718e5356810fedce220a473330c20aef166275cd9a9\",\"dweb:/ipfs/QmdsBonXzuaiQC8BxYVCvmcWUtnkKzp873poeH6jbsuidP\"]},\"@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol\":{\"keccak256\":\"0xb41dbeb5a9faebd4222678080759032377f8dedf65388bfe1644dc6f2aaeef39\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://c7ebd43d4b1c485d5b536160d138b0206b985cf6c5f82c19dd945ff0d87ca350\",\"dweb:/ipfs/QmPuuoryMaBArNtHvNaY5PpDGmfNajoqjdyWBmGWCdbXkW\"]},\"@airdao/astra-cl-core/contracts/libraries/SafeCast.sol\":{\"keccak256\":\"0xd4c1c1b67f946b077d7c52a158113763a89a210fc2927b8491055a962ecd18c0\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5344400c74320ca8dbe19241db7ff49babbd6c875c1b561c79d6e4315a9fb5f9\",\"dweb:/ipfs/QmRKCNTbkovxK1WvejXZr3iAHhGN97ZT1yWGsWCJFkrT5X\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"contracts/test/TestAstraCLCallee.sol\":{\"keccak256\":\"0xfc854dfa21766f7778b429d759d5666e1d9dcfa2ddccc6c3b7c31c26ef063728\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://8c554efbc55286be87e48a749e9c9cc152b6d1c0806af83f1dda81d9556bc0ea\",\"dweb:/ipfs/QmfPzshPV8ihDj2Td7m1oXEebgoo5NT89RaBgELVWSsDcz\"]}},\"version\":1}"
        }
      },
      "contracts/test/TestERC20.sol": {
        "TestERC20": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amountToMint",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "DOMAIN_SEPARATOR",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "nonces",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "name": "permit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "6101406040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120523480156200003757600080fd5b506040516200174738038062001747833981810160405260208110156200005d57600080fd5b5051604080518082018252600a808252690546573742045524332360b41b60208381018290528451808601865260018152603160f81b818301528551808701875293845283820192835285518087019096526004865263151154d560e21b918601919091528251939485949193929091620000db916003916200035a565b508051620000f19060049060208401906200035a565b50506005805460ff1916601217905550815160208084019190912082519183019190912060c082905260e08190527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200014a6200017c565b60a0526200015a81848462000180565b608052610100525062000175935033925084915050620001e4565b5062000406565b4690565b60008383836200018f6200017c565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b6001600160a01b03821662000240576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200024e60008383620002f3565b6200026a81600254620002f860201b620009b11790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200029d918390620009b1620002f8821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b60008282018381101562000353576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003925760008555620003dd565b82601f10620003ad57805160ff1916838001178555620003dd565b82800160010185558215620003dd579182015b82811115620003dd578251825591602001919060010190620003c0565b50620003eb929150620003ef565b5090565b5b80821115620003eb5760008155600101620003f0565b60805160a05160c05160e05161010051610120516112f762000450600039806107d6525080610e55525080610e97525080610e76525080610dfc525080610e2c52506112f76000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a457c2d711610066578063a457c2d7146102e3578063a9059cbb1461031c578063d505accf14610355578063dd62ed3e146103b5576100ea565b806370a08231146102755780637ecebe00146102a857806395d89b41146102db576100ea565b806323b872dd116100c857806323b872dd146101d3578063313ce567146102165780633644e51514610234578063395093511461023c576100ea565b806306fdde03146100ef578063095ea7b31461016c57806318160ddd146101b9575b600080fd5b6100f76103f0565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a56004803603604081101561018257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104a5565b604080519115158252519081900360200190f35b6101c16104c2565b60408051918252519081900360200190f35b6101a5600480360360608110156101e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104c8565b61021e610569565b6040805160ff9092168252519081900360200190f35b6101c1610572565b6101a56004803603604081101561025257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610581565b6101c16004803603602081101561028b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166105dc565b6101c1600480360360208110156102be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610604565b6100f7610638565b6101a5600480360360408110156102f957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106b7565b6101a56004803603604081101561033257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561072c565b6103b3600480360360e081101561036b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610740565b005b6101c1600480360360408110156103cb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610979565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561049a5780601f1061046f5761010080835404028352916020019161049a565b820191906000526020600020905b81548152906001019060200180831161047d57829003601f168201915b505050505090505b90565b60006104b96104b2610a2c565b8484610a30565b50600192915050565b60025490565b60006104d5848484610b77565b61055f846104e1610a2c565b61055a856040518060600160405280602881526020016112556028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526001602052604081209061052c610a2c565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610d47565b610a30565b5060019392505050565b60055460ff1690565b600061057c610df8565b905090565b60006104b961058e610a2c565b8461055a856001600061059f610a2c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c1681529252902054906109b1565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040812061063290610ec2565b92915050565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561049a5780601f1061046f5761010080835404028352916020019161049a565b60006104b96106c4610a2c565b8461055a856040518060600160405280602581526020016112c660259139600160006106ee610a2c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610d47565b60006104b9610739610a2c565b8484610b77565b834211156107af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff871660009081526006602052604081207f00000000000000000000000000000000000000000000000000000000000000009089908990899061080590610ec2565b89604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600061088882610ec6565b9050600061089882878787610f2d565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461093457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260066020526040902061096290611124565b61096d8a8a8a610a30565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b600082820183811015610a2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610a9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806112a26024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610b08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806111c96022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610be3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061127d6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610c4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806111a66023913960400191505060405180910390fd5b610c5a83838361112d565b610ca4816040518060600160405280602681526020016111eb6026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610d47565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610ce090826109b1565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610df0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610db5578181015183820152602001610d9d565b50505050905090810190601f168015610de25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60007f0000000000000000000000000000000000000000000000000000000000000000610e23611132565b1415610e5057507f00000000000000000000000000000000000000000000000000000000000000006104a2565b610ebb7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611136565b90506104a2565b5490565b6000610ed0610df8565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610fa8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806112116022913960400191505060405180910390fd5b8360ff16601b1480610fbd57508360ff16601c145b611012576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806112336022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561106e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661111b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b505050565b4690565b6000838383611143611132565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050604051602081830303815290604052805190602001209050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a",
              "opcodes": "PUSH2 0x140 PUSH1 0x40 MSTORE PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH2 0x120 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1747 CODESIZE SUB DUP1 PUSH3 0x1747 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0xA DUP1 DUP3 MSTORE PUSH10 0x5465737420455243323 PUSH1 0xB4 SHL PUSH1 0x20 DUP4 DUP2 ADD DUP3 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL DUP2 DUP4 ADD MSTORE DUP6 MLOAD DUP1 DUP8 ADD DUP8 MSTORE SWAP4 DUP5 MSTORE DUP4 DUP3 ADD SWAP3 DUP4 MSTORE DUP6 MLOAD DUP1 DUP8 ADD SWAP1 SWAP7 MSTORE PUSH1 0x4 DUP7 MSTORE PUSH4 0x151154D5 PUSH1 0xE2 SHL SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD SWAP4 SWAP5 DUP6 SWAP5 SWAP2 SWAP4 SWAP3 SWAP1 SWAP2 PUSH3 0xDB SWAP2 PUSH1 0x3 SWAP2 PUSH3 0x35A JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0xF1 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x35A JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 KECCAK256 DUP3 MLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0xC0 DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 SWAP1 MSTORE PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH3 0x14A PUSH3 0x17C JUMP JUMPDEST PUSH1 0xA0 MSTORE PUSH3 0x15A DUP2 DUP5 DUP5 PUSH3 0x180 JUMP JUMPDEST PUSH1 0x80 MSTORE PUSH2 0x100 MSTORE POP PUSH3 0x175 SWAP4 POP CALLER SWAP3 POP DUP5 SWAP2 POP POP PUSH3 0x1E4 JUMP JUMPDEST POP PUSH3 0x406 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH3 0x18F PUSH3 0x17C JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x240 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH3 0x24E PUSH1 0x0 DUP4 DUP4 PUSH3 0x2F3 JUMP JUMPDEST PUSH3 0x26A DUP2 PUSH1 0x2 SLOAD PUSH3 0x2F8 PUSH1 0x20 SHL PUSH3 0x9B1 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH3 0x29D SWAP2 DUP4 SWAP1 PUSH3 0x9B1 PUSH3 0x2F8 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH3 0x353 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x392 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x3DD JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x3AD JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x3DD JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x3DD JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x3DD JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x3C0 JUMP JUMPDEST POP PUSH3 0x3EB SWAP3 SWAP2 POP PUSH3 0x3EF JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x3EB JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x3F0 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x12F7 PUSH3 0x450 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x7D6 MSTORE POP DUP1 PUSH2 0xE55 MSTORE POP DUP1 PUSH2 0xE97 MSTORE POP DUP1 PUSH2 0xE76 MSTORE POP DUP1 PUSH2 0xDFC MSTORE POP DUP1 PUSH2 0xE2C MSTORE POP PUSH2 0x12F7 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2E3 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x3B5 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2DB JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x216 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x23C JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1B9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x3F0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x131 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x119 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x15E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C1 PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x4C8 JUMP JUMPDEST PUSH2 0x21E PUSH2 0x569 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C1 PUSH2 0x572 JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x581 JUMP JUMPDEST PUSH2 0x1C1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x28B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x5DC JUMP JUMPDEST PUSH2 0x1C1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x604 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x638 JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6B7 JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x72C JUMP JUMPDEST PUSH2 0x3B3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x740 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1C1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x979 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x49A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x46F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x49A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x47D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B9 PUSH2 0x4B2 PUSH2 0xA2C JUMP JUMPDEST DUP5 DUP5 PUSH2 0xA30 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4D5 DUP5 DUP5 DUP5 PUSH2 0xB77 JUMP JUMPDEST PUSH2 0x55F DUP5 PUSH2 0x4E1 PUSH2 0xA2C JUMP JUMPDEST PUSH2 0x55A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1255 PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x52C PUSH2 0xA2C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD47 JUMP JUMPDEST PUSH2 0xA30 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x57C PUSH2 0xDF8 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B9 PUSH2 0x58E PUSH2 0xA2C JUMP JUMPDEST DUP5 PUSH2 0x55A DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x59F PUSH2 0xA2C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x9B1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x632 SWAP1 PUSH2 0xEC2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x49A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x46F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x49A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B9 PUSH2 0x6C4 PUSH2 0xA2C JUMP JUMPDEST DUP5 PUSH2 0x55A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12C6 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x6EE PUSH2 0xA2C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD47 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B9 PUSH2 0x739 PUSH2 0xA2C JUMP JUMPDEST DUP5 DUP5 PUSH2 0xB77 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x7AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH32 0x0 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH2 0x805 SWAP1 PUSH2 0xEC2 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x888 DUP3 PUSH2 0xEC6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x898 DUP3 DUP8 DUP8 DUP8 PUSH2 0xF2D JUMP JUMPDEST SWAP1 POP DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x934 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x962 SWAP1 PUSH2 0x1124 JUMP JUMPDEST PUSH2 0x96D DUP11 DUP11 DUP11 PUSH2 0xA30 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xA25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xA9C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x12A2 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xB08 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x11C9 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xBE3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x127D PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xC4F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x11A6 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC5A DUP4 DUP4 DUP4 PUSH2 0x112D JUMP JUMPDEST PUSH2 0xCA4 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x11EB PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD47 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xCE0 SWAP1 DUP3 PUSH2 0x9B1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xDF0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDB5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD9D JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xDE2 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0xE23 PUSH2 0x1132 JUMP JUMPDEST EQ ISZERO PUSH2 0xE50 JUMPI POP PUSH32 0x0 PUSH2 0x4A2 JUMP JUMPDEST PUSH2 0xEBB PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x1136 JUMP JUMPDEST SWAP1 POP PUSH2 0x4A2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xED0 PUSH2 0xDF8 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0xFA8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1211 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0xFF AND PUSH1 0x1B EQ DUP1 PUSH2 0xFBD JUMPI POP DUP4 PUSH1 0xFF AND PUSH1 0x1C EQ JUMPDEST PUSH2 0x1012 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1233 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x106E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x111B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH2 0x1143 PUSH2 0x1132 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545434453 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202773272076616C7565 GASLIMIT NUMBER DIFFICULTY MSTORE8 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202776272076616C7565 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA164736F PUSH13 0x6343000706000A000000000000 ",
              "sourceMap": "122:178:87:-:0;;;1006:95:41;961:140;;162:136:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;162:136:87;1333:57:41;;;;;;;;;;;;-1:-1:-1;;;162:136:87;1333:57:41;;;;;;2324:542:40;;;;;;;;;;-1:-1:-1;;;2324:542:40;;;;1950:138:45;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1950:138:45;;;;;;;2017:13;;1333:57:41;;;;2324:542:40;;1950:138:45;;;2017:13;;:5;;:13;:::i;:::-;-1:-1:-1;2040:17:45;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2067:9:45;:14;;-1:-1:-1;;2067:14:45;2079:2;2067:14;;;-1:-1:-1;2410:22:40;;;;;;;;;;2466:25;;;;;;;;;2625;;;;2660:31;;;;2520:95;2720:13;:11;:13::i;:::-;2701:32;;2770:58;2792:8;2802:10;2814:13;2770:21;:58::i;:::-;2743:85;;2838:21;;-1:-1:-1;260:31:87::2;::::0;-1:-1:-1;266:10:87::2;::::0;-1:-1:-1;278:12:87;;-1:-1:-1;;260:5:87::2;:31::i;:::-;162:136:::0;122:178;;4382:320:40;4677:9;;4652:44::o;3241:327::-;3343:7;3420:8;3446:4;3468:7;3493:13;:11;:13::i;:::-;3532:4;3392:159;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3392:159:40;;;;;;;;;;;;;;;;;;;;;;;;3369:192;;;;;;3362:199;;3241:327;;;;;:::o;7817:370:45:-;-1:-1:-1;;;;;7900:21:45;;7892:65;;;;;-1:-1:-1;;;7892:65:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;7968:49;7997:1;8001:7;8010:6;7968:20;:49::i;:::-;8043:24;8060:6;8043:12;;:16;;;;;;:24;;;;:::i;:::-;8028:12;:39;-1:-1:-1;;;;;8098:18:45;;:9;:18;;;;;;;;;;;;:30;;8121:6;;8098:22;;;;;:30;;:::i;:::-;-1:-1:-1;;;;;8077:18:45;;:9;:18;;;;;;;;;;;:51;;;;8143:37;;;;;;;8077:18;;:9;;8143:37;;;;;;;;;;7817:370;;:::o;10686:92::-;;;;:::o;2682:175:44:-;2740:7;2771:5;;;2794:6;;;;2786:46;;;;;-1:-1:-1;;;2786:46:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;2849:1;2682:175;-1:-1:-1;;;2682:175:44:o;122:178:87:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;122:178:87;;;-1:-1:-1;122:178:87;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {
                "4602": [
                  {
                    "length": 32,
                    "start": 3628
                  }
                ],
                "4604": [
                  {
                    "length": 32,
                    "start": 3580
                  }
                ],
                "4606": [
                  {
                    "length": 32,
                    "start": 3702
                  }
                ],
                "4608": [
                  {
                    "length": 32,
                    "start": 3735
                  }
                ],
                "4610": [
                  {
                    "length": 32,
                    "start": 3669
                  }
                ],
                "4772": [
                  {
                    "length": 32,
                    "start": 2006
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a457c2d711610066578063a457c2d7146102e3578063a9059cbb1461031c578063d505accf14610355578063dd62ed3e146103b5576100ea565b806370a08231146102755780637ecebe00146102a857806395d89b41146102db576100ea565b806323b872dd116100c857806323b872dd146101d3578063313ce567146102165780633644e51514610234578063395093511461023c576100ea565b806306fdde03146100ef578063095ea7b31461016c57806318160ddd146101b9575b600080fd5b6100f76103f0565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a56004803603604081101561018257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104a5565b604080519115158252519081900360200190f35b6101c16104c2565b60408051918252519081900360200190f35b6101a5600480360360608110156101e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104c8565b61021e610569565b6040805160ff9092168252519081900360200190f35b6101c1610572565b6101a56004803603604081101561025257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610581565b6101c16004803603602081101561028b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166105dc565b6101c1600480360360208110156102be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610604565b6100f7610638565b6101a5600480360360408110156102f957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106b7565b6101a56004803603604081101561033257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561072c565b6103b3600480360360e081101561036b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610740565b005b6101c1600480360360408110156103cb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610979565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561049a5780601f1061046f5761010080835404028352916020019161049a565b820191906000526020600020905b81548152906001019060200180831161047d57829003601f168201915b505050505090505b90565b60006104b96104b2610a2c565b8484610a30565b50600192915050565b60025490565b60006104d5848484610b77565b61055f846104e1610a2c565b61055a856040518060600160405280602881526020016112556028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526001602052604081209061052c610a2c565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610d47565b610a30565b5060019392505050565b60055460ff1690565b600061057c610df8565b905090565b60006104b961058e610a2c565b8461055a856001600061059f610a2c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c1681529252902054906109b1565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040812061063290610ec2565b92915050565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561049a5780601f1061046f5761010080835404028352916020019161049a565b60006104b96106c4610a2c565b8461055a856040518060600160405280602581526020016112c660259139600160006106ee610a2c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610d47565b60006104b9610739610a2c565b8484610b77565b834211156107af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff871660009081526006602052604081207f00000000000000000000000000000000000000000000000000000000000000009089908990899061080590610ec2565b89604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600061088882610ec6565b9050600061089882878787610f2d565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461093457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260066020526040902061096290611124565b61096d8a8a8a610a30565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b600082820183811015610a2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610a9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806112a26024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610b08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806111c96022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610be3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061127d6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610c4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806111a66023913960400191505060405180910390fd5b610c5a83838361112d565b610ca4816040518060600160405280602681526020016111eb6026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610d47565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610ce090826109b1565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610df0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610db5578181015183820152602001610d9d565b50505050905090810190601f168015610de25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60007f0000000000000000000000000000000000000000000000000000000000000000610e23611132565b1415610e5057507f00000000000000000000000000000000000000000000000000000000000000006104a2565b610ebb7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611136565b90506104a2565b5490565b6000610ed0610df8565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610fa8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806112116022913960400191505060405180910390fd5b8360ff16601b1480610fbd57508360ff16601c145b611012576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806112336022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561106e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661111b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b505050565b4690565b6000838383611143611132565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050604051602081830303815290604052805190602001209050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2E3 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x3B5 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2DB JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x216 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x23C JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1B9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x3F0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x131 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x119 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x15E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C1 PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x4C8 JUMP JUMPDEST PUSH2 0x21E PUSH2 0x569 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C1 PUSH2 0x572 JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x581 JUMP JUMPDEST PUSH2 0x1C1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x28B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x5DC JUMP JUMPDEST PUSH2 0x1C1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x604 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x638 JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6B7 JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x72C JUMP JUMPDEST PUSH2 0x3B3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x740 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1C1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x979 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x49A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x46F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x49A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x47D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B9 PUSH2 0x4B2 PUSH2 0xA2C JUMP JUMPDEST DUP5 DUP5 PUSH2 0xA30 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4D5 DUP5 DUP5 DUP5 PUSH2 0xB77 JUMP JUMPDEST PUSH2 0x55F DUP5 PUSH2 0x4E1 PUSH2 0xA2C JUMP JUMPDEST PUSH2 0x55A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1255 PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x52C PUSH2 0xA2C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD47 JUMP JUMPDEST PUSH2 0xA30 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x57C PUSH2 0xDF8 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B9 PUSH2 0x58E PUSH2 0xA2C JUMP JUMPDEST DUP5 PUSH2 0x55A DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x59F PUSH2 0xA2C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x9B1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x632 SWAP1 PUSH2 0xEC2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x49A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x46F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x49A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B9 PUSH2 0x6C4 PUSH2 0xA2C JUMP JUMPDEST DUP5 PUSH2 0x55A DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12C6 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x6EE PUSH2 0xA2C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD47 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B9 PUSH2 0x739 PUSH2 0xA2C JUMP JUMPDEST DUP5 DUP5 PUSH2 0xB77 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x7AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH32 0x0 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH2 0x805 SWAP1 PUSH2 0xEC2 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x888 DUP3 PUSH2 0xEC6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x898 DUP3 DUP8 DUP8 DUP8 PUSH2 0xF2D JUMP JUMPDEST SWAP1 POP DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x934 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x962 SWAP1 PUSH2 0x1124 JUMP JUMPDEST PUSH2 0x96D DUP11 DUP11 DUP11 PUSH2 0xA30 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xA25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xA9C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x12A2 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xB08 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x11C9 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xBE3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x127D PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xC4F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x11A6 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC5A DUP4 DUP4 DUP4 PUSH2 0x112D JUMP JUMPDEST PUSH2 0xCA4 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x11EB PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xD47 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xCE0 SWAP1 DUP3 PUSH2 0x9B1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0xDF0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDB5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD9D JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xDE2 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0xE23 PUSH2 0x1132 JUMP JUMPDEST EQ ISZERO PUSH2 0xE50 JUMPI POP PUSH32 0x0 PUSH2 0x4A2 JUMP JUMPDEST PUSH2 0xEBB PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x1136 JUMP JUMPDEST SWAP1 POP PUSH2 0x4A2 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xED0 PUSH2 0xDF8 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0xFA8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1211 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0xFF AND PUSH1 0x1B EQ DUP1 PUSH2 0xFBD JUMPI POP DUP4 PUSH1 0xFF AND PUSH1 0x1C EQ JUMPDEST PUSH2 0x1012 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1233 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x106E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x111B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH2 0x1143 PUSH2 0x1132 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545434453 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202773272076616C7565 GASLIMIT NUMBER DIFFICULTY MSTORE8 COINBASE GASPRICE KECCAK256 PUSH10 0x6E76616C696420736967 PUSH15 0x6174757265202776272076616C7565 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA164736F PUSH13 0x6343000706000A000000000000 ",
              "sourceMap": "122:178:87:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2153:89:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4229:166;;;;;;;;;;;;;;;;-1:-1:-1;4229:166:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3220:106;;;:::i;:::-;;;;;;;;;;;;;;;;4862:317;;;;;;;;;;;;;;;;-1:-1:-1;4862:317:45;;;;;;;;;;;;;;;;;;:::i;3071:89::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2548:113:41;;;:::i;5574:215:45:-;;;;;;;;;;;;;;;;-1:-1:-1;5574:215:45;;;;;;;;;:::i;3384:125::-;;;;;;;;;;;;;;;;-1:-1:-1;3384:125:45;;;;:::i;2306:118:41:-;;;;;;;;;;;;;;;;-1:-1:-1;2306:118:41;;;;:::i;2355:93:45:-;;;:::i;6276:266::-;;;;;;;;;;;;;;;;-1:-1:-1;6276:266:45;;;;;;;;;:::i;3712:172::-;;;;;;;;;;;;;;;;-1:-1:-1;3712:172:45;;;;;;;;;:::i;1451:794:41:-;;;;;;;;;;;;;;;;-1:-1:-1;1451:794:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3942:149:45;;;;;;;;;;;;;;;;-1:-1:-1;3942:149:45;;;;;;;;;;;:::i;2153:89::-;2230:5;2223:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2198:13;;2223:12;;2230:5;;2223:12;;2230:5;2223:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2153:89;;:::o;4229:166::-;4312:4;4328:39;4337:12;:10;:12::i;:::-;4351:7;4360:6;4328:8;:39::i;:::-;-1:-1:-1;4384:4:45;4229:166;;;;:::o;3220:106::-;3307:12;;3220:106;:::o;4862:317::-;4968:4;4984:36;4994:6;5002:9;5013:6;4984:9;:36::i;:::-;5030:121;5039:6;5047:12;:10;:12::i;:::-;5061:89;5099:6;5061:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;5081:12;:10;:12::i;:::-;5061:33;;;;;;;;;;;;;-1:-1:-1;5061:33:45;;;:89;:37;:89::i;:::-;5030:8;:121::i;:::-;-1:-1:-1;5168:4:45;4862:317;;;;;:::o;3071:89::-;3144:9;;;;3071:89;:::o;2548:113:41:-;2608:7;2634:20;:18;:20::i;:::-;2627:27;;2548:113;:::o;5574:215:45:-;5662:4;5678:83;5687:12;:10;:12::i;:::-;5701:7;5710:50;5749:10;5710:11;:25;5722:12;:10;:12::i;:::-;5710:25;;;;;;;;;;;;;;;;;;-1:-1:-1;5710:25:45;;;:34;;;;;;;;;;;:38;:50::i;3384:125::-;3484:18;;3458:7;3484:18;;;;;;;;;;;;3384:125::o;2306:118:41:-;2393:14;;;2367:7;2393:14;;;:7;:14;;;;;:24;;:22;:24::i;:::-;2386:31;2306:118;-1:-1:-1;;2306:118:41:o;2355:93:45:-;2434:7;2427:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2402:13;;2427:14;;2434:7;;2427:14;;2434:7;2427:14;;;;;;;;;;;;;;;;;;;;;;;;6276:266;6369:4;6385:129;6394:12;:10;:12::i;:::-;6408:7;6417:96;6456:15;6417:96;;;;;;;;;;;;;;;;;:11;:25;6429:12;:10;:12::i;:::-;6417:25;;;;;;;;;;;;;;;;;;-1:-1:-1;6417:25:45;;;:34;;;;;;;;;;;:96;:38;:96::i;3712:172::-;3798:4;3814:42;3824:12;:10;:12::i;:::-;3838:9;3849:6;3814:9;:42::i;1451:794:41:-;1678:8;1659:15;:27;;1651:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1908:14;;;1731:18;1908:14;;;:7;:14;;;;;1803:16;;1837:5;;1860:7;;1885:5;;1908:24;;:22;:24::i;:::-;1950:8;1775:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1752:230;;;;;;1731:251;;1993:12;2008:28;2025:10;2008:16;:28::i;:::-;1993:43;;2047:14;2064:28;2078:4;2084:1;2087;2090;2064:13;:28::i;:::-;2047:45;;2120:5;2110:15;;:6;:15;;;2102:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:14;;;;;;;:7;:14;;;;;:26;;:24;:26::i;:::-;2207:31;2216:5;2223:7;2232:5;2207:8;:31::i;:::-;1451:794;;;;;;;;;;:::o;3942:149:45:-;4057:18;;;;4031:7;4057:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3942:149::o;2682:175:44:-;2740:7;2771:5;;;2794:6;;;;2786:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2849:1;2682:175;-1:-1:-1;;;2682:175:44:o;598:104:50:-;685:10;598:104;:::o;9340:340:45:-;9441:19;;;9433:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9519:21;;;9511:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9590:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9641:32;;;;;;;;;;;;;;;;;9340:340;;;:::o;7016:530::-;7121:20;;;7113:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7201:23;;;7193:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7275:47;7296:6;7304:9;7315:6;7275:20;:47::i;:::-;7353:71;7375:6;7353:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;7333:17;;;;:9;:17;;;;;;;;;;;:91;;;;7457:20;;;;;;;:32;;7482:6;7457:24;:32::i;:::-;7434:20;;;;:9;:20;;;;;;;;;;;;:55;;;;7504:35;;;;;;;7434:20;;7504:35;;;;;;;;;;;;;7016:530;;;:::o;5424:163:44:-;5510:7;5545:12;5537:6;;;;5529:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5575:5:44;;;5424:163::o;2952:283:40:-;3013:7;3053:16;3036:13;:11;:13::i;:::-;:33;3032:197;;;-1:-1:-1;3092:24:40;3085:31;;3032:197;3154:64;3176:10;3188:12;3202:15;3154:21;:64::i;:::-;3147:71;;;;1098:112:51;1189:14;;1098:112::o;4193:183:40:-;4270:7;4335:20;:18;:20::i;:::-;4357:10;4306:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4296:73;;;;;;4289:80;;4193:183;;;:::o;1952:1414:39:-;2037:7;2952:66;2938:80;;;2930:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3075:1;:7;;3080:2;3075:7;:18;;;;3086:1;:7;;3091:2;3086:7;3075:18;3067:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3227:14;3244:24;3254:4;3260:1;3263;3266;3244:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3244:24:39;;;;;;-1:-1:-1;;3286:20:39;;;3278:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3353:6;1952:1414;-1:-1:-1;;;;;1952:1414:39:o;1216:178:51:-;1368:19;;1386:1;1368:19;;;1216:178::o;10686:92:45:-;;;;:::o;4382:320:40:-;4677:9;;4652:44::o;3241:327::-;3343:7;3420:8;3446:4;3468:7;3493:13;:11;:13::i;:::-;3532:4;3392:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3369:192;;;;;;3362:199;;3241:327;;;;;:::o"
            },
            "methodIdentifiers": {
              "DOMAIN_SEPARATOR()": "3644e515",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "name()": "06fdde03",
              "nonces(address)": "7ecebe00",
              "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountToMint\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestERC20.sol\":\"TestERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0xc80ce3fcc5e444a2c5bdb902fe4d4f4ecba04e9b416425697d00ae95c1955f82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a84a791d3dfe88a0dcc5b3b825e8375d0ed60c96067b5beb9e2f7dabb0afb0e6\",\"dweb:/ipfs/QmPWUkNDWJkNgEZp1WuAMKkd2XvkuZBcx8HTTTauaj837Y\"]},\"@openzeppelin/contracts/drafts/EIP712.sol\":{\"keccak256\":\"0xe4bc5cda2bfee483ff10334881c9ea5cc4df7faa7b18a5a4b8f02fc51cf8adca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0f0314cb3b722c5d221eeef6f5c050d4fd339bf7f2bf41c9304a62ff95bf33a\",\"dweb:/ipfs/QmVSBgT22SEY2mAkd8qNjsqTq8tciugToxbRzwPSSADPuJ\"]},\"@openzeppelin/contracts/drafts/ERC20Permit.sol\":{\"keccak256\":\"0x680c4b732f003b048d6a3cf227398d2f7f620eca779ab379662430adb6b19dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb8490d82756117d1ace222668f78756a1982deef7f4483d070fc37a1aeeb85c\",\"dweb:/ipfs/QmWv8kZ4y2joQ8iSe7Xc6ceULqns8TemtvW2j2KRsdryzD\"]},\"@openzeppelin/contracts/drafts/IERC20Permit.sol\":{\"keccak256\":\"0x1aab7754719ba764a8a05bec47e975001400f62986474945eb3dbee6d871259f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c14e8ff1b384bdb68f262669364b1e79fbbd82b85938b7ce788a1395c40c6a2\",\"dweb:/ipfs/QmUKLXfSeEuRUXkeWLBhjHTKeSFoNBCS1RaMXv1AmHXYzn\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xe22a1fc7400ae196eba2ad1562d0386462b00a6363b742d55a2fd2021a58586f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a635cec58fb4141a16cfd408f1a21ac944c335a3beaba541c35d2e95c04536f\",\"dweb:/ipfs/QmXWcz73UenN1ji8jiWMbzxHjjfLbNQwLVKTEB5zNFE34K\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x36b5ca4eabe888b39b10973621ca0dcc9b1508f8d06db9ddf045d7aa7c867d4a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccbd79e8d556aa7011babb0e5d1e55a966add74853e7ba0274ff184bd96ef002\",\"dweb:/ipfs/QmV28ozNRUFDiDUMvCwcFmLTQPG6nfvgeKr4cmbHWoegtH\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0x2424442932373c51391b31409f9620d1e1396c37f41ab9d82c51d69bebdd1ab5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcdf37ee59c10644338fbdfb3b7692125ff42003b34990eff8b04beedd89846f\",\"dweb:/ipfs/QmTMAvXQ4DoZbUSS3oBkNr2SddRPCTrE7DZNXrFArHnk8x\"]},\"contracts/test/TestERC20.sol\":{\"keccak256\":\"0x949018b853ff82728babf2bcfdc2c218081c5a826eb1bb3a2caac94b9b78b822\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7018299440a66d9048d94b80e867f255f531911254e086a4eff4a8aa7c1c530e\",\"dweb:/ipfs/QmbWUgTqbj7VdJZwFvreocWQnPJmrfD91wKsyKGDFrrdTM\"]}},\"version\":1}"
        }
      },
      "contracts/test/TestMulticallExtended.sol": {
        "TestMulticallExtended": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "a",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "b",
                  "type": "uint256"
                }
              ],
              "name": "functionThatReturnsTuple",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "a",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "b",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct TestMulticallExtended.Tuple",
                  "name": "tuple",
                  "type": "tuple"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "previousBlockhash",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes[]",
                  "name": "data",
                  "type": "bytes[]"
                }
              ],
              "name": "multicall",
              "outputs": [
                {
                  "internalType": "bytes[]",
                  "name": "results",
                  "type": "bytes[]"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_time",
                  "type": "uint256"
                }
              ],
              "name": "setTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50610742806100206000396000f3fe60806040526004361061005a5760003560e01c80633beb26c4116100435780633beb26c4146100b55780635ae401dc146100d7578063ac9650d8146100ea5761005a565b80631f0464d11461005f5780633b16a6a314610088575b600080fd5b61007261006d366004610430565b6100fd565b60405161007f91906105f3565b60405180910390f35b34801561009457600080fd5b506100a86100a3366004610578565b610185565b60405161007f919061068b565b3480156100c157600080fd5b506100d56100d036600461052f565b6101a6565b005b6100726100e5366004610547565b6101ab565b6100726100f83660046103f0565b610224565b6060838060014303401461017257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61017c8484610224565b95945050505050565b61018d61038d565b5060408051808201909152908152602081019190915290565b600055565b606083806101b7610387565b111561017257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b60608167ffffffffffffffff8111801561023d57600080fd5b5060405190808252806020026020018201604052801561027157816020015b606081526020019060019003908161025c5790505b50905060005b82811015610380576000803086868581811061028f57fe5b90506020028101906102a191906106a2565b6040516102af9291906105e3565b600060405180830381855af49150503d80600081146102ea576040519150601f19603f3d011682016040523d82523d6000602084013e6102ef565b606091505b50915091508161035e5760448151101561030857600080fd5b60048101905080806020019051810190610322919061047a565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103559190610671565b60405180910390fd5b8084848151811061036b57fe5b60209081029190910101525050600101610277565b5092915050565b60005490565b604051806040016040528060008152602001600081525090565b60008083601f8401126103b8578081fd5b50813567ffffffffffffffff8111156103cf578182fd5b60208301915083602080830285010111156103e957600080fd5b9250929050565b60008060208385031215610402578182fd5b823567ffffffffffffffff811115610418578283fd5b610424858286016103a7565b90969095509350505050565b600080600060408486031215610444578081fd5b83359250602084013567ffffffffffffffff811115610461578182fd5b61046d868287016103a7565b9497909650939450505050565b60006020828403121561048b578081fd5b815167ffffffffffffffff808211156104a2578283fd5b818401915084601f8301126104b5578283fd5b8151818111156104c157fe5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011682010181811084821117156104fd57fe5b604052818152838201602001871015610514578485fd5b610525826020830160208701610705565b9695505050505050565b600060208284031215610540578081fd5b5035919050565b60008060006040848603121561055b578283fd5b83359250602084013567ffffffffffffffff811115610461578283fd5b6000806040838503121561058a578182fd5b50508035926020909101359150565b600081518084526105b1816020860160208601610705565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000828483379101908152919050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015610664577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452610652858351610599565b94509285019290850190600101610618565b5092979650505050505050565b6000602082526106846020830184610599565b9392505050565b815181526020918201519181019190915260400190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126106d6578283fd5b83018035915067ffffffffffffffff8211156106f0578283fd5b6020019150368190038213156103e957600080fd5b60005b83811015610720578181015183820152602001610708565b8381111561072f576000848401525b5050505056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x742 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3BEB26C4 GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x3BEB26C4 EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0x5AE401DC EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0xEA JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x1F0464D1 EQ PUSH2 0x5F JUMPI DUP1 PUSH4 0x3B16A6A3 EQ PUSH2 0x88 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x72 PUSH2 0x6D CALLDATASIZE PUSH1 0x4 PUSH2 0x430 JUMP JUMPDEST PUSH2 0xFD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7F SWAP2 SWAP1 PUSH2 0x5F3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA8 PUSH2 0xA3 CALLDATASIZE PUSH1 0x4 PUSH2 0x578 JUMP JUMPDEST PUSH2 0x185 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7F SWAP2 SWAP1 PUSH2 0x68B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD5 PUSH2 0xD0 CALLDATASIZE PUSH1 0x4 PUSH2 0x52F JUMP JUMPDEST PUSH2 0x1A6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x72 PUSH2 0xE5 CALLDATASIZE PUSH1 0x4 PUSH2 0x547 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST PUSH2 0x72 PUSH2 0xF8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F0 JUMP JUMPDEST PUSH2 0x224 JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH1 0x1 NUMBER SUB BLOCKHASH EQ PUSH2 0x172 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426C6F636B686173680000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17C DUP5 DUP5 PUSH2 0x224 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x18D PUSH2 0x38D JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH2 0x1B7 PUSH2 0x387 JUMP JUMPDEST GT ISZERO PUSH2 0x172 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73616374696F6E20746F6F206F6C6400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x23D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x271 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x25C JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x380 JUMPI PUSH1 0x0 DUP1 ADDRESS DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x28F JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x2A1 SWAP2 SWAP1 PUSH2 0x6A2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2AF SWAP3 SWAP2 SWAP1 PUSH2 0x5E3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2EA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2EF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x35E JUMPI PUSH1 0x44 DUP2 MLOAD LT ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD SWAP1 POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x322 SWAP2 SWAP1 PUSH2 0x47A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x355 SWAP2 SWAP1 PUSH2 0x671 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x36B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x277 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3B8 JUMPI DUP1 DUP2 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3CF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x3E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x402 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x418 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x424 DUP6 DUP3 DUP7 ADD PUSH2 0x3A7 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x444 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x461 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x46D DUP7 DUP3 DUP8 ADD PUSH2 0x3A7 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x48B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4A2 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4B5 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x4C1 JUMPI INVALID JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP3 ADD ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0x4FD JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP2 MSTORE DUP4 DUP3 ADD PUSH1 0x20 ADD DUP8 LT ISZERO PUSH2 0x514 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x525 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x705 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x540 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x55B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x461 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x58A JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x5B1 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x705 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x664 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x652 DUP6 DUP4 MLOAD PUSH2 0x599 JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x618 JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x684 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x599 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x6D6 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x6F0 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x3E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x720 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x708 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "125:464:88:-:0;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:6272:89",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:89",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "111:310:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "160:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "169:6:89"
                                        },
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "177:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "162:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "162:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "162:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "147:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:17:89"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "154:3:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "131:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "131:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "124:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "124:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "121:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "195:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "218:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "205:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "205:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "195:6:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "268:30:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "277:8:89"
                                        },
                                        {
                                          "name": "arrayPos",
                                          "nodeType": "YulIdentifier",
                                          "src": "287:8:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "270:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "270:26:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "270:26:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "240:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "248:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "237:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "237:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "234:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "307:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "323:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "331:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "319:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "319:17:89"
                              },
                              "variableNames": [
                                {
                                  "name": "arrayPos",
                                  "nodeType": "YulIdentifier",
                                  "src": "307:8:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "399:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "408:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "411:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "401:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "401:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "401:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "359:6:89"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "371:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "379:4:89",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mul",
                                              "nodeType": "YulIdentifier",
                                              "src": "367:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "367:17:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "355:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "355:30:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "387:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "351:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "351:41:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "394:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "348:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "348:50:89"
                              },
                              "nodeType": "YulIf",
                              "src": "345:2:89"
                            }
                          ]
                        },
                        "name": "abi_decode_t_array$_t_bytes_calldata_$dyn_calldata",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "74:6:89",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "82:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "arrayPos",
                            "nodeType": "YulTypedName",
                            "src": "90:8:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "100:6:89",
                            "type": ""
                          }
                        ],
                        "src": "14:407:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "542:365:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "588:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "597:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "605:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "590:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "590:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "590:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "563:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "572:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "559:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "559:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "584:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "555:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "555:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "552:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "623:37:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "650:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "637:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "637:23:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "627:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "703:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "712:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "720:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "705:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "705:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "705:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "675:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "683:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "672:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "672:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "669:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "738:109:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "819:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "830:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "815:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "815:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "839:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_bytes_calldata_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "764:50:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "764:83:89"
                              },
                              "variables": [
                                {
                                  "name": "value0_1",
                                  "nodeType": "YulTypedName",
                                  "src": "742:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "752:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "856:18:89",
                              "value": {
                                "name": "value0_1",
                                "nodeType": "YulIdentifier",
                                "src": "866:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "856:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "883:18:89",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "893:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "883:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "500:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "511:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "523:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "531:6:89",
                            "type": ""
                          }
                        ],
                        "src": "426:481:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1045:416:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1091:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1100:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1108:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1093:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1093:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1093:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1066:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1075:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1062:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1062:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1087:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1058:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1058:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1055:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1126:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1149:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1136:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1136:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1126:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1168:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1199:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1210:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1195:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1195:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1182:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1182:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1172:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1257:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1266:6:89"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1274:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1259:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1259:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1259:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1229:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1237:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1226:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1226:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1223:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1292:109:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1373:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1384:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1369:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1369:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1393:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_bytes_calldata_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "1318:50:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1318:83:89"
                              },
                              "variables": [
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1296:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1306:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1410:18:89",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "1420:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1410:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1437:18:89",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "1447:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1437:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes32t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "995:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1006:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1018:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1026:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1034:6:89",
                            "type": ""
                          }
                        ],
                        "src": "912:549:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1557:844:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1603:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1612:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1620:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1605:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1605:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1605:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1578:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1587:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1574:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1574:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1599:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1570:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1570:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1567:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1638:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1658:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1652:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1652:16:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1642:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1677:28:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1687:18:89",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1681:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1732:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1741:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1749:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1734:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1734:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1734:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1720:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1728:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1717:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1717:14:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1714:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1767:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1781:9:89"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1792:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1777:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1777:22:89"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1771:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1847:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1856:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1864:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1849:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1849:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1849:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1826:2:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1830:4:89",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1822:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1822:13:89"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1837:7:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1818:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1818:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1811:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1811:35:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1808:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1882:19:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1898:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1892:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1892:9:89"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1886:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1924:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "1926:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1926:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1926:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1916:2:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1920:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1913:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1913:10:89"
                              },
                              "nodeType": "YulIf",
                              "src": "1910:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1946:23:89",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1966:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1960:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1960:9:89"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1950:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1978:126:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2004:6:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "_3",
                                                "nodeType": "YulIdentifier",
                                                "src": "2020:2:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2024:4:89",
                                                "type": "",
                                                "value": "0x1f"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "2016:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2016:13:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2031:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2012:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2012:86:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2000:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2000:99:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2101:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1996:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1996:108:89"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1982:10:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2163:13:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "invalid",
                                        "nodeType": "YulIdentifier",
                                        "src": "2165:7:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2165:9:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2165:9:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2122:10:89"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2134:2:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2119:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2119:18:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2142:10:89"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2154:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2139:2:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2139:22:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "2116:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2116:46:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2113:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2192:2:89",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2196:10:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2185:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2185:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2185:22:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2223:6:89"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2231:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2216:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2216:18:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2216:18:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2280:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2289:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2297:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2282:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2282:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2282:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2257:2:89"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "2261:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2253:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2253:11:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2266:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2249:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2249:20:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2271:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2246:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2246:33:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2243:2:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2341:2:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2345:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2337:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2337:11:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2354:6:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2362:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2350:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2350:15:89"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2367:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2315:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2315:55:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2315:55:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2379:16:89",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "2389:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2379:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1523:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1534:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1546:6:89",
                            "type": ""
                          }
                        ],
                        "src": "1466:935:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2476:120:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2522:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2531:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2539:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2524:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2524:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2524:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2497:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2506:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2493:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2493:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2518:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2489:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2489:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2486:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2557:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2580:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2567:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2567:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2557:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2442:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2453:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2465:6:89",
                            "type": ""
                          }
                        ],
                        "src": "2406:190:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2734:416:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2780:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2789:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2797:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2782:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2782:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2782:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2755:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2764:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2751:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2751:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2776:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2747:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2747:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2744:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2815:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2838:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2825:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2825:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2815:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2857:46:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2888:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2899:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2884:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2884:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2871:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2871:32:89"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2861:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2946:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2955:6:89"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2963:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2948:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2948:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2948:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2918:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2926:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2915:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2915:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "2912:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2981:109:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3062:9:89"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "3073:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3058:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3058:22:89"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3082:7:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_t_array$_t_bytes_calldata_$dyn_calldata",
                                  "nodeType": "YulIdentifier",
                                  "src": "3007:50:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3007:83:89"
                              },
                              "variables": [
                                {
                                  "name": "value1_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2985:8:89",
                                  "type": ""
                                },
                                {
                                  "name": "value2_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2995:8:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3099:18:89",
                              "value": {
                                "name": "value1_1",
                                "nodeType": "YulIdentifier",
                                "src": "3109:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3099:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3126:18:89",
                              "value": {
                                "name": "value2_1",
                                "nodeType": "YulIdentifier",
                                "src": "3136:8:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3126:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2684:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2695:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2707:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2715:6:89",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2723:6:89",
                            "type": ""
                          }
                        ],
                        "src": "2601:549:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3242:171:89",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3288:26:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3297:6:89"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3305:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3290:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3290:22:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3290:22:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3263:7:89"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3272:9:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3259:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3259:23:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3284:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3255:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3255:32:89"
                              },
                              "nodeType": "YulIf",
                              "src": "3252:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3323:33:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3346:9:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3333:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3333:23:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3323:6:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3365:42:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3392:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3403:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3388:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3388:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3375:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3375:32:89"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3365:6:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3200:9:89",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3211:7:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3223:6:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3231:6:89",
                            "type": ""
                          }
                        ],
                        "src": "3155:258:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3469:267:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3479:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3499:5:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3493:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3493:12:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "3483:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3521:3:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3526:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3514:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3514:19:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3514:19:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "3568:5:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3575:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3564:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3564:16:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3586:3:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3591:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3582:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3582:14:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3598:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3542:21:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3542:63:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3542:63:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3614:116:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3629:3:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "3642:6:89"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3650:2:89",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "3638:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3638:15:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3655:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "3634:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3634:88:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3625:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3625:98:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3725:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3621:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3621:109:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "3614:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_t_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "3446:5:89",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3453:3:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "3461:3:89",
                            "type": ""
                          }
                        ],
                        "src": "3418:318:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3888:126:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3911:3:89"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3916:6:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3924:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "3898:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3898:33:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3898:33:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3940:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3954:3:89"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3959:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3950:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3950:16:89"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3944:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3982:2:89"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "3986:3:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3975:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3975:15:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3975:15:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3999:9:89",
                              "value": {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "4006:2:89"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "3999:3:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3856:3:89",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3861:6:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3869:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "3880:3:89",
                            "type": ""
                          }
                        ],
                        "src": "3741:273:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4188:696:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4198:12:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4208:2:89",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4202:2:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4219:32:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4237:9:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4248:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4233:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4233:18:89"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4223:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4267:9:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4278:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4260:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4260:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4260:21:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4290:17:89",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "4301:6:89"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "4294:3:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4316:27:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4336:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4330:5:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4330:13:89"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4320:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4359:6:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4367:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4352:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4352:22:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4352:22:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4383:25:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4394:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4405:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4390:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4390:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "4383:3:89"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4417:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4439:9:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "4454:6:89"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "4462:2:89"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mul",
                                          "nodeType": "YulIdentifier",
                                          "src": "4450:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4450:15:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4435:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4435:31:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4468:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4431:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4431:40:89"
                              },
                              "variables": [
                                {
                                  "name": "tail_2",
                                  "nodeType": "YulTypedName",
                                  "src": "4421:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4480:29:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4498:6:89"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4506:2:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4494:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4494:15:89"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "4484:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4518:13:89",
                              "value": {
                                "name": "tail",
                                "nodeType": "YulIdentifier",
                                "src": "4527:4:89"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "4522:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4589:266:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "4610:3:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "tail_2",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4623:6:89"
                                                },
                                                {
                                                  "name": "headStart",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4631:9:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "4619:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4619:22:89"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "4643:66:89",
                                              "type": "",
                                              "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "4615:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4615:95:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "4603:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4603:108:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4603:108:89"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4724:51:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "srcPtr",
                                              "nodeType": "YulIdentifier",
                                              "src": "4759:6:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "4753:5:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4753:13:89"
                                        },
                                        {
                                          "name": "tail_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4768:6:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "abi_encode_t_bytes",
                                        "nodeType": "YulIdentifier",
                                        "src": "4734:18:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4734:41:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "tail_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "4724:6:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4788:25:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "4802:6:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "4810:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4798:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4798:15:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4788:6:89"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4826:19:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "4837:3:89"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "4842:2:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4833:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4833:12:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "4826:3:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "4551:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4554:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4548:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4548:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "4562:18:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4564:14:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "4573:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4576:1:89",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4569:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4569:9:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "4564:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "4544:3:89",
                                "statements": []
                              },
                              "src": "4540:315:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4864:14:89",
                              "value": {
                                "name": "tail_2",
                                "nodeType": "YulIdentifier",
                                "src": "4872:6:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4864:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4157:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4168:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4179:4:89",
                            "type": ""
                          }
                        ],
                        "src": "4019:865:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5010:100:89",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5027:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5038:2:89",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5020:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5020:21:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5020:21:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5050:54:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5077:6:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5089:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5100:2:89",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5085:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5085:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "5058:18:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5058:46:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5050:4:89"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4979:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4990:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5001:4:89",
                            "type": ""
                          }
                        ],
                        "src": "4889:221:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5264:146:89",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5274:26:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5286:9:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5297:2:89",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5282:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5282:18:89"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5274:4:89"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5316:9:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5333:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "5327:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5327:13:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5309:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5309:32:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5309:32:89"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5361:9:89"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5372:4:89",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5357:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5357:20:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "5389:6:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5397:4:89",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "5385:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5385:17:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "5379:5:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5379:24:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5350:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5350:54:89"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5350:54:89"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_Tuple_$12488_memory_ptr__to_t_struct$_Tuple_$12488_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5233:9:89",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5244:6:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5255:4:89",
                            "type": ""
                          }
                        ],
                        "src": "5115:295:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5509:498:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5519:51:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "ptr_to_tail",
                                    "nodeType": "YulIdentifier",
                                    "src": "5558:11:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5545:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5545:25:89"
                              },
                              "variables": [
                                {
                                  "name": "rel_offset_of_tail",
                                  "nodeType": "YulTypedName",
                                  "src": "5523:18:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5718:22:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "5727:4:89"
                                        },
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "5733:4:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5720:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5720:18:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5720:18:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "rel_offset_of_tail",
                                        "nodeType": "YulIdentifier",
                                        "src": "5593:18:89"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [],
                                                "functionName": {
                                                  "name": "calldatasize",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5621:12:89"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5621:14:89"
                                              },
                                              {
                                                "name": "base_ref",
                                                "nodeType": "YulIdentifier",
                                                "src": "5637:8:89"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "5617:3:89"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5617:29:89"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5648:66:89",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "5613:3:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5613:102:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5589:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5589:127:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5582:6:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5582:135:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5579:2:89"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5749:47:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "base_ref",
                                    "nodeType": "YulIdentifier",
                                    "src": "5767:8:89"
                                  },
                                  {
                                    "name": "rel_offset_of_tail",
                                    "nodeType": "YulIdentifier",
                                    "src": "5777:18:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5763:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5763:33:89"
                              },
                              "variables": [
                                {
                                  "name": "addr_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5753:6:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5805:30:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "addr_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5828:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5815:12:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5815:20:89"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "5805:6:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5878:22:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "5887:4:89"
                                        },
                                        {
                                          "name": "addr",
                                          "nodeType": "YulIdentifier",
                                          "src": "5893:4:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5880:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5880:18:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5880:18:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5850:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5858:18:89",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5847:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5847:30:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5844:2:89"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5909:25:89",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "addr_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5921:6:89"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5929:4:89",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5917:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5917:17:89"
                              },
                              "variableNames": [
                                {
                                  "name": "addr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5909:4:89"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5985:16:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5994:1:89",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5997:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5987:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5987:12:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5987:12:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "addr",
                                    "nodeType": "YulIdentifier",
                                    "src": "5950:4:89"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "calldatasize",
                                          "nodeType": "YulIdentifier",
                                          "src": "5960:12:89"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5960:14:89"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "5976:6:89"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5956:3:89"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5956:27:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "sgt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5946:3:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5946:38:89"
                              },
                              "nodeType": "YulIf",
                              "src": "5943:2:89"
                            }
                          ]
                        },
                        "name": "access_calldata_tail_t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "base_ref",
                            "nodeType": "YulTypedName",
                            "src": "5466:8:89",
                            "type": ""
                          },
                          {
                            "name": "ptr_to_tail",
                            "nodeType": "YulTypedName",
                            "src": "5476:11:89",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "addr",
                            "nodeType": "YulTypedName",
                            "src": "5492:4:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "5498:6:89",
                            "type": ""
                          }
                        ],
                        "src": "5415:592:89"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6065:205:89",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6075:10:89",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6084:1:89",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6079:1:89",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6144:63:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "6169:3:89"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "6174:1:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "6165:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6165:11:89"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6188:3:89"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6193:1:89"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "6184:3:89"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6184:11:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "6178:5:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6178:18:89"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6158:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6158:39:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6158:39:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6105:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6108:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6102:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6102:13:89"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6116:19:89",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6118:15:89",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6127:1:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6130:2:89",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6123:3:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6123:10:89"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6118:1:89"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6098:3:89",
                                "statements": []
                              },
                              "src": "6094:113:89"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6233:31:89",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "6246:3:89"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "6251:6:89"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "6242:3:89"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6242:16:89"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6260:1:89",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6235:6:89"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6235:27:89"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6235:27:89"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6222:1:89"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6225:6:89"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6219:2:89"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6219:13:89"
                              },
                              "nodeType": "YulIf",
                              "src": "6216:2:89"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "6043:3:89",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "6048:3:89",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "6053:6:89",
                            "type": ""
                          }
                        ],
                        "src": "6012:258:89"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_t_array$_t_bytes_calldata_$dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(length, length) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(arrayPos, arrayPos) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, mul(length, 0x20)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n        let value0_1, value1_1 := abi_decode_t_array$_t_bytes_calldata_$dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_decode_tuple_t_bytes32t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value2, value2) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n        let value1_1, value2_1 := abi_decode_t_array$_t_bytes_calldata_$dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := mload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value0, value0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value0, value0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { invalid() }\n        let memPtr := mload(64)\n        let newFreePtr := add(add(memPtr, and(add(_3, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 32)\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(value0, value0) }\n        copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(value1, value1) }\n        let value1_1, value2_1 := abi_decode_t_array$_t_bytes_calldata_$dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_t_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, end)\n        end := _1\n    }\n    function abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let tail_2 := add(add(headStart, mul(length, _1)), 64)\n        let srcPtr := add(value0, _1)\n        let i := tail\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0))\n            tail_2 := abi_encode_t_bytes(mload(srcPtr), tail_2)\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        tail := tail_2\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_t_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_struct$_Tuple_$12488_memory_ptr__to_t_struct$_Tuple_$12488_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1))) { revert(addr, addr) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(addr, addr) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n}",
                  "id": 89,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "60806040526004361061005a5760003560e01c80633beb26c4116100435780633beb26c4146100b55780635ae401dc146100d7578063ac9650d8146100ea5761005a565b80631f0464d11461005f5780633b16a6a314610088575b600080fd5b61007261006d366004610430565b6100fd565b60405161007f91906105f3565b60405180910390f35b34801561009457600080fd5b506100a86100a3366004610578565b610185565b60405161007f919061068b565b3480156100c157600080fd5b506100d56100d036600461052f565b6101a6565b005b6100726100e5366004610547565b6101ab565b6100726100f83660046103f0565b610224565b6060838060014303401461017257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61017c8484610224565b95945050505050565b61018d61038d565b5060408051808201909152908152602081019190915290565b600055565b606083806101b7610387565b111561017257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b60608167ffffffffffffffff8111801561023d57600080fd5b5060405190808252806020026020018201604052801561027157816020015b606081526020019060019003908161025c5790505b50905060005b82811015610380576000803086868581811061028f57fe5b90506020028101906102a191906106a2565b6040516102af9291906105e3565b600060405180830381855af49150503d80600081146102ea576040519150601f19603f3d011682016040523d82523d6000602084013e6102ef565b606091505b50915091508161035e5760448151101561030857600080fd5b60048101905080806020019051810190610322919061047a565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103559190610671565b60405180910390fd5b8084848151811061036b57fe5b60209081029190910101525050600101610277565b5092915050565b60005490565b604051806040016040528060008152602001600081525090565b60008083601f8401126103b8578081fd5b50813567ffffffffffffffff8111156103cf578182fd5b60208301915083602080830285010111156103e957600080fd5b9250929050565b60008060208385031215610402578182fd5b823567ffffffffffffffff811115610418578283fd5b610424858286016103a7565b90969095509350505050565b600080600060408486031215610444578081fd5b83359250602084013567ffffffffffffffff811115610461578182fd5b61046d868287016103a7565b9497909650939450505050565b60006020828403121561048b578081fd5b815167ffffffffffffffff808211156104a2578283fd5b818401915084601f8301126104b5578283fd5b8151818111156104c157fe5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011682010181811084821117156104fd57fe5b604052818152838201602001871015610514578485fd5b610525826020830160208701610705565b9695505050505050565b600060208284031215610540578081fd5b5035919050565b60008060006040848603121561055b578283fd5b83359250602084013567ffffffffffffffff811115610461578283fd5b6000806040838503121561058a578182fd5b50508035926020909101359150565b600081518084526105b1816020860160208601610705565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000828483379101908152919050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015610664577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452610652858351610599565b94509285019290850190600101610618565b5092979650505050505050565b6000602082526106846020830184610599565b9392505050565b815181526020918201519181019190915260400190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126106d6578283fd5b83018035915067ffffffffffffffff8211156106f0578283fd5b6020019150368190038213156103e957600080fd5b60005b83811015610720578181015183820152602001610708565b8381111561072f576000848401525b5050505056fea164736f6c6343000706000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3BEB26C4 GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x3BEB26C4 EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0x5AE401DC EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0xEA JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x1F0464D1 EQ PUSH2 0x5F JUMPI DUP1 PUSH4 0x3B16A6A3 EQ PUSH2 0x88 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x72 PUSH2 0x6D CALLDATASIZE PUSH1 0x4 PUSH2 0x430 JUMP JUMPDEST PUSH2 0xFD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7F SWAP2 SWAP1 PUSH2 0x5F3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA8 PUSH2 0xA3 CALLDATASIZE PUSH1 0x4 PUSH2 0x578 JUMP JUMPDEST PUSH2 0x185 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7F SWAP2 SWAP1 PUSH2 0x68B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD5 PUSH2 0xD0 CALLDATASIZE PUSH1 0x4 PUSH2 0x52F JUMP JUMPDEST PUSH2 0x1A6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x72 PUSH2 0xE5 CALLDATASIZE PUSH1 0x4 PUSH2 0x547 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST PUSH2 0x72 PUSH2 0xF8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F0 JUMP JUMPDEST PUSH2 0x224 JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH1 0x1 NUMBER SUB BLOCKHASH EQ PUSH2 0x172 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426C6F636B686173680000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17C DUP5 DUP5 PUSH2 0x224 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x18D PUSH2 0x38D JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x60 DUP4 DUP1 PUSH2 0x1B7 PUSH2 0x387 JUMP JUMPDEST GT ISZERO PUSH2 0x172 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73616374696F6E20746F6F206F6C6400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x23D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x271 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x25C JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x380 JUMPI PUSH1 0x0 DUP1 ADDRESS DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x28F JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x2A1 SWAP2 SWAP1 PUSH2 0x6A2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2AF SWAP3 SWAP2 SWAP1 PUSH2 0x5E3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2EA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2EF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x35E JUMPI PUSH1 0x44 DUP2 MLOAD LT ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP2 ADD SWAP1 POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x322 SWAP2 SWAP1 PUSH2 0x47A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x355 SWAP2 SWAP1 PUSH2 0x671 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x36B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x277 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3B8 JUMPI DUP1 DUP2 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3CF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x3E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x402 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x418 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x424 DUP6 DUP3 DUP7 ADD PUSH2 0x3A7 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x444 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x461 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x46D DUP7 DUP3 DUP8 ADD PUSH2 0x3A7 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x48B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4A2 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4B5 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x4C1 JUMPI INVALID JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP3 ADD ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0x4FD JUMPI INVALID JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP2 MSTORE DUP4 DUP3 ADD PUSH1 0x20 ADD DUP8 LT ISZERO PUSH2 0x514 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x525 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x705 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x540 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x55B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x461 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x58A JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x5B1 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x705 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x664 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x652 DUP6 DUP4 MLOAD PUSH2 0x599 JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x618 JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x684 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x599 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x6D6 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x6F0 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x3E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x720 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x708 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP SMOD MOD STOP EXP ",
              "sourceMap": "125:464:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;760:245:57;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;444:143:88;;;;;;;;;;-1:-1:-1;444:143:88;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;304:70::-;;;;;;;;;;-1:-1:-1;304:70:88;;;;;:::i;:::-;;:::i;:::-;;497:218:57;;;;;;:::i;:::-;;:::i;308:653:15:-;;;;;;:::i;:::-;;:::i;760:245:57:-;946:14;910:17;330::61;324:1;309:12;:16;299:27;:48;291:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;983:15:57::1;993:4;;983:9;:15::i;:::-;976:22:::0;760:245;-1:-1:-1;;;;;760:245:57:o;444:143:88:-;523:18;;:::i;:::-;-1:-1:-1;561:19:88;;;;;;;;;;;;;;;;;;;;444:143::o;304:70::-;355:4;:12;304:70::o;497:218:57:-;656:14;629:8;244::19;223:17;:15;:17::i;:::-;:29;;215:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;308:653:15;383:22;439:4;427:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;417:34;;466:9;461:494;481:15;;;461:494;;;518:12;;563:4;582;;587:1;582:7;;;;;;;;;;;;;;;;;;:::i;:::-;555:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;517:73;;;;610:7;605:306;;737:2;721:6;:13;:18;717:32;;;741:8;;;717:32;820:4;812:6;808:17;798:27;;878:6;867:28;;;;;;;;;;;;:::i;:::-;860:36;;;;;;;;;;;:::i;:::-;;;;;;;;605:306;938:6;925:7;933:1;925:10;;;;;;;;;;;;;;;;;:19;-1:-1:-1;;498:3:15;;461:494;;;;308:653;;;;:::o;202:96:88:-;261:7;287:4;202:96;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;14:407:89:-;;;154:3;147:4;139:6;135:17;131:27;121:2;;177:6;169;162:22;121:2;-1:-1:-1;205:20:89;;248:18;237:30;;234:2;;;287:8;277;270:26;234:2;331:4;323:6;319:17;307:29;;394:3;387:4;379;371:6;367:17;359:6;355:30;351:41;348:50;345:2;;;411:1;408;401:12;345:2;111:310;;;;;:::o;426:481::-;;;584:2;572:9;563:7;559:23;555:32;552:2;;;605:6;597;590:22;552:2;650:9;637:23;683:18;675:6;672:30;669:2;;;720:6;712;705:22;669:2;764:83;839:7;830:6;819:9;815:22;764:83;:::i;:::-;866:8;;738:109;;-1:-1:-1;542:365:89;-1:-1:-1;;;;542:365:89:o;912:549::-;;;;1087:2;1075:9;1066:7;1062:23;1058:32;1055:2;;;1108:6;1100;1093:22;1055:2;1149:9;1136:23;1126:33;;1210:2;1199:9;1195:18;1182:32;1237:18;1229:6;1226:30;1223:2;;;1274:6;1266;1259:22;1223:2;1318:83;1393:7;1384:6;1373:9;1369:22;1318:83;:::i;:::-;1045:416;;1420:8;;-1:-1:-1;1292:109:89;;-1:-1:-1;;;;1045:416:89:o;1466:935::-;;1599:2;1587:9;1578:7;1574:23;1570:32;1567:2;;;1620:6;1612;1605:22;1567:2;1658:9;1652:16;1687:18;1728:2;1720:6;1717:14;1714:2;;;1749:6;1741;1734:22;1714:2;1792:6;1781:9;1777:22;1767:32;;1837:7;1830:4;1826:2;1822:13;1818:27;1808:2;;1864:6;1856;1849:22;1808:2;1898;1892:9;1920:2;1916;1913:10;1910:2;;;1926:9;1910:2;1966;1960:9;2101:2;2031:66;2024:4;2020:2;2016:13;2012:86;2004:6;2000:99;1996:108;2154:6;2142:10;2139:22;2134:2;2122:10;2119:18;2116:46;2113:2;;;2165:9;2113:2;2192;2185:22;2216:18;;;2253:11;;;2266:2;2249:20;2246:33;-1:-1:-1;2243:2:89;;;2297:6;2289;2282:22;2243:2;2315:55;2367:2;2362;2354:6;2350:15;2345:2;2341;2337:11;2315:55;:::i;:::-;2389:6;1557:844;-1:-1:-1;;;;;;1557:844:89:o;2406:190::-;;2518:2;2506:9;2497:7;2493:23;2489:32;2486:2;;;2539:6;2531;2524:22;2486:2;-1:-1:-1;2567:23:89;;2476:120;-1:-1:-1;2476:120:89:o;2601:549::-;;;;2776:2;2764:9;2755:7;2751:23;2747:32;2744:2;;;2797:6;2789;2782:22;2744:2;2838:9;2825:23;2815:33;;2899:2;2888:9;2884:18;2871:32;2926:18;2918:6;2915:30;2912:2;;;2963:6;2955;2948:22;3155:258;;;3284:2;3272:9;3263:7;3259:23;3255:32;3252:2;;;3305:6;3297;3290:22;3252:2;-1:-1:-1;;3333:23:89;;;3403:2;3388:18;;;3375:32;;-1:-1:-1;3242:171:89:o;3418:318::-;;3499:5;3493:12;3526:6;3521:3;3514:19;3542:63;3598:6;3591:4;3586:3;3582:14;3575:4;3568:5;3564:16;3542:63;:::i;:::-;3650:2;3638:15;3655:66;3634:88;3625:98;;;;3725:4;3621:109;;3469:267;-1:-1:-1;;3469:267:89:o;3741:273::-;;3924:6;3916;3911:3;3898:33;3950:16;;3975:15;;;3950:16;3888:126;-1:-1:-1;3888:126:89:o;4019:865::-;;4208:2;4248;4237:9;4233:18;4278:2;4267:9;4260:21;4301:6;4336;4330:13;4367:6;4359;4352:22;4405:2;4394:9;4390:18;4383:25;;4468:2;4462;4454:6;4450:15;4439:9;4435:31;4431:40;4417:54;;4506:2;4498:6;4494:15;4527:4;4540:315;4554:6;4551:1;4548:13;4540:315;;;4643:66;4631:9;4623:6;4619:22;4615:95;4610:3;4603:108;4734:41;4768:6;4759;4753:13;4734:41;:::i;:::-;4724:51;-1:-1:-1;4833:12:89;;;;4798:15;;;;4576:1;4569:9;4540:315;;;-1:-1:-1;4872:6:89;;4188:696;-1:-1:-1;;;;;;;4188:696:89:o;4889:221::-;;5038:2;5027:9;5020:21;5058:46;5100:2;5089:9;5085:18;5077:6;5058:46;:::i;:::-;5050:54;5010:100;-1:-1:-1;;;5010:100:89:o;5115:295::-;5327:13;;5309:32;;5397:4;5385:17;;;5379:24;5357:20;;;5350:54;;;;5297:2;5282:18;;5264:146::o;5415:592::-;;;5558:11;5545:25;5648:66;5637:8;5621:14;5617:29;5613:102;5593:18;5589:127;5579:2;;5733:4;5727;5720:18;5579:2;5763:33;;5815:20;;;-1:-1:-1;5858:18:89;5847:30;;5844:2;;;5893:4;5887;5880:18;5844:2;5929:4;5917:17;;-1:-1:-1;5960:14:89;5956:27;;;5946:38;;5943:2;;;5997:1;5994;5987:12;6012:258;6084:1;6094:113;6108:6;6105:1;6102:13;6094:113;;;6184:11;;;6178:18;6165:11;;;6158:39;6130:2;6123:10;6094:113;;;6225:6;6222:1;6219:13;6216:2;;;6260:1;6251:6;6246:3;6242:16;6235:27;6216:2;;6065:205;;;:::o"
            },
            "methodIdentifiers": {
              "functionThatReturnsTuple(uint256,uint256)": "3b16a6a3",
              "multicall(bytes32,bytes[])": "1f0464d1",
              "multicall(bytes[])": "ac9650d8",
              "multicall(uint256,bytes[])": "5ae401dc",
              "setTime(uint256)": "3beb26c4"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"functionThatReturnsTuple\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"internalType\":\"struct TestMulticallExtended.Tuple\",\"name\":\"tuple\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"previousBlockhash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_time\",\"type\":\"uint256\"}],\"name\":\"setTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"multicall(bytes32,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"previousBlockhash\":\"The expected parent blockHash\"},\"returns\":{\"_0\":\"The results from each of the calls passed in via data\"}},\"multicall(bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\"},\"returns\":{\"results\":\"The results from each of the calls passed in via data\"}},\"multicall(uint256,bytes[])\":{\"details\":\"The `msg.value` should not be trusted for any method callable from multicall.\",\"params\":{\"data\":\"The encoded function data for each of the calls to make to this contract\",\"deadline\":\"The time by which this function must be called before failing\"},\"returns\":{\"_0\":\"The results from each of the calls passed in via data\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"multicall(bytes32,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"},\"multicall(uint256,bytes[])\":{\"notice\":\"Call multiple functions in the current contract and return the data from all of them if they all succeed\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestMulticallExtended.sol\":\"TestMulticallExtended\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol\":{\"keccak256\":\"0x1aa66f71234064a0c0976f62233f2edbd69554e5ad817dc97f318bc8e11f4da6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b3a40450e9d6b0f9cb91b40ffd6215612505bd74e7d954529958f4edc6ee7b93\",\"dweb:/ipfs/QmewsUCHK5N5KhNtqEwK8JgsXFADyFBrQRS5HoDWM5gi3b\"]},\"@airdao/astra-cl-periphery/contracts/base/Multicall.sol\":{\"keccak256\":\"0xfcfd78c62d2145634a791d5680a1af7055fbd301c415d29c09333c99c37d9037\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0d1c8f4a18cec8ad49e5269c5b07c7f6fd497dfc1b7b777f8ddcfb8055efd803\",\"dweb:/ipfs/QmdeCTnfHM3RGtQuo3DMX9m7gPspGGwQp7ho6m9cJjjnER\"]},\"@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol\":{\"keccak256\":\"0xc736bab599912d6212e8414ee4ba7af0c1e08ff6aa11caa85f5f6e07f7d421c3\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://06f6c13a86900c71fa486fc029a59d1b7eb96162bb42885b5f845d995294893e\",\"dweb:/ipfs/QmUcBxMsmncw9n6eXhzzwSasGBvBGKH5FT8HSrAxrsXV4A\"]},\"@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol\":{\"keccak256\":\"0xa8f9d0061ee730a522dc4bae6bd5cabb3e997e2c5983da183e912bdca93dfa7b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://496b68d4f72d58cc83cf51bd9cc9c99aaa46dc3c3df7c951a9e50ba29ee33016\",\"dweb:/ipfs/Qmc3bkXwuRP8mDpcKgvLgbCKn8tD8PGCaBjnLHSPMJCRGD\"]},\"contracts/base/MulticallExtended.sol\":{\"keccak256\":\"0xce6129abeea57b50dafe59cd055dc6fcc4f2b788bbbc28f4a1b3ae313cf5306e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e751053bdcedb9cbdb4ef995abf6e200a185372ac5bfe6217a5fcb92fec6d209\",\"dweb:/ipfs/QmeQgjAooNtBfN3jB696tyj3Aa5km6qvwFCij6s4nwbKRU\"]},\"contracts/base/PeripheryValidationExtended.sol\":{\"keccak256\":\"0x9514e5bb1c2b3c8589c74ad4c0e3ac469355ad8a9828ce605d9453b24e186684\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b221acf356ba8fb1f8563a783064595a3e4c0e5afe8ed19ec9102d5b59f0e621\",\"dweb:/ipfs/QmSojhh19Kyci7eFByVXy2gi5rGHmzMeNDvmDszJkDLxLZ\"]},\"contracts/interfaces/IMulticallExtended.sol\":{\"keccak256\":\"0x0fee6c8fe77db406ea3a2c34767322d4170108596d877fcf9601315de8df502a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://32eb6261abd448977034e5ed22c7e1757f4fd1d667362bb1ad7a972169ce78b8\",\"dweb:/ipfs/QmazeBaXFvy3dTPsoaeuaEsxHEruikeSAXcXkFzyTUvmvQ\"]},\"contracts/test/TestMulticallExtended.sol\":{\"keccak256\":\"0x70b64672ac2d6c91c6bcab18297dc269fd0f3153880d392bbd4ffb14a4738c4c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fc71708afdab896481a78dc2749b95793b7ef67f4d1b3032ac7d84bd34e38e6e\",\"dweb:/ipfs/QmUbjDgAFtAzshRBCYNgDorJoaZutBTpwBxZy5xSLGkBJ8\"]}},\"version\":1}"
        }
      }
    },
    "errors": [
      {
        "component": "general",
        "errorCode": "1878",
        "formattedMessage": "@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol: Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n",
        "message": "SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.",
        "severity": "warning",
        "sourceLocation": {
          "end": -1,
          "file": "@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol",
          "start": -1
        },
        "type": "Warning"
      },
      {
        "component": "general",
        "errorCode": "1878",
        "formattedMessage": "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol: Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n",
        "message": "SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.",
        "severity": "warning",
        "sourceLocation": {
          "end": -1,
          "file": "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol",
          "start": -1
        },
        "type": "Warning"
      }
    ],
    "sources": {
      "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
          "exportedSymbols": {
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ]
          },
          "id": 28,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:0"
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol",
              "file": "./pool/IAstraCLPoolActions.sol",
              "id": 3,
              "nodeType": "ImportDirective",
              "scope": 28,
              "sourceUnit": 138,
              "src": "71:67:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2,
                    "name": "IAstraCLPoolActions",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "src": "79:19:0",
                    "typeDescriptions": {}
                  }
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol",
              "file": "./pool/IAstraCLPoolDerivedState.sol",
              "id": 5,
              "nodeType": "ImportDirective",
              "scope": 28,
              "sourceUnit": 169,
              "src": "139:77:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 4,
                    "name": "IAstraCLPoolDerivedState",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "src": "147:24:0",
                    "typeDescriptions": {}
                  }
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol",
              "file": "./pool/IAstraCLPoolEvents.sol",
              "id": 7,
              "nodeType": "ImportDirective",
              "scope": 28,
              "sourceUnit": 288,
              "src": "217:65:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 6,
                    "name": "IAstraCLPoolEvents",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "src": "225:18:0",
                    "typeDescriptions": {}
                  }
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol",
              "file": "./pool/IAstraCLPoolImmutables.sol",
              "id": 9,
              "nodeType": "ImportDirective",
              "scope": 28,
              "sourceUnit": 328,
              "src": "283:73:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8,
                    "name": "IAstraCLPoolImmutables",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "src": "291:22:0",
                    "typeDescriptions": {}
                  }
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol",
              "file": "./pool/IAstraCLPoolOwnerActions.sol",
              "id": 11,
              "nodeType": "ImportDirective",
              "scope": 28,
              "sourceUnit": 354,
              "src": "357:77:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 10,
                    "name": "IAstraCLPoolOwnerActions",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "src": "365:24:0",
                    "typeDescriptions": {}
                  }
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol",
              "file": "./pool/IAstraCLPoolState.sol",
              "id": 13,
              "nodeType": "ImportDirective",
              "scope": 28,
              "sourceUnit": 462,
              "src": "435:63:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 12,
                    "name": "IAstraCLPoolState",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "src": "443:17:0",
                    "typeDescriptions": {}
                  }
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 15,
                    "name": "IAstraCLPoolImmutables",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 327,
                    "src": "792:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLPoolImmutables_$327",
                      "typeString": "contract IAstraCLPoolImmutables"
                    }
                  },
                  "id": 16,
                  "nodeType": "InheritanceSpecifier",
                  "src": "792:22:0"
                },
                {
                  "baseName": {
                    "id": 17,
                    "name": "IAstraCLPoolState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 461,
                    "src": "820:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLPoolState_$461",
                      "typeString": "contract IAstraCLPoolState"
                    }
                  },
                  "id": 18,
                  "nodeType": "InheritanceSpecifier",
                  "src": "820:17:0"
                },
                {
                  "baseName": {
                    "id": 19,
                    "name": "IAstraCLPoolDerivedState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 168,
                    "src": "843:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLPoolDerivedState_$168",
                      "typeString": "contract IAstraCLPoolDerivedState"
                    }
                  },
                  "id": 20,
                  "nodeType": "InheritanceSpecifier",
                  "src": "843:24:0"
                },
                {
                  "baseName": {
                    "id": 21,
                    "name": "IAstraCLPoolActions",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 137,
                    "src": "873:19:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLPoolActions_$137",
                      "typeString": "contract IAstraCLPoolActions"
                    }
                  },
                  "id": 22,
                  "nodeType": "InheritanceSpecifier",
                  "src": "873:19:0"
                },
                {
                  "baseName": {
                    "id": 23,
                    "name": "IAstraCLPoolOwnerActions",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 353,
                    "src": "898:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLPoolOwnerActions_$353",
                      "typeString": "contract IAstraCLPoolOwnerActions"
                    }
                  },
                  "id": 24,
                  "nodeType": "InheritanceSpecifier",
                  "src": "898:24:0"
                },
                {
                  "baseName": {
                    "id": 25,
                    "name": "IAstraCLPoolEvents",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 287,
                    "src": "928:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLPoolEvents_$287",
                      "typeString": "contract IAstraCLPoolEvents"
                    }
                  },
                  "id": 26,
                  "nodeType": "InheritanceSpecifier",
                  "src": "928:18:0"
                }
              ],
              "contractDependencies": [
                137,
                168,
                287,
                327,
                353,
                461
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 14,
                "nodeType": "StructuredDocumentation",
                "src": "500:262:0",
                "text": "@title The interface for a Astra CL Pool\n @notice An Astra pool facilitates swapping and automated market making between any two assets that strictly conform\n to the ERC20 specification\n @dev The pool interface is broken up into many smaller pieces"
              },
              "fullyImplemented": false,
              "id": 27,
              "linearizedBaseContracts": [
                27,
                287,
                353,
                137,
                168,
                461,
                327
              ],
              "name": "IAstraCLPool",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 28,
              "src": "762:187:0"
            }
          ],
          "src": "45:905:0"
        },
        "id": 0
      },
      "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol",
          "exportedSymbols": {
            "IAstraCLSwapCallback": [
              41
            ]
          },
          "id": 42,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 29,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:1"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 30,
                "nodeType": "StructuredDocumentation",
                "src": "71:140:1",
                "text": "@title Callback for IAstraCLPoolActions#swap\n @notice Any contract that calls IAstraCLPoolActions#swap must implement this interface"
              },
              "fullyImplemented": false,
              "id": 41,
              "linearizedBaseContracts": [
                41
              ],
              "name": "IAstraCLSwapCallback",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 31,
                    "nodeType": "StructuredDocumentation",
                    "src": "248:890:1",
                    "text": "@notice Called to `msg.sender` after executing a swap via IAstraCLPool#swap.\n @dev In the implementation you must pay the pool tokens owed for the swap.\n The caller of this method must be checked to be a AstraCLPool deployed by the canonical AstraCLFactory.\n amount0Delta and amount1Delta can both be 0 if no tokens were swapped.\n @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by\n the end of the swap. If positive, the callback must send that amount of token0 to the pool.\n @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by\n the end of the swap. If positive, the callback must send that amount of token1 to the pool.\n @param data Any data passed through by the caller via the IAstraCLPoolActions#swap call"
                  },
                  "functionSelector": "11c17848",
                  "id": 40,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "astraCLSwapCallback",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 38,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 33,
                        "mutability": "mutable",
                        "name": "amount0Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 40,
                        "src": "1172:19:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 32,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1172:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 35,
                        "mutability": "mutable",
                        "name": "amount1Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 40,
                        "src": "1193:19:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 34,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1193:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 37,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 40,
                        "src": "1214:19:1",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 36,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1214:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1171:63:1"
                  },
                  "returnParameters": {
                    "id": 39,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1243:0:1"
                  },
                  "scope": 41,
                  "src": "1143:101:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 42,
              "src": "211:1035:1"
            }
          ],
          "src": "45:1202:1"
        },
        "id": 1
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolActions.sol",
          "exportedSymbols": {
            "IAstraCLPoolActions": [
              137
            ]
          },
          "id": 138,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 43,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:2"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 44,
                "nodeType": "StructuredDocumentation",
                "src": "71:102:2",
                "text": "@title Permissionless pool actions\n @notice Contains pool methods that can be called by anyone"
              },
              "fullyImplemented": false,
              "id": 137,
              "linearizedBaseContracts": [
                137
              ],
              "name": "IAstraCLPoolActions",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 45,
                    "nodeType": "StructuredDocumentation",
                    "src": "209:206:2",
                    "text": "@notice Sets the initial price for the pool\n @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\n @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96"
                  },
                  "functionSelector": "f637731d",
                  "id": 50,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "initialize",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 48,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 47,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 50,
                        "src": "440:20:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 46,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "440:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "439:22:2"
                  },
                  "returnParameters": {
                    "id": 49,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "470:0:2"
                  },
                  "scope": 137,
                  "src": "420:51:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 51,
                    "nodeType": "StructuredDocumentation",
                    "src": "477:1029:2",
                    "text": "@notice Adds liquidity for the given recipient/tickLower/tickUpper position\n @dev The caller of this method receives a callback in the form of IAstraCLMintCallback.sol#astraCLMintCallback\n in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\n on tickLower, tickUpper, the amount of liquidity, and the current price.\n @param recipient The address for which the liquidity will be created\n @param tickLower The lower tick of the position in which to add liquidity\n @param tickUpper The upper tick of the position in which to add liquidity\n @param amount The amount of liquidity to mint\n @param data Any data that should be passed through to the callback\n @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\n @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback"
                  },
                  "functionSelector": "3c8a7d8d",
                  "id": 68,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 62,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 53,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 68,
                        "src": "1534:17:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 52,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1534:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 55,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nodeType": "VariableDeclaration",
                        "scope": 68,
                        "src": "1561:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 54,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1561:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 57,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nodeType": "VariableDeclaration",
                        "scope": 68,
                        "src": "1586:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 56,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1586:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 59,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 68,
                        "src": "1611:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 58,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1611:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 61,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 68,
                        "src": "1635:19:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 60,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1635:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1524:136:2"
                  },
                  "returnParameters": {
                    "id": 67,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 64,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 68,
                        "src": "1679:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 63,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1679:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 66,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 68,
                        "src": "1696:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 65,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1696:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1678:34:2"
                  },
                  "scope": 137,
                  "src": "1511:202:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 69,
                    "nodeType": "StructuredDocumentation",
                    "src": "1719:1053:2",
                    "text": "@notice Collects tokens owed to a position\n @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\n Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\n amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\n actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\n @param recipient The address which should receive the fees collected\n @param tickLower The lower tick of the position for which to collect fees\n @param tickUpper The upper tick of the position for which to collect fees\n @param amount0Requested How much token0 should be withdrawn from the fees owed\n @param amount1Requested How much token1 should be withdrawn from the fees owed\n @return amount0 The amount of fees collected in token0\n @return amount1 The amount of fees collected in token1"
                  },
                  "functionSelector": "4f1eb3d8",
                  "id": 86,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collect",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 80,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 71,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 86,
                        "src": "2803:17:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 70,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2803:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 73,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nodeType": "VariableDeclaration",
                        "scope": 86,
                        "src": "2830:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 72,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2830:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 75,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nodeType": "VariableDeclaration",
                        "scope": 86,
                        "src": "2855:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 74,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2855:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 77,
                        "mutability": "mutable",
                        "name": "amount0Requested",
                        "nodeType": "VariableDeclaration",
                        "scope": 86,
                        "src": "2880:24:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 76,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2880:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 79,
                        "mutability": "mutable",
                        "name": "amount1Requested",
                        "nodeType": "VariableDeclaration",
                        "scope": 86,
                        "src": "2914:24:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 78,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2914:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2793:151:2"
                  },
                  "returnParameters": {
                    "id": 85,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 82,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 86,
                        "src": "2963:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 81,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2963:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 84,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 86,
                        "src": "2980:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 83,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2980:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2962:34:2"
                  },
                  "scope": 137,
                  "src": "2777:220:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 87,
                    "nodeType": "StructuredDocumentation",
                    "src": "3003:631:2",
                    "text": "@notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\n @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\n @dev Fees must be collected separately via a call to #collect\n @param tickLower The lower tick of the position for which to burn liquidity\n @param tickUpper The upper tick of the position for which to burn liquidity\n @param amount How much liquidity to burn\n @return amount0 The amount of token0 sent to the recipient\n @return amount1 The amount of token1 sent to the recipient"
                  },
                  "functionSelector": "a34123a7",
                  "id": 100,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 94,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 89,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nodeType": "VariableDeclaration",
                        "scope": 100,
                        "src": "3653:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 88,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3653:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 91,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nodeType": "VariableDeclaration",
                        "scope": 100,
                        "src": "3670:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 90,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3670:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 93,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 100,
                        "src": "3687:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 92,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "3687:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3652:50:2"
                  },
                  "returnParameters": {
                    "id": 99,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 96,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 100,
                        "src": "3721:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 95,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3721:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 98,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 100,
                        "src": "3738:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 97,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3738:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3720:34:2"
                  },
                  "scope": 137,
                  "src": "3639:116:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 101,
                    "nodeType": "StructuredDocumentation",
                    "src": "3761:1015:2",
                    "text": "@notice Swap token0 for token1, or token1 for token0\n @dev The caller of this method receives a callback in the form of IAstraCLSwapCallback.sol#astraCLSwapCallback\n @param recipient The address to receive the output of the swap\n @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\n @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\n @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\n value after the swap. If one for zero, the price cannot be greater than this value after the swap\n @param data Any data to be passed through to the callback\n @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\n @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive"
                  },
                  "functionSelector": "128acb08",
                  "id": 118,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swap",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 103,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 118,
                        "src": "4804:17:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 102,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4804:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 105,
                        "mutability": "mutable",
                        "name": "zeroForOne",
                        "nodeType": "VariableDeclaration",
                        "scope": 118,
                        "src": "4831:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 104,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4831:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 107,
                        "mutability": "mutable",
                        "name": "amountSpecified",
                        "nodeType": "VariableDeclaration",
                        "scope": 118,
                        "src": "4856:22:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 106,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4856:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 109,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 118,
                        "src": "4888:25:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 108,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "4888:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 111,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 118,
                        "src": "4923:19:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 110,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4923:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4794:154:2"
                  },
                  "returnParameters": {
                    "id": 117,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 114,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 118,
                        "src": "4967:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 113,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4967:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 116,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 118,
                        "src": "4983:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 115,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4983:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4966:32:2"
                  },
                  "scope": 137,
                  "src": "4781:218:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 119,
                    "nodeType": "StructuredDocumentation",
                    "src": "5005:657:2",
                    "text": "@notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\n @dev The caller of this method receives a callback in the form of IAstraCLFlashCallback.sol#astraCLFlashCallback\n @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\n with 0 amount{0,1} and sending the donation amount(s) from the callback\n @param recipient The address which will receive the token0 and token1 amounts\n @param amount0 The amount of token0 to send\n @param amount1 The amount of token1 to send\n @param data Any data to be passed through to the callback"
                  },
                  "functionSelector": "490e6cbc",
                  "id": 130,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "flash",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 128,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 121,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 130,
                        "src": "5682:17:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 120,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5682:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 123,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 130,
                        "src": "5701:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 122,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5701:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 125,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 130,
                        "src": "5718:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 124,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5718:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 127,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 130,
                        "src": "5735:19:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 126,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5735:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5681:74:2"
                  },
                  "returnParameters": {
                    "id": 129,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5764:0:2"
                  },
                  "scope": 137,
                  "src": "5667:98:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 131,
                    "nodeType": "StructuredDocumentation",
                    "src": "5771:367:2",
                    "text": "@notice Increase the maximum number of price and liquidity observations that this pool will store\n @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\n the input observationCardinalityNext.\n @param observationCardinalityNext The desired minimum number of observations for the pool to store"
                  },
                  "functionSelector": "32148f67",
                  "id": 136,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseObservationCardinalityNext",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 134,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 133,
                        "mutability": "mutable",
                        "name": "observationCardinalityNext",
                        "nodeType": "VariableDeclaration",
                        "scope": 136,
                        "src": "6187:33:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 132,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "6187:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6186:35:2"
                  },
                  "returnParameters": {
                    "id": 135,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6230:0:2"
                  },
                  "scope": 137,
                  "src": "6143:88:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 138,
              "src": "173:6060:2"
            }
          ],
          "src": "45:6189:2"
        },
        "id": 2
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolDerivedState.sol",
          "exportedSymbols": {
            "IAstraCLPoolDerivedState": [
              168
            ]
          },
          "id": 169,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 139,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:3"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 140,
                "nodeType": "StructuredDocumentation",
                "src": "71:222:3",
                "text": "@title Pool state that is not stored\n @notice Contains view functions to provide information about the pool that is computed rather than stored on the\n blockchain. The functions here may have variable gas costs."
              },
              "fullyImplemented": false,
              "id": 168,
              "linearizedBaseContracts": [
                168
              ],
              "name": "IAstraCLPoolDerivedState",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 141,
                    "nodeType": "StructuredDocumentation",
                    "src": "334:1045:3",
                    "text": "@notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\n @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\n the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\n you must call it with secondsAgos = [3600, 0].\n @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\n log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\n @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\n @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\n @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\n timestamp"
                  },
                  "functionSelector": "883bdbfd",
                  "id": 153,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "observe",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 145,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 144,
                        "mutability": "mutable",
                        "name": "secondsAgos",
                        "nodeType": "VariableDeclaration",
                        "scope": 153,
                        "src": "1410:29:3",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 142,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1410:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 143,
                          "nodeType": "ArrayTypeName",
                          "src": "1410:8:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1400:45:3"
                  },
                  "returnParameters": {
                    "id": 152,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 148,
                        "mutability": "mutable",
                        "name": "tickCumulatives",
                        "nodeType": "VariableDeclaration",
                        "scope": 153,
                        "src": "1469:30:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                          "typeString": "int56[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 146,
                            "name": "int56",
                            "nodeType": "ElementaryTypeName",
                            "src": "1469:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "id": 147,
                          "nodeType": "ArrayTypeName",
                          "src": "1469:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_int56_$dyn_storage_ptr",
                            "typeString": "int56[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 151,
                        "mutability": "mutable",
                        "name": "secondsPerLiquidityCumulativeX128s",
                        "nodeType": "VariableDeclaration",
                        "scope": 153,
                        "src": "1501:51:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                          "typeString": "uint160[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 149,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "1501:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "id": 150,
                          "nodeType": "ArrayTypeName",
                          "src": "1501:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                            "typeString": "uint160[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1468:85:3"
                  },
                  "scope": 168,
                  "src": "1384:170:3",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 154,
                    "nodeType": "StructuredDocumentation",
                    "src": "1560:771:3",
                    "text": "@notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\n @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\n I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\n snapshot is taken and the second snapshot is taken.\n @param tickLower The lower tick of the range\n @param tickUpper The upper tick of the range\n @return tickCumulativeInside The snapshot of the tick accumulator for the range\n @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\n @return secondsInside The snapshot of seconds per liquidity for the range"
                  },
                  "functionSelector": "a38807f2",
                  "id": 167,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "snapshotCumulativesInside",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 159,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 156,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nodeType": "VariableDeclaration",
                        "scope": 167,
                        "src": "2380:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 155,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2380:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 158,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nodeType": "VariableDeclaration",
                        "scope": 167,
                        "src": "2405:15:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 157,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2405:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2370:56:3"
                  },
                  "returnParameters": {
                    "id": 166,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 161,
                        "mutability": "mutable",
                        "name": "tickCumulativeInside",
                        "nodeType": "VariableDeclaration",
                        "scope": 167,
                        "src": "2450:26:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 160,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "2450:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 163,
                        "mutability": "mutable",
                        "name": "secondsPerLiquidityInsideX128",
                        "nodeType": "VariableDeclaration",
                        "scope": 167,
                        "src": "2478:37:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 162,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2478:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 165,
                        "mutability": "mutable",
                        "name": "secondsInside",
                        "nodeType": "VariableDeclaration",
                        "scope": 167,
                        "src": "2517:20:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 164,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2517:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2449:89:3"
                  },
                  "scope": 168,
                  "src": "2336:203:3",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 169,
              "src": "293:2248:3"
            }
          ],
          "src": "45:2497:3"
        },
        "id": 3
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolEvents.sol",
          "exportedSymbols": {
            "IAstraCLPoolEvents": [
              287
            ]
          },
          "id": 288,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 170,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:4"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 171,
                "nodeType": "StructuredDocumentation",
                "src": "71:88:4",
                "text": "@title Events emitted by a pool\n @notice Contains all events emitted by the pool"
              },
              "fullyImplemented": true,
              "id": 287,
              "linearizedBaseContracts": [
                287
              ],
              "name": "IAstraCLPoolEvents",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 172,
                    "nodeType": "StructuredDocumentation",
                    "src": "194:344:4",
                    "text": "@notice Emitted exactly once by a pool when #initialize is first called on the pool\n @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\n @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\n @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool"
                  },
                  "id": 178,
                  "name": "Initialize",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 177,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 174,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 178,
                        "src": "560:20:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 173,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "560:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 176,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "tick",
                        "nodeType": "VariableDeclaration",
                        "scope": 178,
                        "src": "582:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 175,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "582:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "559:34:4"
                  },
                  "src": "543:51:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 179,
                    "nodeType": "StructuredDocumentation",
                    "src": "600:551:4",
                    "text": "@notice Emitted when liquidity is minted for a given position\n @param sender The address that minted the liquidity\n @param owner The owner of the position and recipient of any minted liquidity\n @param tickLower The lower tick of the position\n @param tickUpper The upper tick of the position\n @param amount The amount of liquidity minted to the position range\n @param amount0 How much token0 was required for the minted liquidity\n @param amount1 How much token1 was required for the minted liquidity"
                  },
                  "id": 195,
                  "name": "Mint",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 194,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 181,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 195,
                        "src": "1176:14:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 180,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1176:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 183,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 195,
                        "src": "1200:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 182,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1200:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 185,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nodeType": "VariableDeclaration",
                        "scope": 195,
                        "src": "1231:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 184,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1231:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 187,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nodeType": "VariableDeclaration",
                        "scope": 195,
                        "src": "1264:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 186,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1264:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 189,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 195,
                        "src": "1297:14:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 188,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1297:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 191,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 195,
                        "src": "1321:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 190,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1321:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 193,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 195,
                        "src": "1346:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 192,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1346:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1166:201:4"
                  },
                  "src": "1156:212:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 196,
                    "nodeType": "StructuredDocumentation",
                    "src": "1374:493:4",
                    "text": "@notice Emitted when fees are collected by the owner of a position\n @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\n @param owner The owner of the position for which fees are collected\n @param tickLower The lower tick of the position\n @param tickUpper The upper tick of the position\n @param amount0 The amount of token0 fees collected\n @param amount1 The amount of token1 fees collected"
                  },
                  "id": 210,
                  "name": "Collect",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 209,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 198,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 210,
                        "src": "1895:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 197,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1895:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 200,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 210,
                        "src": "1926:17:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 199,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1926:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 202,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nodeType": "VariableDeclaration",
                        "scope": 210,
                        "src": "1953:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 201,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1953:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 204,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nodeType": "VariableDeclaration",
                        "scope": 210,
                        "src": "1986:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 203,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1986:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 206,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 210,
                        "src": "2019:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 205,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2019:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 208,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 210,
                        "src": "2044:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 207,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2044:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1885:180:4"
                  },
                  "src": "1872:194:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 211,
                    "nodeType": "StructuredDocumentation",
                    "src": "2072:523:4",
                    "text": "@notice Emitted when a position's liquidity is removed\n @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\n @param owner The owner of the position for which liquidity is removed\n @param tickLower The lower tick of the position\n @param tickUpper The upper tick of the position\n @param amount The amount of liquidity to remove\n @param amount0 The amount of token0 withdrawn\n @param amount1 The amount of token1 withdrawn"
                  },
                  "id": 225,
                  "name": "Burn",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 224,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 213,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 225,
                        "src": "2620:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 212,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2620:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 215,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nodeType": "VariableDeclaration",
                        "scope": 225,
                        "src": "2651:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 214,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2651:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 217,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nodeType": "VariableDeclaration",
                        "scope": 225,
                        "src": "2684:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 216,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2684:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 219,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 225,
                        "src": "2717:14:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 218,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2717:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 221,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 225,
                        "src": "2741:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 220,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2741:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 223,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 225,
                        "src": "2766:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 222,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2766:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2610:177:4"
                  },
                  "src": "2600:188:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 226,
                    "nodeType": "StructuredDocumentation",
                    "src": "2794:600:4",
                    "text": "@notice Emitted by the pool for any swaps between token0 and token1\n @param sender The address that initiated the swap call, and that received the callback\n @param recipient The address that received the output of the swap\n @param amount0 The delta of the token0 balance of the pool\n @param amount1 The delta of the token1 balance of the pool\n @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\n @param liquidity The liquidity of the pool after the swap\n @param tick The log base 1.0001 of price of the pool after the swap"
                  },
                  "id": 242,
                  "name": "Swap",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 241,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 228,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 242,
                        "src": "3419:22:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 227,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3419:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 230,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 242,
                        "src": "3451:25:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 229,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3451:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 232,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 242,
                        "src": "3486:14:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 231,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3486:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 234,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 242,
                        "src": "3510:14:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 233,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3510:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 236,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 242,
                        "src": "3534:20:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 235,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "3534:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 238,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nodeType": "VariableDeclaration",
                        "scope": 242,
                        "src": "3564:17:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 237,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "3564:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 240,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "tick",
                        "nodeType": "VariableDeclaration",
                        "scope": 242,
                        "src": "3591:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 239,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3591:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3409:198:4"
                  },
                  "src": "3399:209:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 243,
                    "nodeType": "StructuredDocumentation",
                    "src": "3614:562:4",
                    "text": "@notice Emitted by the pool for any flashes of token0/token1\n @param sender The address that initiated the swap call, and that received the callback\n @param recipient The address that received the tokens from flash\n @param amount0 The amount of token0 that was flashed\n @param amount1 The amount of token1 that was flashed\n @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\n @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee"
                  },
                  "id": 257,
                  "name": "Flash",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 256,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 245,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 257,
                        "src": "4202:22:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 244,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4202:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 247,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 257,
                        "src": "4234:25:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 246,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4234:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 249,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 257,
                        "src": "4269:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 248,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4269:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 251,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 257,
                        "src": "4294:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 250,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4294:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 253,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "paid0",
                        "nodeType": "VariableDeclaration",
                        "scope": 257,
                        "src": "4319:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 252,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4319:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 255,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "paid1",
                        "nodeType": "VariableDeclaration",
                        "scope": 257,
                        "src": "4342:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 254,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4342:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4192:169:4"
                  },
                  "src": "4181:181:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 258,
                    "nodeType": "StructuredDocumentation",
                    "src": "4368:451:4",
                    "text": "@notice Emitted by the pool for increases to the number of observations that can be stored\n @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\n just before a mint/swap/burn.\n @param observationCardinalityNextOld The previous value of the next observation cardinality\n @param observationCardinalityNextNew The updated value of the next observation cardinality"
                  },
                  "id": 264,
                  "name": "IncreaseObservationCardinalityNext",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 263,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 260,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "observationCardinalityNextOld",
                        "nodeType": "VariableDeclaration",
                        "scope": 264,
                        "src": "4874:36:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 259,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "4874:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 262,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "observationCardinalityNextNew",
                        "nodeType": "VariableDeclaration",
                        "scope": 264,
                        "src": "4920:36:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 261,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "4920:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4864:98:4"
                  },
                  "src": "4824:139:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 265,
                    "nodeType": "StructuredDocumentation",
                    "src": "4969:370:4",
                    "text": "@notice Emitted when the protocol fee is changed by the pool\n @param feeProtocol0Old The previous value of the token0 protocol fee\n @param feeProtocol1Old The previous value of the token1 protocol fee\n @param feeProtocol0New The updated value of the token0 protocol fee\n @param feeProtocol1New The updated value of the token1 protocol fee"
                  },
                  "id": 275,
                  "name": "SetFeeProtocol",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 274,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 267,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "feeProtocol0Old",
                        "nodeType": "VariableDeclaration",
                        "scope": 275,
                        "src": "5365:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 266,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5365:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 269,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "feeProtocol1Old",
                        "nodeType": "VariableDeclaration",
                        "scope": 275,
                        "src": "5388:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 268,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5388:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 271,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "feeProtocol0New",
                        "nodeType": "VariableDeclaration",
                        "scope": 275,
                        "src": "5411:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 270,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5411:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 273,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "feeProtocol1New",
                        "nodeType": "VariableDeclaration",
                        "scope": 275,
                        "src": "5434:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 272,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5434:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5364:92:4"
                  },
                  "src": "5344:113:4"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 276,
                    "nodeType": "StructuredDocumentation",
                    "src": "5463:384:4",
                    "text": "@notice Emitted when the collected protocol fees are withdrawn by the factory owner\n @param sender The address that collects the protocol fees\n @param recipient The address that receives the collected protocol fees\n @param amount0 The amount of token0 protocol fees that is withdrawn\n @param amount0 The amount of token1 protocol fees that is withdrawn"
                  },
                  "id": 286,
                  "name": "CollectProtocol",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 285,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 278,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 286,
                        "src": "5874:22:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 277,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5874:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 280,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 286,
                        "src": "5898:25:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 279,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5898:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 282,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 286,
                        "src": "5925:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 281,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5925:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 284,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 286,
                        "src": "5942:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 283,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5942:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5873:85:4"
                  },
                  "src": "5852:107:4"
                }
              ],
              "scope": 288,
              "src": "159:5802:4"
            }
          ],
          "src": "45:5917:4"
        },
        "id": 4
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolImmutables.sol",
          "exportedSymbols": {
            "IAstraCLPoolImmutables": [
              327
            ]
          },
          "id": 328,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 289,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:5"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 290,
                "nodeType": "StructuredDocumentation",
                "src": "71:153:5",
                "text": "@title Pool state that never changes\n @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values"
              },
              "fullyImplemented": false,
              "id": 327,
              "linearizedBaseContracts": [
                327
              ],
              "name": "IAstraCLPoolImmutables",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 291,
                    "nodeType": "StructuredDocumentation",
                    "src": "263:136:5",
                    "text": "@notice The contract that deployed the pool, which must adhere to the IAstraCLFactory interface\n @return The contract address"
                  },
                  "functionSelector": "c45a0155",
                  "id": 296,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factory",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 292,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "420:2:5"
                  },
                  "returnParameters": {
                    "id": 295,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 294,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 296,
                        "src": "446:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 293,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "446:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "445:9:5"
                  },
                  "scope": 327,
                  "src": "404:51:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 297,
                    "nodeType": "StructuredDocumentation",
                    "src": "461:113:5",
                    "text": "@notice The first of the two tokens of the pool, sorted by address\n @return The token contract address"
                  },
                  "functionSelector": "0dfe1681",
                  "id": 302,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "token0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 298,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "594:2:5"
                  },
                  "returnParameters": {
                    "id": 301,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 300,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 302,
                        "src": "620:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 299,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "620:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "619:9:5"
                  },
                  "scope": 327,
                  "src": "579:50:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 303,
                    "nodeType": "StructuredDocumentation",
                    "src": "635:114:5",
                    "text": "@notice The second of the two tokens of the pool, sorted by address\n @return The token contract address"
                  },
                  "functionSelector": "d21220a7",
                  "id": 308,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "token1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 304,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "769:2:5"
                  },
                  "returnParameters": {
                    "id": 307,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 306,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 308,
                        "src": "795:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 305,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "795:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "794:9:5"
                  },
                  "scope": 327,
                  "src": "754:50:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 309,
                    "nodeType": "StructuredDocumentation",
                    "src": "810:84:5",
                    "text": "@notice The pool's fee in hundredths of a bip, i.e. 1e-6\n @return The fee"
                  },
                  "functionSelector": "ddca3f43",
                  "id": 314,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fee",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 310,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "911:2:5"
                  },
                  "returnParameters": {
                    "id": 313,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 312,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 314,
                        "src": "937:6:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 311,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "937:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "936:8:5"
                  },
                  "scope": 327,
                  "src": "899:46:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 315,
                    "nodeType": "StructuredDocumentation",
                    "src": "951:358:5",
                    "text": "@notice The pool tick spacing\n @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\n e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\n This value is an int24 to avoid casting even though it is always positive.\n @return The tick spacing"
                  },
                  "functionSelector": "d0c93a7c",
                  "id": 320,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tickSpacing",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 316,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1334:2:5"
                  },
                  "returnParameters": {
                    "id": 319,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 318,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 320,
                        "src": "1360:5:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 317,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1360:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1359:7:5"
                  },
                  "scope": 327,
                  "src": "1314:53:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 321,
                    "nodeType": "StructuredDocumentation",
                    "src": "1373:363:5",
                    "text": "@notice The maximum amount of position liquidity that can use any tick in the range\n @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\n also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\n @return The max amount of liquidity per tick"
                  },
                  "functionSelector": "70cf754a",
                  "id": 326,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "maxLiquidityPerTick",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 322,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1769:2:5"
                  },
                  "returnParameters": {
                    "id": 325,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 324,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 326,
                        "src": "1795:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 323,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1795:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1794:9:5"
                  },
                  "scope": 327,
                  "src": "1741:63:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 328,
              "src": "224:1582:5"
            }
          ],
          "src": "45:1762:5"
        },
        "id": 5
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolOwnerActions.sol",
          "exportedSymbols": {
            "IAstraCLPoolOwnerActions": [
              353
            ]
          },
          "id": 354,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 329,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:6"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 330,
                "nodeType": "StructuredDocumentation",
                "src": "71:116:6",
                "text": "@title Permissioned pool actions\n @notice Contains pool methods that may only be called by the factory owner"
              },
              "fullyImplemented": false,
              "id": 353,
              "linearizedBaseContracts": [
                353
              ],
              "name": "IAstraCLPoolOwnerActions",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 331,
                    "nodeType": "StructuredDocumentation",
                    "src": "228:205:6",
                    "text": "@notice Set the denominator of the protocol's % share of the fees\n @param feeProtocol0 new protocol fee for token0 of the pool\n @param feeProtocol1 new protocol fee for token1 of the pool"
                  },
                  "functionSelector": "8206a4d1",
                  "id": 338,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setFeeProtocol",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 336,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 333,
                        "mutability": "mutable",
                        "name": "feeProtocol0",
                        "nodeType": "VariableDeclaration",
                        "scope": 338,
                        "src": "462:18:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 332,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "462:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 335,
                        "mutability": "mutable",
                        "name": "feeProtocol1",
                        "nodeType": "VariableDeclaration",
                        "scope": 338,
                        "src": "482:18:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 334,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "482:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "461:40:6"
                  },
                  "returnParameters": {
                    "id": 337,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "510:0:6"
                  },
                  "scope": 353,
                  "src": "438:73:6",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 339,
                    "nodeType": "StructuredDocumentation",
                    "src": "517:483:6",
                    "text": "@notice Collect the protocol fee accrued to the pool\n @param recipient The address to which collected protocol fees should be sent\n @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\n @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\n @return amount0 The protocol fee collected in token0\n @return amount1 The protocol fee collected in token1"
                  },
                  "functionSelector": "85b66729",
                  "id": 352,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collectProtocol",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 346,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 341,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 352,
                        "src": "1039:17:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 340,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1039:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 343,
                        "mutability": "mutable",
                        "name": "amount0Requested",
                        "nodeType": "VariableDeclaration",
                        "scope": 352,
                        "src": "1066:24:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 342,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1066:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 345,
                        "mutability": "mutable",
                        "name": "amount1Requested",
                        "nodeType": "VariableDeclaration",
                        "scope": 352,
                        "src": "1100:24:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 344,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1100:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1029:101:6"
                  },
                  "returnParameters": {
                    "id": 351,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 348,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 352,
                        "src": "1149:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 347,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1149:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 350,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 352,
                        "src": "1166:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 349,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1166:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1148:34:6"
                  },
                  "scope": 353,
                  "src": "1005:178:6",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 354,
              "src": "187:998:6"
            }
          ],
          "src": "45:1141:6"
        },
        "id": 6
      },
      "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/pool/IAstraCLPoolState.sol",
          "exportedSymbols": {
            "IAstraCLPoolState": [
              461
            ]
          },
          "id": 462,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 355,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:7"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 356,
                "nodeType": "StructuredDocumentation",
                "src": "71:169:7",
                "text": "@title Pool state that can change\n @notice These methods compose the pool's state, and can change with any frequency including multiple times\n per transaction"
              },
              "fullyImplemented": false,
              "id": 461,
              "linearizedBaseContracts": [
                461
              ],
              "name": "IAstraCLPoolState",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 357,
                    "nodeType": "StructuredDocumentation",
                    "src": "274:1140:7",
                    "text": "@notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\n when accessed externally.\n @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\n tick The current tick of the pool, i.e. according to the last tick transition that was run.\n This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\n boundary.\n observationIndex The index of the last oracle observation that was written,\n observationCardinality The current maximum number of observations stored in the pool,\n observationCardinalityNext The next maximum number of observations, to be updated when the observation.\n feeProtocol The protocol fee for both tokens of the pool.\n Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\n is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\n unlocked Whether the pool is currently locked to reentrancy"
                  },
                  "functionSelector": "3850c7bd",
                  "id": 374,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "slot0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 358,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1433:2:7"
                  },
                  "returnParameters": {
                    "id": 373,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 360,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 374,
                        "src": "1496:20:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 359,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1496:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 362,
                        "mutability": "mutable",
                        "name": "tick",
                        "nodeType": "VariableDeclaration",
                        "scope": 374,
                        "src": "1530:10:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 361,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1530:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 364,
                        "mutability": "mutable",
                        "name": "observationIndex",
                        "nodeType": "VariableDeclaration",
                        "scope": 374,
                        "src": "1554:23:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 363,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1554:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 366,
                        "mutability": "mutable",
                        "name": "observationCardinality",
                        "nodeType": "VariableDeclaration",
                        "scope": 374,
                        "src": "1591:29:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 365,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1591:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 368,
                        "mutability": "mutable",
                        "name": "observationCardinalityNext",
                        "nodeType": "VariableDeclaration",
                        "scope": 374,
                        "src": "1634:33:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 367,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1634:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 370,
                        "mutability": "mutable",
                        "name": "feeProtocol",
                        "nodeType": "VariableDeclaration",
                        "scope": 374,
                        "src": "1681:17:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 369,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1681:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 372,
                        "mutability": "mutable",
                        "name": "unlocked",
                        "nodeType": "VariableDeclaration",
                        "scope": 374,
                        "src": "1712:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 371,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1712:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1482:253:7"
                  },
                  "scope": 461,
                  "src": "1419:317:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 375,
                    "nodeType": "StructuredDocumentation",
                    "src": "1742:168:7",
                    "text": "@notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\n @dev This value can overflow the uint256"
                  },
                  "functionSelector": "f3058399",
                  "id": 380,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "feeGrowthGlobal0X128",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 376,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1944:2:7"
                  },
                  "returnParameters": {
                    "id": 379,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 378,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 380,
                        "src": "1970:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 377,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1970:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1969:9:7"
                  },
                  "scope": 461,
                  "src": "1915:64:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 381,
                    "nodeType": "StructuredDocumentation",
                    "src": "1985:168:7",
                    "text": "@notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\n @dev This value can overflow the uint256"
                  },
                  "functionSelector": "46141319",
                  "id": 386,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "feeGrowthGlobal1X128",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 382,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2187:2:7"
                  },
                  "returnParameters": {
                    "id": 385,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 384,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 386,
                        "src": "2213:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 383,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2213:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2212:9:7"
                  },
                  "scope": 461,
                  "src": "2158:64:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 387,
                    "nodeType": "StructuredDocumentation",
                    "src": "2228:147:7",
                    "text": "@notice The amounts of token0 and token1 that are owed to the protocol\n @dev Protocol fees will never exceed uint128 max in either token"
                  },
                  "functionSelector": "1ad8b03b",
                  "id": 394,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "protocolFees",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 388,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2401:2:7"
                  },
                  "returnParameters": {
                    "id": 393,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 390,
                        "mutability": "mutable",
                        "name": "token0",
                        "nodeType": "VariableDeclaration",
                        "scope": 394,
                        "src": "2427:14:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 389,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2427:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 392,
                        "mutability": "mutable",
                        "name": "token1",
                        "nodeType": "VariableDeclaration",
                        "scope": 394,
                        "src": "2443:14:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 391,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2443:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2426:32:7"
                  },
                  "scope": 461,
                  "src": "2380:79:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 395,
                    "nodeType": "StructuredDocumentation",
                    "src": "2465:150:7",
                    "text": "@notice The currently in range liquidity available to the pool\n @dev This value has no relationship to the total liquidity across all ticks"
                  },
                  "functionSelector": "1a686502",
                  "id": 400,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidity",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 396,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2638:2:7"
                  },
                  "returnParameters": {
                    "id": 399,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 398,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 400,
                        "src": "2664:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 397,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2664:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2663:9:7"
                  },
                  "scope": 461,
                  "src": "2620:53:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 401,
                    "nodeType": "StructuredDocumentation",
                    "src": "2679:1244:7",
                    "text": "@notice Look up information about a specific tick in the pool\n @param tick The tick to look up\n @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\n tick upper,\n liquidityNet how much liquidity changes when the pool price crosses the tick,\n feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\n feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\n tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\n secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\n secondsOutside the seconds spent on the other side of the tick from the current tick,\n initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\n Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\n In addition, these values are only relative and must be used only in comparison to previous snapshots for\n a specific position."
                  },
                  "functionSelector": "f30dba93",
                  "id": 422,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ticks",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 404,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 403,
                        "mutability": "mutable",
                        "name": "tick",
                        "nodeType": "VariableDeclaration",
                        "scope": 422,
                        "src": "3952:10:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 402,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3952:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3942:26:7"
                  },
                  "returnParameters": {
                    "id": 421,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 406,
                        "mutability": "mutable",
                        "name": "liquidityGross",
                        "nodeType": "VariableDeclaration",
                        "scope": 422,
                        "src": "4029:22:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 405,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "4029:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 408,
                        "mutability": "mutable",
                        "name": "liquidityNet",
                        "nodeType": "VariableDeclaration",
                        "scope": 422,
                        "src": "4065:19:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int128",
                          "typeString": "int128"
                        },
                        "typeName": {
                          "id": 407,
                          "name": "int128",
                          "nodeType": "ElementaryTypeName",
                          "src": "4065:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int128",
                            "typeString": "int128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 410,
                        "mutability": "mutable",
                        "name": "feeGrowthOutside0X128",
                        "nodeType": "VariableDeclaration",
                        "scope": 422,
                        "src": "4098:29:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 409,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4098:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 412,
                        "mutability": "mutable",
                        "name": "feeGrowthOutside1X128",
                        "nodeType": "VariableDeclaration",
                        "scope": 422,
                        "src": "4141:29:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 411,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4141:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 414,
                        "mutability": "mutable",
                        "name": "tickCumulativeOutside",
                        "nodeType": "VariableDeclaration",
                        "scope": 422,
                        "src": "4184:27:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 413,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "4184:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 416,
                        "mutability": "mutable",
                        "name": "secondsPerLiquidityOutsideX128",
                        "nodeType": "VariableDeclaration",
                        "scope": 422,
                        "src": "4225:38:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 415,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "4225:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 418,
                        "mutability": "mutable",
                        "name": "secondsOutside",
                        "nodeType": "VariableDeclaration",
                        "scope": 422,
                        "src": "4277:21:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 417,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4277:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 420,
                        "mutability": "mutable",
                        "name": "initialized",
                        "nodeType": "VariableDeclaration",
                        "scope": 422,
                        "src": "4312:16:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 419,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4312:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4015:323:7"
                  },
                  "scope": 461,
                  "src": "3928:411:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 423,
                    "nodeType": "StructuredDocumentation",
                    "src": "4345:99:7",
                    "text": "@notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information"
                  },
                  "functionSelector": "5339c296",
                  "id": 430,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tickBitmap",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 426,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 425,
                        "mutability": "mutable",
                        "name": "wordPosition",
                        "nodeType": "VariableDeclaration",
                        "scope": 430,
                        "src": "4469:18:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int16",
                          "typeString": "int16"
                        },
                        "typeName": {
                          "id": 424,
                          "name": "int16",
                          "nodeType": "ElementaryTypeName",
                          "src": "4469:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int16",
                            "typeString": "int16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4468:20:7"
                  },
                  "returnParameters": {
                    "id": 429,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 428,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 430,
                        "src": "4512:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 427,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4512:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4511:9:7"
                  },
                  "scope": 461,
                  "src": "4449:72:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 431,
                    "nodeType": "StructuredDocumentation",
                    "src": "4527:700:7",
                    "text": "@notice Returns the information about a position by the position's key\n @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\n @return _liquidity The amount of liquidity in the position,\n Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\n Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\n Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\n Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke"
                  },
                  "functionSelector": "514ea4bf",
                  "id": 446,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "positions",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 434,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 433,
                        "mutability": "mutable",
                        "name": "key",
                        "nodeType": "VariableDeclaration",
                        "scope": 446,
                        "src": "5260:11:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 432,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5260:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5250:27:7"
                  },
                  "returnParameters": {
                    "id": 445,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 436,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nodeType": "VariableDeclaration",
                        "scope": 446,
                        "src": "5338:18:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 435,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5338:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 438,
                        "mutability": "mutable",
                        "name": "feeGrowthInside0LastX128",
                        "nodeType": "VariableDeclaration",
                        "scope": 446,
                        "src": "5370:32:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 437,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5370:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 440,
                        "mutability": "mutable",
                        "name": "feeGrowthInside1LastX128",
                        "nodeType": "VariableDeclaration",
                        "scope": 446,
                        "src": "5416:32:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 439,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5416:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 442,
                        "mutability": "mutable",
                        "name": "tokensOwed0",
                        "nodeType": "VariableDeclaration",
                        "scope": 446,
                        "src": "5462:19:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 441,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5462:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 444,
                        "mutability": "mutable",
                        "name": "tokensOwed1",
                        "nodeType": "VariableDeclaration",
                        "scope": 446,
                        "src": "5495:19:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 443,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5495:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5324:200:7"
                  },
                  "scope": 461,
                  "src": "5232:293:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 447,
                    "nodeType": "StructuredDocumentation",
                    "src": "5531:749:7",
                    "text": "@notice Returns data about a specific observation index\n @param index The element of the observations array to fetch\n @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\n ago, rather than at a specific index in the array.\n @return blockTimestamp The timestamp of the observation,\n Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\n Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\n Returns initialized whether the observation has been initialized and the values are safe to use"
                  },
                  "functionSelector": "252c09d7",
                  "id": 460,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "observations",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 450,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 449,
                        "mutability": "mutable",
                        "name": "index",
                        "nodeType": "VariableDeclaration",
                        "scope": 460,
                        "src": "6316:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 448,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6316:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6306:29:7"
                  },
                  "returnParameters": {
                    "id": 459,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 452,
                        "mutability": "mutable",
                        "name": "blockTimestamp",
                        "nodeType": "VariableDeclaration",
                        "scope": 460,
                        "src": "6396:21:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 451,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6396:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 454,
                        "mutability": "mutable",
                        "name": "tickCumulative",
                        "nodeType": "VariableDeclaration",
                        "scope": 460,
                        "src": "6431:20:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 453,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "6431:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 456,
                        "mutability": "mutable",
                        "name": "secondsPerLiquidityCumulativeX128",
                        "nodeType": "VariableDeclaration",
                        "scope": 460,
                        "src": "6465:41:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 455,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "6465:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 458,
                        "mutability": "mutable",
                        "name": "initialized",
                        "nodeType": "VariableDeclaration",
                        "scope": 460,
                        "src": "6520:16:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 457,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6520:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6382:164:7"
                  },
                  "scope": 461,
                  "src": "6285:262:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 462,
              "src": "240:6309:7"
            }
          ],
          "src": "45:6505:7"
        },
        "id": 7
      },
      "@airdao/astra-cl-core/contracts/libraries/BitMath.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/libraries/BitMath.sol",
          "exportedSymbols": {
            "BitMath": [
              740
            ]
          },
          "id": 741,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 463,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:8"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 464,
                "nodeType": "StructuredDocumentation",
                "src": "71:116:8",
                "text": "@title BitMath\n @dev This library provides functionality for computing bit properties of an unsigned integer"
              },
              "fullyImplemented": true,
              "id": 740,
              "linearizedBaseContracts": [
                740
              ],
              "name": "BitMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 577,
                    "nodeType": "Block",
                    "src": "742:660:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 475,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 473,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 467,
                                "src": "760:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 474,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "764:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "760:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 472,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "752:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 476,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "752:14:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 477,
                        "nodeType": "ExpressionStatement",
                        "src": "752:14:8"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 478,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 467,
                            "src": "781:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "3078313030303030303030303030303030303030303030303030303030303030303030",
                            "id": 479,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "786:35:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                              "typeString": "int_const 3402...(31 digits omitted)...1456"
                            },
                            "value": "0x100000000000000000000000000000000"
                          },
                          "src": "781:40:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 490,
                        "nodeType": "IfStatement",
                        "src": "777:102:8",
                        "trueBody": {
                          "id": 489,
                          "nodeType": "Block",
                          "src": "823:56:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 483,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 481,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 467,
                                  "src": "837:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "313238",
                                  "id": 482,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "843:3:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_128_by_1",
                                    "typeString": "int_const 128"
                                  },
                                  "value": "128"
                                },
                                "src": "837:9:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 484,
                              "nodeType": "ExpressionStatement",
                              "src": "837:9:8"
                            },
                            {
                              "expression": {
                                "id": 487,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 485,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 470,
                                  "src": "860:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "313238",
                                  "id": 486,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "865:3:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_128_by_1",
                                    "typeString": "int_const 128"
                                  },
                                  "value": "128"
                                },
                                "src": "860:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 488,
                              "nodeType": "ExpressionStatement",
                              "src": "860:8:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 491,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 467,
                            "src": "892:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "30783130303030303030303030303030303030",
                            "id": 492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "897:19:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_18446744073709551616_by_1",
                              "typeString": "int_const 18446744073709551616"
                            },
                            "value": "0x10000000000000000"
                          },
                          "src": "892:24:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 503,
                        "nodeType": "IfStatement",
                        "src": "888:84:8",
                        "trueBody": {
                          "id": 502,
                          "nodeType": "Block",
                          "src": "918:54:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 496,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 494,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 467,
                                  "src": "932:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "3634",
                                  "id": 495,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "938:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "932:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 497,
                              "nodeType": "ExpressionStatement",
                              "src": "932:8:8"
                            },
                            {
                              "expression": {
                                "id": 500,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 498,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 470,
                                  "src": "954:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "3634",
                                  "id": 499,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "959:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "954:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 501,
                              "nodeType": "ExpressionStatement",
                              "src": "954:7:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 504,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 467,
                            "src": "985:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "3078313030303030303030",
                            "id": 505,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "990:11:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4294967296_by_1",
                              "typeString": "int_const 4294967296"
                            },
                            "value": "0x100000000"
                          },
                          "src": "985:16:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 516,
                        "nodeType": "IfStatement",
                        "src": "981:76:8",
                        "trueBody": {
                          "id": 515,
                          "nodeType": "Block",
                          "src": "1003:54:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 509,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 507,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 467,
                                  "src": "1017:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "3332",
                                  "id": 508,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1023:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "1017:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 510,
                              "nodeType": "ExpressionStatement",
                              "src": "1017:8:8"
                            },
                            {
                              "expression": {
                                "id": 513,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 511,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 470,
                                  "src": "1039:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "3332",
                                  "id": 512,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1044:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "1039:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 514,
                              "nodeType": "ExpressionStatement",
                              "src": "1039:7:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 517,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 467,
                            "src": "1070:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "30783130303030",
                            "id": 518,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1075:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_65536_by_1",
                              "typeString": "int_const 65536"
                            },
                            "value": "0x10000"
                          },
                          "src": "1070:12:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 529,
                        "nodeType": "IfStatement",
                        "src": "1066:72:8",
                        "trueBody": {
                          "id": 528,
                          "nodeType": "Block",
                          "src": "1084:54:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 522,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 520,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 467,
                                  "src": "1098:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "3136",
                                  "id": 521,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1104:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "1098:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 523,
                              "nodeType": "ExpressionStatement",
                              "src": "1098:8:8"
                            },
                            {
                              "expression": {
                                "id": 526,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 524,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 470,
                                  "src": "1120:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "3136",
                                  "id": 525,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1125:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "1120:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 527,
                              "nodeType": "ExpressionStatement",
                              "src": "1120:7:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 530,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 467,
                            "src": "1151:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "3078313030",
                            "id": 531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1156:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_256_by_1",
                              "typeString": "int_const 256"
                            },
                            "value": "0x100"
                          },
                          "src": "1151:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 542,
                        "nodeType": "IfStatement",
                        "src": "1147:68:8",
                        "trueBody": {
                          "id": 541,
                          "nodeType": "Block",
                          "src": "1163:52:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 535,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 533,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 467,
                                  "src": "1177:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "38",
                                  "id": 534,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1183:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "1177:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 536,
                              "nodeType": "ExpressionStatement",
                              "src": "1177:7:8"
                            },
                            {
                              "expression": {
                                "id": 539,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 537,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 470,
                                  "src": "1198:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "38",
                                  "id": 538,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1203:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "1198:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 540,
                              "nodeType": "ExpressionStatement",
                              "src": "1198:6:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 545,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 543,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 467,
                            "src": "1228:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "30783130",
                            "id": 544,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1233:4:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_16_by_1",
                              "typeString": "int_const 16"
                            },
                            "value": "0x10"
                          },
                          "src": "1228:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 555,
                        "nodeType": "IfStatement",
                        "src": "1224:67:8",
                        "trueBody": {
                          "id": 554,
                          "nodeType": "Block",
                          "src": "1239:52:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 548,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 546,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 467,
                                  "src": "1253:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "34",
                                  "id": 547,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1259:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "1253:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 549,
                              "nodeType": "ExpressionStatement",
                              "src": "1253:7:8"
                            },
                            {
                              "expression": {
                                "id": 552,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 550,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 470,
                                  "src": "1274:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "34",
                                  "id": 551,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1279:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "1274:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 553,
                              "nodeType": "ExpressionStatement",
                              "src": "1274:6:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 556,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 467,
                            "src": "1304:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "307834",
                            "id": 557,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1309:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "0x4"
                          },
                          "src": "1304:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 568,
                        "nodeType": "IfStatement",
                        "src": "1300:66:8",
                        "trueBody": {
                          "id": 567,
                          "nodeType": "Block",
                          "src": "1314:52:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 561,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 559,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 467,
                                  "src": "1328:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "32",
                                  "id": 560,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1334:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "1328:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 562,
                              "nodeType": "ExpressionStatement",
                              "src": "1328:7:8"
                            },
                            {
                              "expression": {
                                "id": 565,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 563,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 470,
                                  "src": "1349:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "32",
                                  "id": 564,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1354:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "1349:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 566,
                              "nodeType": "ExpressionStatement",
                              "src": "1349:6:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 571,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 569,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 467,
                            "src": "1379:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "307832",
                            "id": 570,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1384:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "0x2"
                          },
                          "src": "1379:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 576,
                        "nodeType": "IfStatement",
                        "src": "1375:20:8",
                        "trueBody": {
                          "expression": {
                            "id": 574,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 572,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 470,
                              "src": "1389:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "+=",
                            "rightHandSide": {
                              "hexValue": "31",
                              "id": 573,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1394:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "1389:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "id": 575,
                          "nodeType": "ExpressionStatement",
                          "src": "1389:6:8"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 465,
                    "nodeType": "StructuredDocumentation",
                    "src": "209:457:8",
                    "text": "@notice Returns the index of the most significant bit of the number,\n     where the least significant bit is at index 0 and the most significant bit is at index 255\n @dev The function satisfies the property:\n     x >= 2**mostSignificantBit(x) and x < 2**(mostSignificantBit(x)+1)\n @param x the value for which to compute the most significant bit, must be greater than 0\n @return r the index of the most significant bit"
                  },
                  "id": 578,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mostSignificantBit",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 468,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 467,
                        "mutability": "mutable",
                        "name": "x",
                        "nodeType": "VariableDeclaration",
                        "scope": 578,
                        "src": "699:9:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 466,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "699:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "698:11:8"
                  },
                  "returnParameters": {
                    "id": 471,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 470,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 578,
                        "src": "733:7:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 469,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "733:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "732:9:8"
                  },
                  "scope": 740,
                  "src": "671:731:8",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 738,
                    "nodeType": "Block",
                    "src": "1965:822:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 589,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 587,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 581,
                                "src": "1983:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 588,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1987:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1983:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 586,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1975:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1975:14:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 591,
                        "nodeType": "ExpressionStatement",
                        "src": "1975:14:8"
                      },
                      {
                        "expression": {
                          "id": 594,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 592,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 584,
                            "src": "2000:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "323535",
                            "id": 593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2004:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_255_by_1",
                              "typeString": "int_const 255"
                            },
                            "value": "255"
                          },
                          "src": "2000:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 595,
                        "nodeType": "ExpressionStatement",
                        "src": "2000:7:8"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 604,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 602,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 596,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 581,
                              "src": "2021:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 599,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2030:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint128_$",
                                      "typeString": "type(uint128)"
                                    },
                                    "typeName": {
                                      "id": 598,
                                      "name": "uint128",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2030:7:8",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint128_$",
                                      "typeString": "type(uint128)"
                                    }
                                  ],
                                  "id": 597,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "2025:4:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 600,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2025:13:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint128",
                                  "typeString": "type(uint128)"
                                }
                              },
                              "id": 601,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "2025:17:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "src": "2021:21:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 603,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2045:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2021:25:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 614,
                          "nodeType": "Block",
                          "src": "2087:34:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 612,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 610,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 581,
                                  "src": "2101:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "313238",
                                  "id": 611,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2107:3:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_128_by_1",
                                    "typeString": "int_const 128"
                                  },
                                  "value": "128"
                                },
                                "src": "2101:9:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 613,
                              "nodeType": "ExpressionStatement",
                              "src": "2101:9:8"
                            }
                          ]
                        },
                        "id": 615,
                        "nodeType": "IfStatement",
                        "src": "2017:104:8",
                        "trueBody": {
                          "id": 609,
                          "nodeType": "Block",
                          "src": "2048:33:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 607,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 605,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 584,
                                  "src": "2062:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "313238",
                                  "id": 606,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2067:3:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_128_by_1",
                                    "typeString": "int_const 128"
                                  },
                                  "value": "128"
                                },
                                "src": "2062:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 608,
                              "nodeType": "ExpressionStatement",
                              "src": "2062:8:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 624,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 622,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 616,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 581,
                              "src": "2134:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 619,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2143:6:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint64_$",
                                      "typeString": "type(uint64)"
                                    },
                                    "typeName": {
                                      "id": 618,
                                      "name": "uint64",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2143:6:8",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint64_$",
                                      "typeString": "type(uint64)"
                                    }
                                  ],
                                  "id": 617,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "2138:4:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 620,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2138:12:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint64",
                                  "typeString": "type(uint64)"
                                }
                              },
                              "id": 621,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "2138:16:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "2134:20:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 623,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2157:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2134:24:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 634,
                          "nodeType": "Block",
                          "src": "2198:33:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 632,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 630,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 581,
                                  "src": "2212:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "3634",
                                  "id": 631,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2218:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "2212:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 633,
                              "nodeType": "ExpressionStatement",
                              "src": "2212:8:8"
                            }
                          ]
                        },
                        "id": 635,
                        "nodeType": "IfStatement",
                        "src": "2130:101:8",
                        "trueBody": {
                          "id": 629,
                          "nodeType": "Block",
                          "src": "2160:32:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 627,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 625,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 584,
                                  "src": "2174:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "3634",
                                  "id": 626,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2179:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "2174:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 628,
                              "nodeType": "ExpressionStatement",
                              "src": "2174:7:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 644,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 642,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 636,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 581,
                              "src": "2244:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 639,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2253:6:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint32_$",
                                      "typeString": "type(uint32)"
                                    },
                                    "typeName": {
                                      "id": 638,
                                      "name": "uint32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2253:6:8",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint32_$",
                                      "typeString": "type(uint32)"
                                    }
                                  ],
                                  "id": 637,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "2248:4:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 640,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2248:12:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint32",
                                  "typeString": "type(uint32)"
                                }
                              },
                              "id": 641,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "2248:16:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "src": "2244:20:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 643,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2267:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2244:24:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 654,
                          "nodeType": "Block",
                          "src": "2308:33:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 652,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 650,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 581,
                                  "src": "2322:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "3332",
                                  "id": 651,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2328:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "2322:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 653,
                              "nodeType": "ExpressionStatement",
                              "src": "2322:8:8"
                            }
                          ]
                        },
                        "id": 655,
                        "nodeType": "IfStatement",
                        "src": "2240:101:8",
                        "trueBody": {
                          "id": 649,
                          "nodeType": "Block",
                          "src": "2270:32:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 647,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 645,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 584,
                                  "src": "2284:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "3332",
                                  "id": 646,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2289:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "2284:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 648,
                              "nodeType": "ExpressionStatement",
                              "src": "2284:7:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 662,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 656,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 581,
                              "src": "2354:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 659,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2363:6:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint16_$",
                                      "typeString": "type(uint16)"
                                    },
                                    "typeName": {
                                      "id": 658,
                                      "name": "uint16",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2363:6:8",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint16_$",
                                      "typeString": "type(uint16)"
                                    }
                                  ],
                                  "id": 657,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "2358:4:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 660,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2358:12:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint16",
                                  "typeString": "type(uint16)"
                                }
                              },
                              "id": 661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "2358:16:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "src": "2354:20:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 663,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2377:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2354:24:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 674,
                          "nodeType": "Block",
                          "src": "2418:33:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 672,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 670,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 581,
                                  "src": "2432:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "3136",
                                  "id": 671,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2438:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "2432:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 673,
                              "nodeType": "ExpressionStatement",
                              "src": "2432:8:8"
                            }
                          ]
                        },
                        "id": 675,
                        "nodeType": "IfStatement",
                        "src": "2350:101:8",
                        "trueBody": {
                          "id": 669,
                          "nodeType": "Block",
                          "src": "2380:32:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 667,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 665,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 584,
                                  "src": "2394:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "3136",
                                  "id": 666,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2399:2:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "2394:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 668,
                              "nodeType": "ExpressionStatement",
                              "src": "2394:7:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 682,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 676,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 581,
                              "src": "2464:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 679,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2473:5:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint8_$",
                                      "typeString": "type(uint8)"
                                    },
                                    "typeName": {
                                      "id": 678,
                                      "name": "uint8",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2473:5:8",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint8_$",
                                      "typeString": "type(uint8)"
                                    }
                                  ],
                                  "id": 677,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "2468:4:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 680,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2468:11:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint8",
                                  "typeString": "type(uint8)"
                                }
                              },
                              "id": 681,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "2468:15:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "src": "2464:19:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 683,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2486:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2464:23:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 694,
                          "nodeType": "Block",
                          "src": "2526:32:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 692,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 690,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 581,
                                  "src": "2540:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "38",
                                  "id": 691,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2546:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "2540:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 693,
                              "nodeType": "ExpressionStatement",
                              "src": "2540:7:8"
                            }
                          ]
                        },
                        "id": 695,
                        "nodeType": "IfStatement",
                        "src": "2460:98:8",
                        "trueBody": {
                          "id": 689,
                          "nodeType": "Block",
                          "src": "2489:31:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 687,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 685,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 584,
                                  "src": "2503:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "38",
                                  "id": 686,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2508:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "2503:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 688,
                              "nodeType": "ExpressionStatement",
                              "src": "2503:6:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 700,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 698,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 696,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 581,
                              "src": "2571:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307866",
                              "id": 697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2575:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_15_by_1",
                                "typeString": "int_const 15"
                              },
                              "value": "0xf"
                            },
                            "src": "2571:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 699,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2581:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2571:11:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 710,
                          "nodeType": "Block",
                          "src": "2621:32:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 708,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 706,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 581,
                                  "src": "2635:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "34",
                                  "id": 707,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2641:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "2635:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 709,
                              "nodeType": "ExpressionStatement",
                              "src": "2635:7:8"
                            }
                          ]
                        },
                        "id": 711,
                        "nodeType": "IfStatement",
                        "src": "2567:86:8",
                        "trueBody": {
                          "id": 705,
                          "nodeType": "Block",
                          "src": "2584:31:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 703,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 701,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 584,
                                  "src": "2598:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "34",
                                  "id": 702,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2603:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "2598:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 704,
                              "nodeType": "ExpressionStatement",
                              "src": "2598:6:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 716,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 714,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 712,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 581,
                              "src": "2666:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307833",
                              "id": 713,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2670:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_3_by_1",
                                "typeString": "int_const 3"
                              },
                              "value": "0x3"
                            },
                            "src": "2666:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 715,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2676:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2666:11:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 726,
                          "nodeType": "Block",
                          "src": "2716:32:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 724,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 722,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 581,
                                  "src": "2730:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "32",
                                  "id": 723,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2736:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "2730:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 725,
                              "nodeType": "ExpressionStatement",
                              "src": "2730:7:8"
                            }
                          ]
                        },
                        "id": 727,
                        "nodeType": "IfStatement",
                        "src": "2662:86:8",
                        "trueBody": {
                          "id": 721,
                          "nodeType": "Block",
                          "src": "2679:31:8",
                          "statements": [
                            {
                              "expression": {
                                "id": 719,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 717,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 584,
                                  "src": "2693:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "32",
                                  "id": 718,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2698:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "2693:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 720,
                              "nodeType": "ExpressionStatement",
                              "src": "2693:6:8"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 730,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 728,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 581,
                              "src": "2761:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307831",
                              "id": 729,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2765:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "0x1"
                            },
                            "src": "2761:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 731,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2771:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2761:11:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 737,
                        "nodeType": "IfStatement",
                        "src": "2757:23:8",
                        "trueBody": {
                          "expression": {
                            "id": 735,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 733,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 584,
                              "src": "2774:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "-=",
                            "rightHandSide": {
                              "hexValue": "31",
                              "id": 734,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2779:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "2774:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "id": 736,
                          "nodeType": "ExpressionStatement",
                          "src": "2774:6:8"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 579,
                    "nodeType": "StructuredDocumentation",
                    "src": "1408:480:8",
                    "text": "@notice Returns the index of the least significant bit of the number,\n     where the least significant bit is at index 0 and the most significant bit is at index 255\n @dev The function satisfies the property:\n     (x & 2**leastSignificantBit(x)) != 0 and (x & (2**(leastSignificantBit(x)) - 1)) == 0)\n @param x the value for which to compute the least significant bit, must be greater than 0\n @return r the index of the least significant bit"
                  },
                  "id": 739,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "leastSignificantBit",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 582,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 581,
                        "mutability": "mutable",
                        "name": "x",
                        "nodeType": "VariableDeclaration",
                        "scope": 739,
                        "src": "1922:9:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 580,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1922:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1921:11:8"
                  },
                  "returnParameters": {
                    "id": 585,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 584,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 739,
                        "src": "1956:7:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 583,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1956:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1955:9:8"
                  },
                  "scope": 740,
                  "src": "1893:894:8",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 741,
              "src": "187:2602:8"
            }
          ],
          "src": "45:2745:8"
        },
        "id": 8
      },
      "@airdao/astra-cl-core/contracts/libraries/FullMath.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/libraries/FullMath.sol",
          "exportedSymbols": {
            "FullMath": [
              913
            ]
          },
          "id": 914,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 742,
              "literals": [
                "solidity",
                ">=",
                "0.4",
                ".0",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:9"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 743,
                "nodeType": "StructuredDocumentation",
                "src": "65:297:9",
                "text": "@title Contains 512-bit math functions\n @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\n @dev Handles \"phantom overflow\" i.e., allows multiplication and division where an intermediate value overflows 256 bits"
              },
              "fullyImplemented": true,
              "id": 913,
              "linearizedBaseContracts": [
                913
              ],
              "name": "FullMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 868,
                    "nodeType": "Block",
                    "src": "847:3648:9",
                    "statements": [
                      {
                        "assignments": [
                          756
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 756,
                            "mutability": "mutable",
                            "name": "prod0",
                            "nodeType": "VariableDeclaration",
                            "scope": 868,
                            "src": "1160:13:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 755,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1160:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 757,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1160:13:9"
                      },
                      {
                        "assignments": [
                          759
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 759,
                            "mutability": "mutable",
                            "name": "prod1",
                            "nodeType": "VariableDeclaration",
                            "scope": 868,
                            "src": "1228:13:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 758,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1228:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 760,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1228:13:9"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1304:141:9",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1318:30:9",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "a",
                                    "nodeType": "YulIdentifier",
                                    "src": "1335:1:9"
                                  },
                                  {
                                    "name": "b",
                                    "nodeType": "YulIdentifier",
                                    "src": "1338:1:9"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1345:1:9",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "1341:3:9"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1341:6:9"
                                  }
                                ],
                                "functionName": {
                                  "name": "mulmod",
                                  "nodeType": "YulIdentifier",
                                  "src": "1328:6:9"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1328:20:9"
                              },
                              "variables": [
                                {
                                  "name": "mm",
                                  "nodeType": "YulTypedName",
                                  "src": "1322:2:9",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1361:18:9",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "a",
                                    "nodeType": "YulIdentifier",
                                    "src": "1374:1:9"
                                  },
                                  {
                                    "name": "b",
                                    "nodeType": "YulIdentifier",
                                    "src": "1377:1:9"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "1370:3:9"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1370:9:9"
                              },
                              "variableNames": [
                                {
                                  "name": "prod0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1361:5:9"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1392:43:9",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "mm",
                                        "nodeType": "YulIdentifier",
                                        "src": "1409:2:9"
                                      },
                                      {
                                        "name": "prod0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1413:5:9"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1405:3:9"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1405:14:9"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "mm",
                                        "nodeType": "YulIdentifier",
                                        "src": "1424:2:9"
                                      },
                                      {
                                        "name": "prod0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1428:5:9"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1421:2:9"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1421:13:9"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1401:3:9"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1401:34:9"
                              },
                              "variableNames": [
                                {
                                  "name": "prod1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1392:5:9"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 746,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1335:1:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 746,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1374:1:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 748,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1338:1:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 748,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1377:1:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 756,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1361:5:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 756,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1413:5:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 756,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1428:5:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 759,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1392:5:9",
                            "valueSize": 1
                          }
                        ],
                        "id": 761,
                        "nodeType": "InlineAssembly",
                        "src": "1295:150:9"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 762,
                            "name": "prod1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 759,
                            "src": "1517:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1526:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1517:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 775,
                        "nodeType": "IfStatement",
                        "src": "1513:179:9",
                        "trueBody": {
                          "id": 774,
                          "nodeType": "Block",
                          "src": "1529:163:9",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 768,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 766,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 750,
                                      "src": "1551:11:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 767,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1565:1:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1551:15:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 765,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "1543:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 769,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1543:24:9",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 770,
                              "nodeType": "ExpressionStatement",
                              "src": "1543:24:9"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "1590:65:9",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1608:33:9",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "prod0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1622:5:9"
                                        },
                                        {
                                          "name": "denominator",
                                          "nodeType": "YulIdentifier",
                                          "src": "1629:11:9"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "div",
                                        "nodeType": "YulIdentifier",
                                        "src": "1618:3:9"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1618:23:9"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "result",
                                        "nodeType": "YulIdentifier",
                                        "src": "1608:6:9"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 750,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "1629:11:9",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 756,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "1622:5:9",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 753,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "1608:6:9",
                                  "valueSize": 1
                                }
                              ],
                              "id": 771,
                              "nodeType": "InlineAssembly",
                              "src": "1581:74:9"
                            },
                            {
                              "expression": {
                                "id": 772,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 753,
                                "src": "1675:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 754,
                              "id": 773,
                              "nodeType": "Return",
                              "src": "1668:13:9"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 779,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 777,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "1805:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "id": 778,
                                "name": "prod1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 759,
                                "src": "1819:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1805:19:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 776,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1797:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 780,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1797:28:9",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 781,
                        "nodeType": "ExpressionStatement",
                        "src": "1797:28:9"
                      },
                      {
                        "assignments": [
                          783
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 783,
                            "mutability": "mutable",
                            "name": "remainder",
                            "nodeType": "VariableDeclaration",
                            "scope": 868,
                            "src": "2102:17:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 782,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2102:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 784,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2102:17:9"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "2138:62:9",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2152:38:9",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "a",
                                    "nodeType": "YulIdentifier",
                                    "src": "2172:1:9"
                                  },
                                  {
                                    "name": "b",
                                    "nodeType": "YulIdentifier",
                                    "src": "2175:1:9"
                                  },
                                  {
                                    "name": "denominator",
                                    "nodeType": "YulIdentifier",
                                    "src": "2178:11:9"
                                  }
                                ],
                                "functionName": {
                                  "name": "mulmod",
                                  "nodeType": "YulIdentifier",
                                  "src": "2165:6:9"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2165:25:9"
                              },
                              "variableNames": [
                                {
                                  "name": "remainder",
                                  "nodeType": "YulIdentifier",
                                  "src": "2152:9:9"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 746,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2172:1:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 748,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2175:1:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 750,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2178:11:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 783,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2152:9:9",
                            "valueSize": 1
                          }
                        ],
                        "id": 785,
                        "nodeType": "InlineAssembly",
                        "src": "2129:71:9"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "2273:108:9",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2287:41:9",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "prod1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2300:5:9"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "remainder",
                                        "nodeType": "YulIdentifier",
                                        "src": "2310:9:9"
                                      },
                                      {
                                        "name": "prod0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2321:5:9"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2307:2:9"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2307:20:9"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "2296:3:9"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2296:32:9"
                              },
                              "variableNames": [
                                {
                                  "name": "prod1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2287:5:9"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2341:30:9",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "prod0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2354:5:9"
                                  },
                                  {
                                    "name": "remainder",
                                    "nodeType": "YulIdentifier",
                                    "src": "2361:9:9"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "2350:3:9"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2350:21:9"
                              },
                              "variableNames": [
                                {
                                  "name": "prod0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2341:5:9"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 756,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2321:5:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 756,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2341:5:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 756,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2354:5:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 759,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2287:5:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 759,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2300:5:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 783,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2310:9:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 783,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2361:9:9",
                            "valueSize": 1
                          }
                        ],
                        "id": 786,
                        "nodeType": "InlineAssembly",
                        "src": "2264:117:9"
                      },
                      {
                        "assignments": [
                          788
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 788,
                            "mutability": "mutable",
                            "name": "twos",
                            "nodeType": "VariableDeclaration",
                            "scope": 868,
                            "src": "2530:12:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 787,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2530:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 793,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 790,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "-",
                            "prefix": true,
                            "src": "2545:12:9",
                            "subExpression": {
                              "id": 789,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 750,
                              "src": "2546:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "id": 791,
                            "name": "denominator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 750,
                            "src": "2560:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2545:26:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2530:41:9"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "2636:61:9",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2650:37:9",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "denominator",
                                    "nodeType": "YulIdentifier",
                                    "src": "2669:11:9"
                                  },
                                  {
                                    "name": "twos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2682:4:9"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "2665:3:9"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2665:22:9"
                              },
                              "variableNames": [
                                {
                                  "name": "denominator",
                                  "nodeType": "YulIdentifier",
                                  "src": "2650:11:9"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 750,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2650:11:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 750,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2669:11:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 788,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2682:4:9",
                            "valueSize": 1
                          }
                        ],
                        "id": 794,
                        "nodeType": "InlineAssembly",
                        "src": "2627:70:9"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "2770:49:9",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2784:25:9",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "prod0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2797:5:9"
                                  },
                                  {
                                    "name": "twos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2804:4:9"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "2793:3:9"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2793:16:9"
                              },
                              "variableNames": [
                                {
                                  "name": "prod0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2784:5:9"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 756,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2784:5:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 756,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2797:5:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 788,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2804:4:9",
                            "valueSize": 1
                          }
                        ],
                        "id": 795,
                        "nodeType": "InlineAssembly",
                        "src": "2761:58:9"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "3007:63:9",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3021:39:9",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3041:1:9",
                                            "type": "",
                                            "value": "0"
                                          },
                                          {
                                            "name": "twos",
                                            "nodeType": "YulIdentifier",
                                            "src": "3044:4:9"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "3037:3:9"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3037:12:9"
                                      },
                                      {
                                        "name": "twos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3051:4:9"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nodeType": "YulIdentifier",
                                      "src": "3033:3:9"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3033:23:9"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3058:1:9",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3029:3:9"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3029:31:9"
                              },
                              "variableNames": [
                                {
                                  "name": "twos",
                                  "nodeType": "YulIdentifier",
                                  "src": "3021:4:9"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 788,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3021:4:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 788,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3044:4:9",
                            "valueSize": 1
                          },
                          {
                            "declaration": 788,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3051:4:9",
                            "valueSize": 1
                          }
                        ],
                        "id": 796,
                        "nodeType": "InlineAssembly",
                        "src": "2998:72:9"
                      },
                      {
                        "expression": {
                          "id": 801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 797,
                            "name": "prod0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 756,
                            "src": "3079:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 800,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 798,
                              "name": "prod1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 759,
                              "src": "3088:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 799,
                              "name": "twos",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 788,
                              "src": "3096:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3088:12:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3079:21:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 802,
                        "nodeType": "ExpressionStatement",
                        "src": "3079:21:9"
                      },
                      {
                        "assignments": [
                          804
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 804,
                            "mutability": "mutable",
                            "name": "inv",
                            "nodeType": "VariableDeclaration",
                            "scope": 868,
                            "src": "3434:11:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 803,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3434:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 811,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 810,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 807,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "33",
                                  "id": 805,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3449:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  },
                                  "value": "3"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 806,
                                  "name": "denominator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 750,
                                  "src": "3453:11:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3449:15:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 808,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "3448:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "^",
                          "rightExpression": {
                            "hexValue": "32",
                            "id": 809,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3468:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "3448:21:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3434:35:9"
                      },
                      {
                        "expression": {
                          "id": 818,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 812,
                            "name": "inv",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 804,
                            "src": "3684:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "*=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 817,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "32",
                              "id": 813,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3691:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 816,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 814,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "3695:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 815,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "3709:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3695:17:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3691:21:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3684:28:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 819,
                        "nodeType": "ExpressionStatement",
                        "src": "3684:28:9"
                      },
                      {
                        "expression": {
                          "id": 826,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 820,
                            "name": "inv",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 804,
                            "src": "3742:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "*=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 825,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "32",
                              "id": 821,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3749:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 824,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 822,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "3753:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 823,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "3767:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3753:17:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3749:21:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3742:28:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 827,
                        "nodeType": "ExpressionStatement",
                        "src": "3742:28:9"
                      },
                      {
                        "expression": {
                          "id": 834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 828,
                            "name": "inv",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 804,
                            "src": "3801:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "*=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 833,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "32",
                              "id": 829,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3808:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 832,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 830,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "3812:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 831,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "3826:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3812:17:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3808:21:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3801:28:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 835,
                        "nodeType": "ExpressionStatement",
                        "src": "3801:28:9"
                      },
                      {
                        "expression": {
                          "id": 842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 836,
                            "name": "inv",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 804,
                            "src": "3860:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "*=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 841,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "32",
                              "id": 837,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3867:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 840,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 838,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "3871:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 839,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "3885:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3871:17:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3867:21:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3860:28:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 843,
                        "nodeType": "ExpressionStatement",
                        "src": "3860:28:9"
                      },
                      {
                        "expression": {
                          "id": 850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 844,
                            "name": "inv",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 804,
                            "src": "3919:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "*=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 849,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "32",
                              "id": 845,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3926:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 848,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 846,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "3930:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 847,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "3944:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3930:17:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3926:21:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3919:28:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 851,
                        "nodeType": "ExpressionStatement",
                        "src": "3919:28:9"
                      },
                      {
                        "expression": {
                          "id": 858,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 852,
                            "name": "inv",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 804,
                            "src": "3979:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "*=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 857,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "32",
                              "id": 853,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3986:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 856,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 854,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "3990:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 855,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "4004:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3990:17:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3986:21:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3979:28:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 859,
                        "nodeType": "ExpressionStatement",
                        "src": "3979:28:9"
                      },
                      {
                        "expression": {
                          "id": 864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 860,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 753,
                            "src": "4445:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 863,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 861,
                              "name": "prod0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 756,
                              "src": "4454:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 862,
                              "name": "inv",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 804,
                              "src": "4462:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4454:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4445:20:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 865,
                        "nodeType": "ExpressionStatement",
                        "src": "4445:20:9"
                      },
                      {
                        "expression": {
                          "id": 866,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 753,
                          "src": "4482:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 754,
                        "id": 867,
                        "nodeType": "Return",
                        "src": "4475:13:9"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 744,
                    "nodeType": "StructuredDocumentation",
                    "src": "385:359:9",
                    "text": "@notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @param a The multiplicand\n @param b The multiplier\n @param denominator The divisor\n @return result The 256-bit result\n @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv"
                  },
                  "id": 869,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDiv",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 751,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 746,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 869,
                        "src": "765:9:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 745,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "765:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 748,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 869,
                        "src": "776:9:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 747,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "776:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 750,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nodeType": "VariableDeclaration",
                        "scope": 869,
                        "src": "787:19:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 749,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "787:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "764:43:9"
                  },
                  "returnParameters": {
                    "id": 754,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 753,
                        "mutability": "mutable",
                        "name": "result",
                        "nodeType": "VariableDeclaration",
                        "scope": 869,
                        "src": "831:14:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 752,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "831:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "830:16:9"
                  },
                  "scope": 913,
                  "src": "749:3746:9",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 911,
                    "nodeType": "Block",
                    "src": "4885:177:9",
                    "statements": [
                      {
                        "expression": {
                          "id": 887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 881,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 879,
                            "src": "4895:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 883,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 872,
                                "src": "4911:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 884,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 874,
                                "src": "4914:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 885,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 876,
                                "src": "4917:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 882,
                              "name": "mulDiv",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 869,
                              "src": "4904:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 886,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4904:25:9",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4895:34:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 888,
                        "nodeType": "ExpressionStatement",
                        "src": "4895:34:9"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 895,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 890,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 872,
                                "src": "4950:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 891,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 874,
                                "src": "4953:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 892,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 876,
                                "src": "4956:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 889,
                              "name": "mulmod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -16,
                              "src": "4943:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 893,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4943:25:9",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 894,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4971:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4943:29:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 910,
                        "nodeType": "IfStatement",
                        "src": "4939:117:9",
                        "trueBody": {
                          "id": 909,
                          "nodeType": "Block",
                          "src": "4974:82:9",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 903,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 897,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 879,
                                      "src": "4996:6:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 900,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "5010:7:9",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_uint256_$",
                                              "typeString": "type(uint256)"
                                            },
                                            "typeName": {
                                              "id": 899,
                                              "name": "uint256",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "5010:7:9",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_type$_t_uint256_$",
                                              "typeString": "type(uint256)"
                                            }
                                          ],
                                          "id": 898,
                                          "name": "type",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -27,
                                          "src": "5005:4:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                            "typeString": "function () pure"
                                          }
                                        },
                                        "id": 901,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5005:13:9",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_meta_type_t_uint256",
                                          "typeString": "type(uint256)"
                                        }
                                      },
                                      "id": 902,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "max",
                                      "nodeType": "MemberAccess",
                                      "src": "5005:17:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "4996:26:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 896,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "4988:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 904,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4988:35:9",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 905,
                              "nodeType": "ExpressionStatement",
                              "src": "4988:35:9"
                            },
                            {
                              "expression": {
                                "id": 907,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "5037:8:9",
                                "subExpression": {
                                  "id": 906,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 879,
                                  "src": "5037:6:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 908,
                              "nodeType": "ExpressionStatement",
                              "src": "5037:8:9"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 870,
                    "nodeType": "StructuredDocumentation",
                    "src": "4501:271:9",
                    "text": "@notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @param a The multiplicand\n @param b The multiplier\n @param denominator The divisor\n @return result The 256-bit result"
                  },
                  "id": 912,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDivRoundingUp",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 877,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 872,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "4803:9:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 871,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4803:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 874,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "4814:9:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 873,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4814:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 876,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "4825:19:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 875,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4825:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4802:43:9"
                  },
                  "returnParameters": {
                    "id": 880,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 879,
                        "mutability": "mutable",
                        "name": "result",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "4869:14:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 878,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4869:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4868:16:9"
                  },
                  "scope": 913,
                  "src": "4777:285:9",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 914,
              "src": "362:4702:9"
            }
          ],
          "src": "32:5033:9"
        },
        "id": 9
      },
      "@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol",
          "exportedSymbols": {
            "LowGasSafeMath": [
              1043
            ]
          },
          "id": 1044,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 915,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:10"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 916,
                "nodeType": "StructuredDocumentation",
                "src": "71:178:10",
                "text": "@title Optimized overflow and underflow safe math operations\n @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost"
              },
              "fullyImplemented": true,
              "id": 1043,
              "linearizedBaseContracts": [
                1043
              ],
              "name": "LowGasSafeMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 937,
                    "nodeType": "Block",
                    "src": "504:42:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "id": 931,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 927,
                                      "name": "z",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 924,
                                      "src": "523:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 930,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 928,
                                        "name": "x",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 919,
                                        "src": "527:1:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "id": 929,
                                        "name": "y",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 921,
                                        "src": "531:1:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "527:5:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "523:9:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 932,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "522:11:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 933,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 919,
                                "src": "537:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "522:16:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 926,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "514:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "514:25:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 936,
                        "nodeType": "ExpressionStatement",
                        "src": "514:25:10"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 917,
                    "nodeType": "StructuredDocumentation",
                    "src": "278:152:10",
                    "text": "@notice Returns x + y, reverts if sum overflows uint256\n @param x The augend\n @param y The addend\n @return z The sum of x and y"
                  },
                  "id": 938,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 922,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 919,
                        "mutability": "mutable",
                        "name": "x",
                        "nodeType": "VariableDeclaration",
                        "scope": 938,
                        "src": "448:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 918,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "448:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 921,
                        "mutability": "mutable",
                        "name": "y",
                        "nodeType": "VariableDeclaration",
                        "scope": 938,
                        "src": "459:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 920,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "459:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "447:22:10"
                  },
                  "returnParameters": {
                    "id": 925,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 924,
                        "mutability": "mutable",
                        "name": "z",
                        "nodeType": "VariableDeclaration",
                        "scope": 938,
                        "src": "493:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 923,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "493:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "492:11:10"
                  },
                  "scope": 1043,
                  "src": "435:111:10",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 959,
                    "nodeType": "Block",
                    "src": "779:42:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 956,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "id": 953,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 949,
                                      "name": "z",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 946,
                                      "src": "798:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 952,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 950,
                                        "name": "x",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 941,
                                        "src": "802:1:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "id": 951,
                                        "name": "y",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 943,
                                        "src": "806:1:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "802:5:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "798:9:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 954,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "797:11:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 955,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 941,
                                "src": "812:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "797:16:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 948,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "789:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "789:25:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 958,
                        "nodeType": "ExpressionStatement",
                        "src": "789:25:10"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 939,
                    "nodeType": "StructuredDocumentation",
                    "src": "552:153:10",
                    "text": "@notice Returns x - y, reverts if underflows\n @param x The minuend\n @param y The subtrahend\n @return z The difference of x and y"
                  },
                  "id": 960,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 944,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 941,
                        "mutability": "mutable",
                        "name": "x",
                        "nodeType": "VariableDeclaration",
                        "scope": 960,
                        "src": "723:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 940,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "723:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 943,
                        "mutability": "mutable",
                        "name": "y",
                        "nodeType": "VariableDeclaration",
                        "scope": 960,
                        "src": "734:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 942,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "734:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "722:22:10"
                  },
                  "returnParameters": {
                    "id": 947,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 946,
                        "mutability": "mutable",
                        "name": "z",
                        "nodeType": "VariableDeclaration",
                        "scope": 960,
                        "src": "768:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 945,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "768:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "767:11:10"
                  },
                  "scope": 1043,
                  "src": "710:111:10",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 987,
                    "nodeType": "Block",
                    "src": "1055:56:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 984,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 973,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 971,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 963,
                                  "src": "1073:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 972,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1078:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "1073:6:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 983,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 981,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "id": 978,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "id": 974,
                                          "name": "z",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 968,
                                          "src": "1084:1:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 977,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 975,
                                            "name": "x",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 963,
                                            "src": "1088:1:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "id": 976,
                                            "name": "y",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 965,
                                            "src": "1092:1:10",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "1088:5:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "1084:9:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 979,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "1083:11:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "id": 980,
                                    "name": "x",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 963,
                                    "src": "1097:1:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1083:15:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 982,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 965,
                                  "src": "1102:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1083:20:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1073:30:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 970,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1065:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 985,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1065:39:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 986,
                        "nodeType": "ExpressionStatement",
                        "src": "1065:39:10"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 961,
                    "nodeType": "StructuredDocumentation",
                    "src": "827:154:10",
                    "text": "@notice Returns x * y, reverts if overflows\n @param x The multiplicand\n @param y The multiplier\n @return z The product of x and y"
                  },
                  "id": 988,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 966,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 963,
                        "mutability": "mutable",
                        "name": "x",
                        "nodeType": "VariableDeclaration",
                        "scope": 988,
                        "src": "999:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 962,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "999:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 965,
                        "mutability": "mutable",
                        "name": "y",
                        "nodeType": "VariableDeclaration",
                        "scope": 988,
                        "src": "1010:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 964,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1010:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "998:22:10"
                  },
                  "returnParameters": {
                    "id": 969,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 968,
                        "mutability": "mutable",
                        "name": "z",
                        "nodeType": "VariableDeclaration",
                        "scope": 988,
                        "src": "1044:9:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 967,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1044:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1043:11:10"
                  },
                  "scope": 1043,
                  "src": "986:125:10",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1014,
                    "nodeType": "Block",
                    "src": "1342:54:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1011,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 1006,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "id": 1003,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 999,
                                        "name": "z",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 996,
                                        "src": "1361:1:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "commonType": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        },
                                        "id": 1002,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 1000,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 991,
                                          "src": "1365:1:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 1001,
                                          "name": "y",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 993,
                                          "src": "1369:1:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        "src": "1365:5:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "1361:9:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "id": 1004,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1360:11:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "id": 1005,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 991,
                                  "src": "1375:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "1360:16:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 1009,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1007,
                                      "name": "y",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 993,
                                      "src": "1381:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">=",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 1008,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1386:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1381:6:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 1010,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1380:8:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1360:28:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 998,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1352:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1352:37:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1013,
                        "nodeType": "ExpressionStatement",
                        "src": "1352:37:10"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 989,
                    "nodeType": "StructuredDocumentation",
                    "src": "1117:154:10",
                    "text": "@notice Returns x + y, reverts if overflows or underflows\n @param x The augend\n @param y The addend\n @return z The sum of x and y"
                  },
                  "id": 1015,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 994,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 991,
                        "mutability": "mutable",
                        "name": "x",
                        "nodeType": "VariableDeclaration",
                        "scope": 1015,
                        "src": "1289:8:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 990,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1289:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 993,
                        "mutability": "mutable",
                        "name": "y",
                        "nodeType": "VariableDeclaration",
                        "scope": 1015,
                        "src": "1299:8:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 992,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1299:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1288:20:10"
                  },
                  "returnParameters": {
                    "id": 997,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 996,
                        "mutability": "mutable",
                        "name": "z",
                        "nodeType": "VariableDeclaration",
                        "scope": 1015,
                        "src": "1332:8:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 995,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1332:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1331:10:10"
                  },
                  "scope": 1043,
                  "src": "1276:120:10",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1041,
                    "nodeType": "Block",
                    "src": "1639:54:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1038,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 1033,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "id": 1030,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 1026,
                                        "name": "z",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1023,
                                        "src": "1658:1:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "commonType": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        },
                                        "id": 1029,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 1027,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1018,
                                          "src": "1662:1:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "id": 1028,
                                          "name": "y",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1020,
                                          "src": "1666:1:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        "src": "1662:5:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "1658:9:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "id": 1031,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1657:11:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "id": 1032,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1018,
                                  "src": "1672:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "1657:16:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 1036,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1034,
                                      "name": "y",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1020,
                                      "src": "1678:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">=",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 1035,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1683:1:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1678:6:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 1037,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1677:8:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1657:28:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1025,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1649:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1649:37:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1040,
                        "nodeType": "ExpressionStatement",
                        "src": "1649:37:10"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1016,
                    "nodeType": "StructuredDocumentation",
                    "src": "1402:166:10",
                    "text": "@notice Returns x - y, reverts if overflows or underflows\n @param x The minuend\n @param y The subtrahend\n @return z The difference of x and y"
                  },
                  "id": 1042,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1021,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1018,
                        "mutability": "mutable",
                        "name": "x",
                        "nodeType": "VariableDeclaration",
                        "scope": 1042,
                        "src": "1586:8:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1017,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1586:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1020,
                        "mutability": "mutable",
                        "name": "y",
                        "nodeType": "VariableDeclaration",
                        "scope": 1042,
                        "src": "1596:8:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1019,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1596:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1585:20:10"
                  },
                  "returnParameters": {
                    "id": 1024,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1023,
                        "mutability": "mutable",
                        "name": "z",
                        "nodeType": "VariableDeclaration",
                        "scope": 1042,
                        "src": "1629:8:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1022,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1629:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1628:10:10"
                  },
                  "scope": 1043,
                  "src": "1573:120:10",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1044,
              "src": "249:1446:10"
            }
          ],
          "src": "45:1651:10"
        },
        "id": 10
      },
      "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol",
          "exportedSymbols": {
            "SafeCast": [
              1113
            ]
          },
          "id": 1114,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1045,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:11"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1046,
                "nodeType": "StructuredDocumentation",
                "src": "71:94:11",
                "text": "@title Safe casting methods\n @notice Contains methods for safely casting between types"
              },
              "fullyImplemented": true,
              "id": 1113,
              "linearizedBaseContracts": [
                1113
              ],
              "name": "SafeCast",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1066,
                    "nodeType": "Block",
                    "src": "421:47:11",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1063,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "id": 1060,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 1055,
                                      "name": "z",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1052,
                                      "src": "440:1:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "id": 1058,
                                          "name": "y",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1049,
                                          "src": "452:1:11",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 1057,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "444:7:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        },
                                        "typeName": {
                                          "id": 1056,
                                          "name": "uint160",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "444:7:11",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 1059,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "444:10:11",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "src": "440:14:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  }
                                ],
                                "id": 1061,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "439:16:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 1062,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1049,
                                "src": "459:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "439:21:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1054,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "431:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "431:30:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1065,
                        "nodeType": "ExpressionStatement",
                        "src": "431:30:11"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1047,
                    "nodeType": "StructuredDocumentation",
                    "src": "188:164:11",
                    "text": "@notice Cast a uint256 to a uint160, revert on overflow\n @param y The uint256 to be downcasted\n @return z The downcasted integer, now type uint160"
                  },
                  "id": 1067,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint160",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1050,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1049,
                        "mutability": "mutable",
                        "name": "y",
                        "nodeType": "VariableDeclaration",
                        "scope": 1067,
                        "src": "376:9:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1048,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "376:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "375:11:11"
                  },
                  "returnParameters": {
                    "id": 1053,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1052,
                        "mutability": "mutable",
                        "name": "z",
                        "nodeType": "VariableDeclaration",
                        "scope": 1067,
                        "src": "410:9:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 1051,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "410:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "409:11:11"
                  },
                  "scope": 1113,
                  "src": "357:111:11",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1087,
                    "nodeType": "Block",
                    "src": "713:46:11",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 1084,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "id": 1081,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 1076,
                                      "name": "z",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1073,
                                      "src": "732:1:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int128",
                                        "typeString": "int128"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "id": 1079,
                                          "name": "y",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1070,
                                          "src": "743:1:11",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        ],
                                        "id": 1078,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "736:6:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_int128_$",
                                          "typeString": "type(int128)"
                                        },
                                        "typeName": {
                                          "id": 1077,
                                          "name": "int128",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "736:6:11",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 1080,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "736:9:11",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int128",
                                        "typeString": "int128"
                                      }
                                    },
                                    "src": "732:13:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int128",
                                      "typeString": "int128"
                                    }
                                  }
                                ],
                                "id": 1082,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "731:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int128",
                                  "typeString": "int128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 1083,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1070,
                                "src": "750:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "src": "731:20:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1075,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "723:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "723:29:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1086,
                        "nodeType": "ExpressionStatement",
                        "src": "723:29:11"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1068,
                    "nodeType": "StructuredDocumentation",
                    "src": "474:173:11",
                    "text": "@notice Cast a int256 to a int128, revert on overflow or underflow\n @param y The int256 to be downcasted\n @return z The downcasted integer, now type int128"
                  },
                  "id": 1088,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt128",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1071,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1070,
                        "mutability": "mutable",
                        "name": "y",
                        "nodeType": "VariableDeclaration",
                        "scope": 1088,
                        "src": "670:8:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1069,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "670:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "669:10:11"
                  },
                  "returnParameters": {
                    "id": 1074,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1073,
                        "mutability": "mutable",
                        "name": "z",
                        "nodeType": "VariableDeclaration",
                        "scope": 1088,
                        "src": "703:8:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int128",
                          "typeString": "int128"
                        },
                        "typeName": {
                          "id": 1072,
                          "name": "int128",
                          "nodeType": "ElementaryTypeName",
                          "src": "703:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int128",
                            "typeString": "int128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "702:10:11"
                  },
                  "scope": 1113,
                  "src": "652:107:11",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1111,
                    "nodeType": "Block",
                    "src": "986:61:11",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1097,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1091,
                                "src": "1004:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                                  "typeString": "int_const 5789...(69 digits omitted)...9968"
                                },
                                "id": 1100,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 1098,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1008:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "323535",
                                  "id": 1099,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1013:3:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_255_by_1",
                                    "typeString": "int_const 255"
                                  },
                                  "value": "255"
                                },
                                "src": "1008:8:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                                  "typeString": "int_const 5789...(69 digits omitted)...9968"
                                }
                              },
                              "src": "1004:12:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1096,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "996:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "996:21:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1103,
                        "nodeType": "ExpressionStatement",
                        "src": "996:21:11"
                      },
                      {
                        "expression": {
                          "id": 1109,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1104,
                            "name": "z",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1094,
                            "src": "1027:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 1107,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1091,
                                "src": "1038:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1106,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1031:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int256_$",
                                "typeString": "type(int256)"
                              },
                              "typeName": {
                                "id": 1105,
                                "name": "int256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1031:6:11",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1108,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1031:9:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "1027:13:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1110,
                        "nodeType": "ExpressionStatement",
                        "src": "1027:13:11"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1089,
                    "nodeType": "StructuredDocumentation",
                    "src": "765:154:11",
                    "text": "@notice Cast a uint256 to a int256, revert on overflow\n @param y The uint256 to be casted\n @return z The casted integer, now type int256"
                  },
                  "id": 1112,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt256",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1092,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1091,
                        "mutability": "mutable",
                        "name": "y",
                        "nodeType": "VariableDeclaration",
                        "scope": 1112,
                        "src": "942:9:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1090,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "942:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "941:11:11"
                  },
                  "returnParameters": {
                    "id": 1095,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1094,
                        "mutability": "mutable",
                        "name": "z",
                        "nodeType": "VariableDeclaration",
                        "scope": 1112,
                        "src": "976:8:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1093,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "976:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "975:10:11"
                  },
                  "scope": 1113,
                  "src": "924:123:11",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1114,
              "src": "165:884:11"
            }
          ],
          "src": "45:1005:11"
        },
        "id": 11
      },
      "@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol",
          "exportedSymbols": {
            "BitMath": [
              740
            ],
            "TickBitmap": [
              1369
            ]
          },
          "id": 1370,
          "license": "BUSL-1.1",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1115,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "37:24:12"
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/BitMath.sol",
              "file": "./BitMath.sol",
              "id": 1116,
              "nodeType": "ImportDirective",
              "scope": 1370,
              "sourceUnit": 741,
              "src": "63:23:12",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1117,
                "nodeType": "StructuredDocumentation",
                "src": "88:243:12",
                "text": "@title Packed tick initialized state library\n @notice Stores a packed mapping of tick index to its initialized state\n @dev The mapping uses int16 for keys since ticks are represented as int24 and there are 256 (2^8) values per word."
              },
              "fullyImplemented": true,
              "id": 1369,
              "linearizedBaseContracts": [
                1369
              ],
              "name": "TickBitmap",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1145,
                    "nodeType": "Block",
                    "src": "767:79:12",
                    "statements": [
                      {
                        "expression": {
                          "id": 1134,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1127,
                            "name": "wordPos",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1123,
                            "src": "777:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                "id": 1132,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1130,
                                  "name": "tick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1120,
                                  "src": "793:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "38",
                                  "id": 1131,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "801:1:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "793:9:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              ],
                              "id": 1129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "787:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int16_$",
                                "typeString": "type(int16)"
                              },
                              "typeName": {
                                "id": 1128,
                                "name": "int16",
                                "nodeType": "ElementaryTypeName",
                                "src": "787:5:12",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1133,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "787:16:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "src": "777:26:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int16",
                            "typeString": "int16"
                          }
                        },
                        "id": 1135,
                        "nodeType": "ExpressionStatement",
                        "src": "777:26:12"
                      },
                      {
                        "expression": {
                          "id": 1143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1136,
                            "name": "bitPos",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1125,
                            "src": "813:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                "id": 1141,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1139,
                                  "name": "tick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1120,
                                  "src": "828:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "%",
                                "rightExpression": {
                                  "hexValue": "323536",
                                  "id": 1140,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "835:3:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_256_by_1",
                                    "typeString": "int_const 256"
                                  },
                                  "value": "256"
                                },
                                "src": "828:10:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              ],
                              "id": 1138,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "822:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint8_$",
                                "typeString": "type(uint8)"
                              },
                              "typeName": {
                                "id": 1137,
                                "name": "uint8",
                                "nodeType": "ElementaryTypeName",
                                "src": "822:5:12",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1142,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "822:17:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "813:26:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 1144,
                        "nodeType": "ExpressionStatement",
                        "src": "813:26:12"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1118,
                    "nodeType": "StructuredDocumentation",
                    "src": "356:325:12",
                    "text": "@notice Computes the position in the mapping where the initialized bit for a tick lives\n @param tick The tick for which to compute the position\n @return wordPos The key in the mapping containing the word in which the bit is stored\n @return bitPos The bit position in the word where the flag is stored"
                  },
                  "id": 1146,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "position",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1121,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1120,
                        "mutability": "mutable",
                        "name": "tick",
                        "nodeType": "VariableDeclaration",
                        "scope": 1146,
                        "src": "704:10:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 1119,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "704:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "703:12:12"
                  },
                  "returnParameters": {
                    "id": 1126,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1123,
                        "mutability": "mutable",
                        "name": "wordPos",
                        "nodeType": "VariableDeclaration",
                        "scope": 1146,
                        "src": "738:13:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int16",
                          "typeString": "int16"
                        },
                        "typeName": {
                          "id": 1122,
                          "name": "int16",
                          "nodeType": "ElementaryTypeName",
                          "src": "738:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int16",
                            "typeString": "int16"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1125,
                        "mutability": "mutable",
                        "name": "bitPos",
                        "nodeType": "VariableDeclaration",
                        "scope": 1146,
                        "src": "753:12:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 1124,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "753:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "737:29:12"
                  },
                  "scope": 1369,
                  "src": "686:160:12",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1188,
                    "nodeType": "Block",
                    "src": "1200:220:12",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              },
                              "id": 1163,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                "id": 1161,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1159,
                                  "name": "tick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1153,
                                  "src": "1218:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "%",
                                "rightExpression": {
                                  "id": 1160,
                                  "name": "tickSpacing",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1155,
                                  "src": "1225:11:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "src": "1218:18:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1162,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1240:1:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1218:23:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1158,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1210:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1164,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1210:32:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1165,
                        "nodeType": "ExpressionStatement",
                        "src": "1210:32:12"
                      },
                      {
                        "assignments": [
                          1167,
                          1169
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1167,
                            "mutability": "mutable",
                            "name": "wordPos",
                            "nodeType": "VariableDeclaration",
                            "scope": 1188,
                            "src": "1287:13:12",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            },
                            "typeName": {
                              "id": 1166,
                              "name": "int16",
                              "nodeType": "ElementaryTypeName",
                              "src": "1287:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int16",
                                "typeString": "int16"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 1169,
                            "mutability": "mutable",
                            "name": "bitPos",
                            "nodeType": "VariableDeclaration",
                            "scope": 1188,
                            "src": "1302:12:12",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 1168,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "1302:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1175,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              },
                              "id": 1173,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1171,
                                "name": "tick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1153,
                                "src": "1327:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "id": 1172,
                                "name": "tickSpacing",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1155,
                                "src": "1334:11:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "src": "1327:18:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            ],
                            "id": 1170,
                            "name": "position",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1146,
                            "src": "1318:8:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_int16_$_t_uint8_$",
                              "typeString": "function (int24) pure returns (int16,uint8)"
                            }
                          },
                          "id": 1174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1318:28:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int16_$_t_uint8_$",
                            "typeString": "tuple(int16,uint8)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1286:60:12"
                      },
                      {
                        "assignments": [
                          1177
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1177,
                            "mutability": "mutable",
                            "name": "mask",
                            "nodeType": "VariableDeclaration",
                            "scope": 1188,
                            "src": "1356:12:12",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1176,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1356:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1181,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "31",
                            "id": 1178,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1371:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "id": 1179,
                            "name": "bitPos",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1169,
                            "src": "1376:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "1371:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1356:26:12"
                      },
                      {
                        "expression": {
                          "id": 1186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1182,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1151,
                              "src": "1392:4:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_int16_$_t_uint256_$",
                                "typeString": "mapping(int16 => uint256)"
                              }
                            },
                            "id": 1184,
                            "indexExpression": {
                              "id": 1183,
                              "name": "wordPos",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1167,
                              "src": "1397:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int16",
                                "typeString": "int16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1392:13:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "^=",
                          "rightHandSide": {
                            "id": 1185,
                            "name": "mask",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1177,
                            "src": "1409:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1392:21:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1187,
                        "nodeType": "ExpressionStatement",
                        "src": "1392:21:12"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1147,
                    "nodeType": "StructuredDocumentation",
                    "src": "852:245:12",
                    "text": "@notice Flips the initialized state for a given tick from false to true, or vice versa\n @param self The mapping in which to flip the tick\n @param tick The tick to flip\n @param tickSpacing The spacing between usable ticks"
                  },
                  "id": 1189,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "flipTick",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1156,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1151,
                        "mutability": "mutable",
                        "name": "self",
                        "nodeType": "VariableDeclaration",
                        "scope": 1189,
                        "src": "1120:38:12",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_int16_$_t_uint256_$",
                          "typeString": "mapping(int16 => uint256)"
                        },
                        "typeName": {
                          "id": 1150,
                          "keyType": {
                            "id": 1148,
                            "name": "int16",
                            "nodeType": "ElementaryTypeName",
                            "src": "1128:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "nodeType": "Mapping",
                          "src": "1120:25:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_int16_$_t_uint256_$",
                            "typeString": "mapping(int16 => uint256)"
                          },
                          "valueType": {
                            "id": 1149,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1137:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1153,
                        "mutability": "mutable",
                        "name": "tick",
                        "nodeType": "VariableDeclaration",
                        "scope": 1189,
                        "src": "1160:10:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 1152,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1160:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1155,
                        "mutability": "mutable",
                        "name": "tickSpacing",
                        "nodeType": "VariableDeclaration",
                        "scope": 1189,
                        "src": "1172:17:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 1154,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1172:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1119:71:12"
                  },
                  "returnParameters": {
                    "id": 1157,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1200:0:12"
                  },
                  "scope": 1369,
                  "src": "1102:318:12",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1367,
                    "nodeType": "Block",
                    "src": "2372:1707:12",
                    "statements": [
                      {
                        "assignments": [
                          1208
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1208,
                            "mutability": "mutable",
                            "name": "compressed",
                            "nodeType": "VariableDeclaration",
                            "scope": 1367,
                            "src": "2382:16:12",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 1207,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "2382:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1212,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          },
                          "id": 1211,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1209,
                            "name": "tick",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1196,
                            "src": "2401:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "id": 1210,
                            "name": "tickSpacing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1198,
                            "src": "2408:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "2401:18:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2382:37:12"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1221,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "id": 1215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1213,
                              "name": "tick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1196,
                              "src": "2433:4:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 1214,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2440:1:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "2433:8:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "id": 1220,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              },
                              "id": 1218,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1216,
                                "name": "tick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1196,
                                "src": "2445:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "%",
                              "rightExpression": {
                                "id": 1217,
                                "name": "tickSpacing",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1198,
                                "src": "2452:11:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "src": "2445:18:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 1219,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2467:1:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "2445:23:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "2433:35:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1225,
                        "nodeType": "IfStatement",
                        "src": "2429:53:12",
                        "trueBody": {
                          "expression": {
                            "id": 1223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": false,
                            "src": "2470:12:12",
                            "subExpression": {
                              "id": 1222,
                              "name": "compressed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1208,
                              "src": "2470:10:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "id": 1224,
                          "nodeType": "ExpressionStatement",
                          "src": "2470:12:12"
                        }
                      },
                      {
                        "condition": {
                          "id": 1226,
                          "name": "lte",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1200,
                          "src": "2532:3:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1365,
                          "nodeType": "Block",
                          "src": "3259:814:12",
                          "statements": [
                            {
                              "assignments": [
                                1293,
                                1295
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1293,
                                  "mutability": "mutable",
                                  "name": "wordPos",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1365,
                                  "src": "3371:13:12",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int16",
                                    "typeString": "int16"
                                  },
                                  "typeName": {
                                    "id": 1292,
                                    "name": "int16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3371:5:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int16",
                                      "typeString": "int16"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 1295,
                                  "mutability": "mutable",
                                  "name": "bitPos",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1365,
                                  "src": "3386:12:12",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "typeName": {
                                    "id": 1294,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3386:5:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1301,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    },
                                    "id": 1299,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1297,
                                      "name": "compressed",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1208,
                                      "src": "3411:10:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 1298,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3424:1:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "3411:14:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  ],
                                  "id": 1296,
                                  "name": "position",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1146,
                                  "src": "3402:8:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_int16_$_t_uint8_$",
                                    "typeString": "function (int24) pure returns (int16,uint8)"
                                  }
                                },
                                "id": 1300,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3402:24:12",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_int16_$_t_uint8_$",
                                  "typeString": "tuple(int16,uint8)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3370:56:12"
                            },
                            {
                              "assignments": [
                                1303
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1303,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1365,
                                  "src": "3498:12:12",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1302,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3498:7:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1312,
                              "initialValue": {
                                "id": 1311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "~",
                                "prefix": true,
                                "src": "3513:20:12",
                                "subExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1309,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "components": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 1306,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "hexValue": "31",
                                              "id": 1304,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3516:1:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "<<",
                                            "rightExpression": {
                                              "id": 1305,
                                              "name": "bitPos",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1295,
                                              "src": "3521:6:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                              }
                                            },
                                            "src": "3516:11:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 1307,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "3515:13:12",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 1308,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3531:1:12",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "3515:17:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1310,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "3514:19:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3498:35:12"
                            },
                            {
                              "assignments": [
                                1314
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1314,
                                  "mutability": "mutable",
                                  "name": "masked",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1365,
                                  "src": "3547:14:12",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1313,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3547:7:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1320,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1319,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "baseExpression": {
                                    "id": 1315,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1194,
                                    "src": "3564:4:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_int16_$_t_uint256_$",
                                      "typeString": "mapping(int16 => uint256)"
                                    }
                                  },
                                  "id": 1317,
                                  "indexExpression": {
                                    "id": 1316,
                                    "name": "wordPos",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1293,
                                    "src": "3569:7:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int16",
                                      "typeString": "int16"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3564:13:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "id": 1318,
                                  "name": "mask",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1303,
                                  "src": "3580:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3564:20:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3547:37:12"
                            },
                            {
                              "expression": {
                                "id": 1325,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 1321,
                                  "name": "initialized",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1205,
                                  "src": "3709:11:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1324,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1322,
                                    "name": "masked",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1314,
                                    "src": "3723:6:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "!=",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 1323,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3733:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "3723:11:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "3709:25:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1326,
                              "nodeType": "ExpressionStatement",
                              "src": "3709:25:12"
                            },
                            {
                              "expression": {
                                "id": 1363,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 1327,
                                  "name": "next",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1203,
                                  "src": "3858:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "condition": {
                                    "id": 1328,
                                    "name": "initialized",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1205,
                                    "src": "3865:11:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    },
                                    "id": 1361,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          },
                                          "id": 1358,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "commonType": {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            },
                                            "id": 1347,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 1345,
                                              "name": "compressed",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1208,
                                              "src": "3999:10:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int24",
                                                "typeString": "int24"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                              "hexValue": "31",
                                              "id": 1346,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4012:1:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "src": "3999:14:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "+",
                                          "rightExpression": {
                                            "arguments": [
                                              {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                },
                                                "id": 1356,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "expression": {
                                                    "arguments": [
                                                      {
                                                        "id": 1352,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "4027:5:12",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_uint8_$",
                                                          "typeString": "type(uint8)"
                                                        },
                                                        "typeName": {
                                                          "id": 1351,
                                                          "name": "uint8",
                                                          "nodeType": "ElementaryTypeName",
                                                          "src": "4027:5:12",
                                                          "typeDescriptions": {}
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_type$_t_uint8_$",
                                                          "typeString": "type(uint8)"
                                                        }
                                                      ],
                                                      "id": 1350,
                                                      "name": "type",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": -27,
                                                      "src": "4022:4:12",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                        "typeString": "function () pure"
                                                      }
                                                    },
                                                    "id": 1353,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4022:11:12",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_magic_meta_type_t_uint8",
                                                      "typeString": "type(uint8)"
                                                    }
                                                  },
                                                  "id": 1354,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "memberName": "max",
                                                  "nodeType": "MemberAccess",
                                                  "src": "4022:15:12",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "-",
                                                "rightExpression": {
                                                  "id": 1355,
                                                  "name": "bitPos",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1295,
                                                  "src": "4040:6:12",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  }
                                                },
                                                "src": "4022:24:12",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              ],
                                              "id": 1349,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "4016:5:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_int24_$",
                                                "typeString": "type(int24)"
                                              },
                                              "typeName": {
                                                "id": 1348,
                                                "name": "int24",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4016:5:12",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 1357,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4016:31:12",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            }
                                          },
                                          "src": "3999:48:12",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        }
                                      ],
                                      "id": 1359,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "3998:50:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 1360,
                                      "name": "tickSpacing",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1198,
                                      "src": "4051:11:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    "src": "3998:64:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  "id": 1362,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "3865:197:12",
                                  "trueExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    },
                                    "id": 1344,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          },
                                          "id": 1341,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "commonType": {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            },
                                            "id": 1331,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 1329,
                                              "name": "compressed",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1208,
                                              "src": "3896:10:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int24",
                                                "typeString": "int24"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                              "hexValue": "31",
                                              "id": 1330,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3909:1:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "src": "3896:14:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "+",
                                          "rightExpression": {
                                            "arguments": [
                                              {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                },
                                                "id": 1339,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "arguments": [
                                                    {
                                                      "id": 1336,
                                                      "name": "masked",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 1314,
                                                      "src": "3947:6:12",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    ],
                                                    "expression": {
                                                      "id": 1334,
                                                      "name": "BitMath",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 740,
                                                      "src": "3919:7:12",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_BitMath_$740_$",
                                                        "typeString": "type(library BitMath)"
                                                      }
                                                    },
                                                    "id": 1335,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "leastSignificantBit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 739,
                                                    "src": "3919:27:12",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                                      "typeString": "function (uint256) pure returns (uint8)"
                                                    }
                                                  },
                                                  "id": 1337,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "3919:35:12",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "-",
                                                "rightExpression": {
                                                  "id": 1338,
                                                  "name": "bitPos",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1295,
                                                  "src": "3957:6:12",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  }
                                                },
                                                "src": "3919:44:12",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              ],
                                              "id": 1333,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "3913:5:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_int24_$",
                                                "typeString": "type(int24)"
                                              },
                                              "typeName": {
                                                "id": 1332,
                                                "name": "int24",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3913:5:12",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 1340,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3913:51:12",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            }
                                          },
                                          "src": "3896:68:12",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        }
                                      ],
                                      "id": 1342,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "3895:70:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 1343,
                                      "name": "tickSpacing",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1198,
                                      "src": "3968:11:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    "src": "3895:84:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "src": "3858:204:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "id": 1364,
                              "nodeType": "ExpressionStatement",
                              "src": "3858:204:12"
                            }
                          ]
                        },
                        "id": 1366,
                        "nodeType": "IfStatement",
                        "src": "2528:1545:12",
                        "trueBody": {
                          "id": 1291,
                          "nodeType": "Block",
                          "src": "2537:716:12",
                          "statements": [
                            {
                              "assignments": [
                                1228,
                                1230
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1228,
                                  "mutability": "mutable",
                                  "name": "wordPos",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1291,
                                  "src": "2552:13:12",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int16",
                                    "typeString": "int16"
                                  },
                                  "typeName": {
                                    "id": 1227,
                                    "name": "int16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2552:5:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int16",
                                      "typeString": "int16"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 1230,
                                  "mutability": "mutable",
                                  "name": "bitPos",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1291,
                                  "src": "2567:12:12",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "typeName": {
                                    "id": 1229,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2567:5:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1234,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1232,
                                    "name": "compressed",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1208,
                                    "src": "2592:10:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  ],
                                  "id": 1231,
                                  "name": "position",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1146,
                                  "src": "2583:8:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_int16_$_t_uint8_$",
                                    "typeString": "function (int24) pure returns (int16,uint8)"
                                  }
                                },
                                "id": 1233,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2583:20:12",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_int16_$_t_uint8_$",
                                  "typeString": "tuple(int16,uint8)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2551:52:12"
                            },
                            {
                              "assignments": [
                                1236
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1236,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1291,
                                  "src": "2684:12:12",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1235,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2684:7:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1248,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1247,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1242,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 1239,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "31",
                                          "id": 1237,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "2700:1:12",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "id": 1238,
                                          "name": "bitPos",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1230,
                                          "src": "2705:6:12",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        },
                                        "src": "2700:11:12",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 1240,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "2699:13:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 1241,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2715:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "2699:17:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1245,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "31",
                                        "id": 1243,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2720:1:12",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<<",
                                      "rightExpression": {
                                        "id": 1244,
                                        "name": "bitPos",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1230,
                                        "src": "2725:6:12",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "src": "2720:11:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1246,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "2719:13:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2699:33:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2684:48:12"
                            },
                            {
                              "assignments": [
                                1250
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1250,
                                  "mutability": "mutable",
                                  "name": "masked",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1291,
                                  "src": "2746:14:12",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1249,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2746:7:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1256,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1255,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "baseExpression": {
                                    "id": 1251,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1194,
                                    "src": "2763:4:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_int16_$_t_uint256_$",
                                      "typeString": "mapping(int16 => uint256)"
                                    }
                                  },
                                  "id": 1253,
                                  "indexExpression": {
                                    "id": 1252,
                                    "name": "wordPos",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1228,
                                    "src": "2768:7:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int16",
                                      "typeString": "int16"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2763:13:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "id": 1254,
                                  "name": "mask",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1236,
                                  "src": "2779:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2763:20:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2746:37:12"
                            },
                            {
                              "expression": {
                                "id": 1261,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 1257,
                                  "name": "initialized",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1205,
                                  "src": "2916:11:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1260,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1258,
                                    "name": "masked",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1250,
                                    "src": "2930:6:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "!=",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 1259,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2940:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "2930:11:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "2916:25:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1262,
                              "nodeType": "ExpressionStatement",
                              "src": "2916:25:12"
                            },
                            {
                              "expression": {
                                "id": 1289,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 1263,
                                  "name": "next",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1203,
                                  "src": "3065:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "condition": {
                                    "id": 1264,
                                    "name": "initialized",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1205,
                                    "src": "3072:11:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    },
                                    "id": 1287,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          },
                                          "id": 1284,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 1279,
                                            "name": "compressed",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1208,
                                            "src": "3201:10:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "arguments": [
                                              {
                                                "id": 1282,
                                                "name": "bitPos",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1230,
                                                "src": "3220:6:12",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              ],
                                              "id": 1281,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "3214:5:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_int24_$",
                                                "typeString": "type(int24)"
                                              },
                                              "typeName": {
                                                "id": 1280,
                                                "name": "int24",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3214:5:12",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 1283,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3214:13:12",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            }
                                          },
                                          "src": "3201:26:12",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        }
                                      ],
                                      "id": 1285,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "3200:28:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 1286,
                                      "name": "tickSpacing",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1198,
                                      "src": "3231:11:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    "src": "3200:42:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  "id": 1288,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "3072:170:12",
                                  "trueExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    },
                                    "id": 1278,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          },
                                          "id": 1275,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 1265,
                                            "name": "compressed",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1208,
                                            "src": "3103:10:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "arguments": [
                                              {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                },
                                                "id": 1273,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "id": 1268,
                                                  "name": "bitPos",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1230,
                                                  "src": "3122:6:12",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "-",
                                                "rightExpression": {
                                                  "arguments": [
                                                    {
                                                      "id": 1271,
                                                      "name": "masked",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 1250,
                                                      "src": "3158:6:12",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    ],
                                                    "expression": {
                                                      "id": 1269,
                                                      "name": "BitMath",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 740,
                                                      "src": "3131:7:12",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_BitMath_$740_$",
                                                        "typeString": "type(library BitMath)"
                                                      }
                                                    },
                                                    "id": 1270,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "mostSignificantBit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 578,
                                                    "src": "3131:26:12",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                                                      "typeString": "function (uint256) pure returns (uint8)"
                                                    }
                                                  },
                                                  "id": 1272,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "3131:34:12",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  }
                                                },
                                                "src": "3122:43:12",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              ],
                                              "id": 1267,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "3116:5:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_int24_$",
                                                "typeString": "type(int24)"
                                              },
                                              "typeName": {
                                                "id": 1266,
                                                "name": "int24",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3116:5:12",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 1274,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3116:50:12",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            }
                                          },
                                          "src": "3103:63:12",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        }
                                      ],
                                      "id": 1276,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "3102:65:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 1277,
                                      "name": "tickSpacing",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1198,
                                      "src": "3170:11:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    "src": "3102:79:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "src": "3065:177:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "id": 1290,
                              "nodeType": "ExpressionStatement",
                              "src": "3065:177:12"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1190,
                    "nodeType": "StructuredDocumentation",
                    "src": "1426:727:12",
                    "text": "@notice Returns the next initialized tick contained in the same word (or adjacent word) as the tick that is either\n to the left (less than or equal to) or right (greater than) of the given tick\n @param self The mapping in which to compute the next initialized tick\n @param tick The starting tick\n @param tickSpacing The spacing between usable ticks\n @param lte Whether to search for the next initialized tick to the left (less than or equal to the starting tick)\n @return next The next initialized or uninitialized tick up to 256 ticks away from the current tick\n @return initialized Whether the next tick is initialized, as the function only searches within up to 256 ticks"
                  },
                  "id": 1368,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "nextInitializedTickWithinOneWord",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1201,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1194,
                        "mutability": "mutable",
                        "name": "self",
                        "nodeType": "VariableDeclaration",
                        "scope": 1368,
                        "src": "2209:38:12",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_int16_$_t_uint256_$",
                          "typeString": "mapping(int16 => uint256)"
                        },
                        "typeName": {
                          "id": 1193,
                          "keyType": {
                            "id": 1191,
                            "name": "int16",
                            "nodeType": "ElementaryTypeName",
                            "src": "2217:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "nodeType": "Mapping",
                          "src": "2209:25:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_int16_$_t_uint256_$",
                            "typeString": "mapping(int16 => uint256)"
                          },
                          "valueType": {
                            "id": 1192,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2226:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1196,
                        "mutability": "mutable",
                        "name": "tick",
                        "nodeType": "VariableDeclaration",
                        "scope": 1368,
                        "src": "2257:10:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 1195,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2257:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1198,
                        "mutability": "mutable",
                        "name": "tickSpacing",
                        "nodeType": "VariableDeclaration",
                        "scope": 1368,
                        "src": "2277:17:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 1197,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2277:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1200,
                        "mutability": "mutable",
                        "name": "lte",
                        "nodeType": "VariableDeclaration",
                        "scope": 1368,
                        "src": "2304:8:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1199,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2304:4:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2199:119:12"
                  },
                  "returnParameters": {
                    "id": 1206,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1203,
                        "mutability": "mutable",
                        "name": "next",
                        "nodeType": "VariableDeclaration",
                        "scope": 1368,
                        "src": "2342:10:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 1202,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2342:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1205,
                        "mutability": "mutable",
                        "name": "initialized",
                        "nodeType": "VariableDeclaration",
                        "scope": 1368,
                        "src": "2354:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1204,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2354:4:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2341:30:12"
                  },
                  "scope": 1369,
                  "src": "2158:1921:12",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1370,
              "src": "331:3750:12"
            }
          ],
          "src": "37:4045:12"
        },
        "id": 12
      },
      "@airdao/astra-cl-core/contracts/libraries/TickMath.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-core/contracts/libraries/TickMath.sol",
          "exportedSymbols": {
            "TickMath": [
              1904
            ]
          },
          "id": 1905,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1371,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:31:13"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1372,
                "nodeType": "StructuredDocumentation",
                "src": "78:235:13",
                "text": "@title Math library for computing sqrt prices from ticks and vice versa\n @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\n prices between 2**-128 and 2**128"
              },
              "fullyImplemented": true,
              "id": 1904,
              "linearizedBaseContracts": [
                1904
              ],
              "name": "TickMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "documentation": {
                    "id": 1373,
                    "nodeType": "StructuredDocumentation",
                    "src": "336:108:13",
                    "text": "@dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128"
                  },
                  "id": 1377,
                  "mutability": "constant",
                  "name": "MIN_TICK",
                  "nodeType": "VariableDeclaration",
                  "scope": 1904,
                  "src": "449:42:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 1374,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "449:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "value": {
                    "id": 1376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "-",
                    "prefix": true,
                    "src": "484:7:13",
                    "subExpression": {
                      "hexValue": "383837323732",
                      "id": 1375,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "485:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_887272_by_1",
                        "typeString": "int_const 887272"
                      },
                      "value": "887272"
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_minus_887272_by_1",
                      "typeString": "int_const -887272"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1378,
                    "nodeType": "StructuredDocumentation",
                    "src": "497:107:13",
                    "text": "@dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128"
                  },
                  "id": 1382,
                  "mutability": "constant",
                  "name": "MAX_TICK",
                  "nodeType": "VariableDeclaration",
                  "scope": 1904,
                  "src": "609:44:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 1379,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "609:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "value": {
                    "id": 1381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "-",
                    "prefix": true,
                    "src": "644:9:13",
                    "subExpression": {
                      "id": 1380,
                      "name": "MIN_TICK",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1377,
                      "src": "645:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1383,
                    "nodeType": "StructuredDocumentation",
                    "src": "660:116:13",
                    "text": "@dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)"
                  },
                  "id": 1386,
                  "mutability": "constant",
                  "name": "MIN_SQRT_RATIO",
                  "nodeType": "VariableDeclaration",
                  "scope": 1904,
                  "src": "781:53:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 1384,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "781:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": {
                    "hexValue": "34323935313238373339",
                    "id": 1385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "824:10:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4295128739_by_1",
                      "typeString": "int_const 4295128739"
                    },
                    "value": "4295128739"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1387,
                    "nodeType": "StructuredDocumentation",
                    "src": "840:116:13",
                    "text": "@dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)"
                  },
                  "id": 1390,
                  "mutability": "constant",
                  "name": "MAX_SQRT_RATIO",
                  "nodeType": "VariableDeclaration",
                  "scope": 1904,
                  "src": "961:92:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 1388,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "961:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": {
                    "hexValue": "31343631343436373033343835323130313033323837323733303532323033393838383232333738373233393730333432",
                    "id": 1389,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1004:49:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1461446703485210103287273052203988822378723970342_by_1",
                      "typeString": "int_const 1461...(41 digits omitted)...0342"
                    },
                    "value": "1461446703485210103287273052203988822378723970342"
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1763,
                    "nodeType": "Block",
                    "src": "1447:2495:13",
                    "statements": [
                      {
                        "assignments": [
                          1399
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1399,
                            "mutability": "mutable",
                            "name": "absTick",
                            "nodeType": "VariableDeclaration",
                            "scope": 1763,
                            "src": "1457:15:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1398,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1457:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1419,
                        "initialValue": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "id": 1402,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1400,
                              "name": "tick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1393,
                              "src": "1475:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 1401,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1482:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "1475:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 1415,
                                    "name": "tick",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1393,
                                    "src": "1526:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  ],
                                  "id": 1414,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1519:6:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_int256_$",
                                    "typeString": "type(int256)"
                                  },
                                  "typeName": {
                                    "id": 1413,
                                    "name": "int256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1519:6:13",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1416,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1519:12:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 1412,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1511:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 1411,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1511:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1417,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1511:21:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "1475:57:13",
                          "trueExpression": {
                            "arguments": [
                              {
                                "id": 1409,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "-",
                                "prefix": true,
                                "src": "1494:13:13",
                                "subExpression": {
                                  "arguments": [
                                    {
                                      "id": 1407,
                                      "name": "tick",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1393,
                                      "src": "1502:4:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    ],
                                    "id": 1406,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1495:6:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 1405,
                                      "name": "int256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1495:6:13",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1408,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1495:12:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 1404,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1486:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 1403,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1486:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1410,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1486:22:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1457:75:13"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1426,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1421,
                                "name": "absTick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1399,
                                "src": "1550:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "id": 1424,
                                    "name": "MAX_TICK",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1382,
                                    "src": "1569:8:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  ],
                                  "id": 1423,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1561:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 1422,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1561:7:13",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1425,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1561:17:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1550:28:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "54",
                              "id": 1427,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1580:3:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc",
                                "typeString": "literal_string \"T\""
                              },
                              "value": "T"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc",
                                "typeString": "literal_string \"T\""
                              }
                            ],
                            "id": 1420,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1542:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1542:42:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1429,
                        "nodeType": "ExpressionStatement",
                        "src": "1542:42:13"
                      },
                      {
                        "assignments": [
                          1431
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1431,
                            "mutability": "mutable",
                            "name": "ratio",
                            "nodeType": "VariableDeclaration",
                            "scope": 1763,
                            "src": "1595:13:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1430,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1595:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1440,
                        "initialValue": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1436,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1434,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1432,
                                "name": "absTick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1399,
                                "src": "1611:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "hexValue": "307831",
                                "id": 1433,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1621:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "0x1"
                              },
                              "src": "1611:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 1435,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1628:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "1611:18:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "hexValue": "3078313030303030303030303030303030303030303030303030303030303030303030",
                            "id": 1438,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1669:35:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                              "typeString": "int_const 3402...(31 digits omitted)...1456"
                            },
                            "value": "0x100000000000000000000000000000000"
                          },
                          "id": 1439,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "1611:93:13",
                          "trueExpression": {
                            "hexValue": "30786666666362393333626436666164333761613264313632643161353934303031",
                            "id": 1437,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1632:34:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_340265354078544963557816517032075149313_by_1",
                              "typeString": "int_const 3402...(31 digits omitted)...9313"
                            },
                            "value": "0xfffcb933bd6fad37aa2d162d1a594001"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint136",
                            "typeString": "uint136"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1595:109:13"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1445,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1443,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1441,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "1718:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307832",
                              "id": 1442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1728:3:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "0x2"
                            },
                            "src": "1718:13:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1444,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1735:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1718:18:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1455,
                        "nodeType": "IfStatement",
                        "src": "1714:83:13",
                        "trueBody": {
                          "expression": {
                            "id": 1453,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1446,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "1738:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1452,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1449,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1447,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "1747:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666663937323732333733643431333235396134363939303538306532313361",
                                      "id": 1448,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1755:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_340248342086729790484326174814286782778_by_1",
                                        "typeString": "int_const 3402...(31 digits omitted)...2778"
                                      },
                                      "value": "0xfff97272373d413259a46990580e213a"
                                    },
                                    "src": "1747:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1450,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1746:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1451,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1794:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "1746:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1738:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1454,
                          "nodeType": "ExpressionStatement",
                          "src": "1738:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1458,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1456,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "1811:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307834",
                              "id": 1457,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1821:3:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              },
                              "value": "0x4"
                            },
                            "src": "1811:13:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1828:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1811:18:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1470,
                        "nodeType": "IfStatement",
                        "src": "1807:83:13",
                        "trueBody": {
                          "expression": {
                            "id": 1468,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1461,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "1831:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1467,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1464,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1462,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "1840:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666663265353066356636353639333265663132333537636633633766646363",
                                      "id": 1463,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1848:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_340214320654664324051920982716015181260_by_1",
                                        "typeString": "int_const 3402...(31 digits omitted)...1260"
                                      },
                                      "value": "0xfff2e50f5f656932ef12357cf3c7fdcc"
                                    },
                                    "src": "1840:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1465,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1839:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1466,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1887:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "1839:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1831:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1469,
                          "nodeType": "ExpressionStatement",
                          "src": "1831:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1475,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1473,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1471,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "1904:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307838",
                              "id": 1472,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1914:3:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              "value": "0x8"
                            },
                            "src": "1904:13:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1474,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1921:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1904:18:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1485,
                        "nodeType": "IfStatement",
                        "src": "1900:83:13",
                        "trueBody": {
                          "expression": {
                            "id": 1483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1476,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "1924:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1482,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1479,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1477,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "1933:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666653563616361376531306534653631633336323465616130393431636430",
                                      "id": 1478,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1941:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_340146287995602323631171512101879684304_by_1",
                                        "typeString": "int_const 3401...(31 digits omitted)...4304"
                                      },
                                      "value": "0xffe5caca7e10e4e61c3624eaa0941cd0"
                                    },
                                    "src": "1933:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1480,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1932:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1481,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1980:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "1932:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1924:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1484,
                          "nodeType": "ExpressionStatement",
                          "src": "1924:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1490,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1488,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1486,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "1997:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783130",
                              "id": 1487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2007:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "0x10"
                            },
                            "src": "1997:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1489,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2015:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1997:19:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1500,
                        "nodeType": "IfStatement",
                        "src": "1993:84:13",
                        "trueBody": {
                          "expression": {
                            "id": 1498,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1491,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "2018:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1497,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1494,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1492,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "2027:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666636239383433643630663631353963396462353838333563393236363434",
                                      "id": 1493,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2035:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_340010263488231146823593991679159461444_by_1",
                                        "typeString": "int_const 3400...(31 digits omitted)...1444"
                                      },
                                      "value": "0xffcb9843d60f6159c9db58835c926644"
                                    },
                                    "src": "2027:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1495,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2026:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1496,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2074:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2026:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2018:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1499,
                          "nodeType": "ExpressionStatement",
                          "src": "2018:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1503,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1501,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "2091:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783230",
                              "id": 1502,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2101:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "0x20"
                            },
                            "src": "2091:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1504,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2109:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2091:19:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1515,
                        "nodeType": "IfStatement",
                        "src": "2087:84:13",
                        "trueBody": {
                          "expression": {
                            "id": 1513,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1506,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "2112:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1512,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1509,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1507,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "2121:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666393733623431666139386330383134373265363839366466623235346330",
                                      "id": 1508,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2129:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_339738377640345403697157401104375502016_by_1",
                                        "typeString": "int_const 3397...(31 digits omitted)...2016"
                                      },
                                      "value": "0xff973b41fa98c081472e6896dfb254c0"
                                    },
                                    "src": "2121:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1510,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2120:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1511,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2168:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2120:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2112:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1514,
                          "nodeType": "ExpressionStatement",
                          "src": "2112:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1520,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1518,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1516,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "2185:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783430",
                              "id": 1517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2195:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_64_by_1",
                                "typeString": "int_const 64"
                              },
                              "value": "0x40"
                            },
                            "src": "2185:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1519,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2203:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2185:19:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1530,
                        "nodeType": "IfStatement",
                        "src": "2181:84:13",
                        "trueBody": {
                          "expression": {
                            "id": 1528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1521,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "2206:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1527,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1524,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1522,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "2215:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666326561313634363663393661333834336563373862333236623532383631",
                                      "id": 1523,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2223:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_339195258003219555707034227454543997025_by_1",
                                        "typeString": "int_const 3391...(31 digits omitted)...7025"
                                      },
                                      "value": "0xff2ea16466c96a3843ec78b326b52861"
                                    },
                                    "src": "2215:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1525,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2214:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1526,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2262:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2214:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2206:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1529,
                          "nodeType": "ExpressionStatement",
                          "src": "2206:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1535,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1533,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1531,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "2279:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783830",
                              "id": 1532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2289:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_128_by_1",
                                "typeString": "int_const 128"
                              },
                              "value": "0x80"
                            },
                            "src": "2279:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1534,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2297:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2279:19:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1545,
                        "nodeType": "IfStatement",
                        "src": "2275:84:13",
                        "trueBody": {
                          "expression": {
                            "id": 1543,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1536,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "2300:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1542,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1539,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1537,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "2309:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786665356465653034366139396132613831316334363166313936396333303533",
                                      "id": 1538,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2317:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_338111622100601834656805679988414885971_by_1",
                                        "typeString": "int_const 3381...(31 digits omitted)...5971"
                                      },
                                      "value": "0xfe5dee046a99a2a811c461f1969c3053"
                                    },
                                    "src": "2309:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1540,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2308:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1541,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2356:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2308:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2300:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1544,
                          "nodeType": "ExpressionStatement",
                          "src": "2300:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1548,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1546,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "2373:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "3078313030",
                              "id": 1547,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2383:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_256_by_1",
                                "typeString": "int_const 256"
                              },
                              "value": "0x100"
                            },
                            "src": "2373:15:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1549,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2392:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2373:20:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1560,
                        "nodeType": "IfStatement",
                        "src": "2369:85:13",
                        "trueBody": {
                          "expression": {
                            "id": 1558,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1551,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "2395:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1557,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1554,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1552,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "2404:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786663626538366337393030613838616564636666633833623437396161336134",
                                      "id": 1553,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2412:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_335954724994790223023589805789778977700_by_1",
                                        "typeString": "int_const 3359...(31 digits omitted)...7700"
                                      },
                                      "value": "0xfcbe86c7900a88aedcffc83b479aa3a4"
                                    },
                                    "src": "2404:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1555,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2403:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1556,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2451:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2403:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2395:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1559,
                          "nodeType": "ExpressionStatement",
                          "src": "2395:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1563,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1561,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "2468:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "3078323030",
                              "id": 1562,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2478:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_512_by_1",
                                "typeString": "int_const 512"
                              },
                              "value": "0x200"
                            },
                            "src": "2468:15:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1564,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2487:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2468:20:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1575,
                        "nodeType": "IfStatement",
                        "src": "2464:85:13",
                        "trueBody": {
                          "expression": {
                            "id": 1573,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1566,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "2490:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1569,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1567,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "2499:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786639383761373235336163343133313736663262303734636637383135653534",
                                      "id": 1568,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2507:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_331682121138379247127172139078559817300_by_1",
                                        "typeString": "int_const 3316...(31 digits omitted)...7300"
                                      },
                                      "value": "0xf987a7253ac413176f2b074cf7815e54"
                                    },
                                    "src": "2499:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1570,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2498:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1571,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2546:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2498:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2490:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1574,
                          "nodeType": "ExpressionStatement",
                          "src": "2490:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1578,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1576,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "2563:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "3078343030",
                              "id": 1577,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2573:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1024_by_1",
                                "typeString": "int_const 1024"
                              },
                              "value": "0x400"
                            },
                            "src": "2563:15:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1579,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2582:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2563:20:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1590,
                        "nodeType": "IfStatement",
                        "src": "2559:85:13",
                        "trueBody": {
                          "expression": {
                            "id": 1588,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1581,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "2585:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1587,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1584,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1582,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "2594:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786633333932623038323262373030303539343063376133393865346237306633",
                                      "id": 1583,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2602:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_323299236684853023288211250268160618739_by_1",
                                        "typeString": "int_const 3232...(31 digits omitted)...8739"
                                      },
                                      "value": "0xf3392b0822b70005940c7a398e4b70f3"
                                    },
                                    "src": "2594:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1585,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2593:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1586,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2641:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2593:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2585:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1589,
                          "nodeType": "ExpressionStatement",
                          "src": "2585:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1591,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "2658:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "3078383030",
                              "id": 1592,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2668:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2048_by_1",
                                "typeString": "int_const 2048"
                              },
                              "value": "0x800"
                            },
                            "src": "2658:15:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1594,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2677:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2658:20:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1605,
                        "nodeType": "IfStatement",
                        "src": "2654:85:13",
                        "trueBody": {
                          "expression": {
                            "id": 1603,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1596,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "2680:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1602,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1599,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1597,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "2689:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786537313539343735613263323962373434336232396337666136653838396439",
                                      "id": 1598,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2697:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_307163716377032989948697243942600083929_by_1",
                                        "typeString": "int_const 3071...(31 digits omitted)...3929"
                                      },
                                      "value": "0xe7159475a2c29b7443b29c7fa6e889d9"
                                    },
                                    "src": "2689:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1600,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2688:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1601,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2736:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2688:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2680:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1604,
                          "nodeType": "ExpressionStatement",
                          "src": "2680:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1608,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1606,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "2753:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307831303030",
                              "id": 1607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2763:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4096_by_1",
                                "typeString": "int_const 4096"
                              },
                              "value": "0x1000"
                            },
                            "src": "2753:16:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1609,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2773:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2753:21:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1620,
                        "nodeType": "IfStatement",
                        "src": "2749:86:13",
                        "trueBody": {
                          "expression": {
                            "id": 1618,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1611,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "2776:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1617,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1614,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1612,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "2785:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786430393766336264666432303232623838343561643866373932616135383235",
                                      "id": 1613,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2793:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_277268403626896220162999269216087595045_by_1",
                                        "typeString": "int_const 2772...(31 digits omitted)...5045"
                                      },
                                      "value": "0xd097f3bdfd2022b8845ad8f792aa5825"
                                    },
                                    "src": "2785:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1615,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2784:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1616,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2832:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2784:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2776:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1619,
                          "nodeType": "ExpressionStatement",
                          "src": "2776:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1623,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1621,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "2849:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307832303030",
                              "id": 1622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2859:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8192_by_1",
                                "typeString": "int_const 8192"
                              },
                              "value": "0x2000"
                            },
                            "src": "2849:16:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1624,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2869:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2849:21:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1635,
                        "nodeType": "IfStatement",
                        "src": "2845:86:13",
                        "trueBody": {
                          "expression": {
                            "id": 1633,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1626,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "2872:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1632,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1629,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1627,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "2881:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786139663734363436326438373066646638613635646331663930653036316535",
                                      "id": 1628,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2889:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_225923453940442621947126027127485391333_by_1",
                                        "typeString": "int_const 2259...(31 digits omitted)...1333"
                                      },
                                      "value": "0xa9f746462d870fdf8a65dc1f90e061e5"
                                    },
                                    "src": "2881:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1630,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2880:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1631,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2928:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2880:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2872:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1634,
                          "nodeType": "ExpressionStatement",
                          "src": "2872:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1640,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1638,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1636,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "2945:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307834303030",
                              "id": 1637,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2955:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16384_by_1",
                                "typeString": "int_const 16384"
                              },
                              "value": "0x4000"
                            },
                            "src": "2945:16:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1639,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2965:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2945:21:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1650,
                        "nodeType": "IfStatement",
                        "src": "2941:86:13",
                        "trueBody": {
                          "expression": {
                            "id": 1648,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1641,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "2968:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1647,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1644,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1642,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "2977:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30783730643836396131353664326131623839306262336466363262616633326637",
                                      "id": 1643,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2985:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_149997214084966997727330242082538205943_by_1",
                                        "typeString": "int_const 1499...(31 digits omitted)...5943"
                                      },
                                      "value": "0x70d869a156d2a1b890bb3df62baf32f7"
                                    },
                                    "src": "2977:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1645,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2976:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1646,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3024:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2976:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2968:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1649,
                          "nodeType": "ExpressionStatement",
                          "src": "2968:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1653,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1651,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "3041:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307838303030",
                              "id": 1652,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3051:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32768_by_1",
                                "typeString": "int_const 32768"
                              },
                              "value": "0x8000"
                            },
                            "src": "3041:16:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1654,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3061:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3041:21:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1665,
                        "nodeType": "IfStatement",
                        "src": "3037:86:13",
                        "trueBody": {
                          "expression": {
                            "id": 1663,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1656,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "3064:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1662,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1659,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1657,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "3073:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30783331626531333566393764303866643938313233313530353534326663666136",
                                      "id": 1658,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3081:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_66119101136024775622716233608466517926_by_1",
                                        "typeString": "int_const 6611...(30 digits omitted)...7926"
                                      },
                                      "value": "0x31be135f97d08fd981231505542fcfa6"
                                    },
                                    "src": "3073:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1660,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3072:44:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1661,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3120:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "3072:51:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3064:59:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1664,
                          "nodeType": "ExpressionStatement",
                          "src": "3064:59:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1668,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1666,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "3137:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783130303030",
                              "id": 1667,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3147:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_65536_by_1",
                                "typeString": "int_const 65536"
                              },
                              "value": "0x10000"
                            },
                            "src": "3137:17:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1669,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3158:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3137:22:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1680,
                        "nodeType": "IfStatement",
                        "src": "3133:86:13",
                        "trueBody": {
                          "expression": {
                            "id": 1678,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1671,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "3161:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1677,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1674,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1672,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "3170:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "307839616135303862356237613834653163363737646535346633653939626339",
                                      "id": 1673,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3178:33:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_12847376061809297530290974190478138313_by_1",
                                        "typeString": "int_const 1284...(30 digits omitted)...8313"
                                      },
                                      "value": "0x9aa508b5b7a84e1c677de54f3e99bc9"
                                    },
                                    "src": "3170:41:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1675,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3169:43:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1676,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3216:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "3169:50:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3161:58:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1679,
                          "nodeType": "ExpressionStatement",
                          "src": "3161:58:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1685,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1683,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1681,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "3233:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783230303030",
                              "id": 1682,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3243:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_131072_by_1",
                                "typeString": "int_const 131072"
                              },
                              "value": "0x20000"
                            },
                            "src": "3233:17:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1684,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3254:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3233:22:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1695,
                        "nodeType": "IfStatement",
                        "src": "3229:85:13",
                        "trueBody": {
                          "expression": {
                            "id": 1693,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1686,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "3257:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1692,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1689,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1687,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "3266:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "3078356436616638646564623831313936363939633332393232356565363034",
                                      "id": 1688,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3274:32:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_485053260817066172746253684029974020_by_1",
                                        "typeString": "int_const 4850...(28 digits omitted)...4020"
                                      },
                                      "value": "0x5d6af8dedb81196699c329225ee604"
                                    },
                                    "src": "3266:40:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1690,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3265:42:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1691,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3311:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "3265:49:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3257:57:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1694,
                          "nodeType": "ExpressionStatement",
                          "src": "3257:57:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1700,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1698,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1696,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "3328:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783430303030",
                              "id": 1697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3338:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_262144_by_1",
                                "typeString": "int_const 262144"
                              },
                              "value": "0x40000"
                            },
                            "src": "3328:17:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1699,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3349:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3328:22:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1710,
                        "nodeType": "IfStatement",
                        "src": "3324:83:13",
                        "trueBody": {
                          "expression": {
                            "id": 1708,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1701,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "3352:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1707,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1704,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1702,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "3361:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "307832323136653538346635666131656139323630343162656466653938",
                                      "id": 1703,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3369:30:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_691415978906521570653435304214168_by_1",
                                        "typeString": "int_const 6914...(25 digits omitted)...4168"
                                      },
                                      "value": "0x2216e584f5fa1ea926041bedfe98"
                                    },
                                    "src": "3361:38:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1705,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3360:40:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1706,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3404:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "3360:47:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3352:55:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1709,
                          "nodeType": "ExpressionStatement",
                          "src": "3352:55:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1715,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1713,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1711,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1399,
                              "src": "3421:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783830303030",
                              "id": 1712,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3431:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_524288_by_1",
                                "typeString": "int_const 524288"
                              },
                              "value": "0x80000"
                            },
                            "src": "3421:17:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1714,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3442:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3421:22:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1725,
                        "nodeType": "IfStatement",
                        "src": "3417:78:13",
                        "trueBody": {
                          "expression": {
                            "id": 1723,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1716,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "3445:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1722,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1719,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1717,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1431,
                                      "src": "3454:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30783438613137303339316637646334323434346538666132",
                                      "id": 1718,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3462:25:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1404880482679654955896180642_by_1",
                                        "typeString": "int_const 1404880482679654955896180642"
                                      },
                                      "value": "0x48a170391f7dc42444e8fa2"
                                    },
                                    "src": "3454:33:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1720,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3453:35:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1721,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3492:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "3453:42:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3445:50:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1724,
                          "nodeType": "ExpressionStatement",
                          "src": "3445:50:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          },
                          "id": 1728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1726,
                            "name": "tick",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1393,
                            "src": "3510:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1727,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3517:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3510:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1739,
                        "nodeType": "IfStatement",
                        "src": "3506:47:13",
                        "trueBody": {
                          "expression": {
                            "id": 1737,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1729,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1431,
                              "src": "3520:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1736,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1732,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "3533:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 1731,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3533:7:13",
                                        "typeDescriptions": {}
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      }
                                    ],
                                    "id": 1730,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "3528:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 1733,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3528:13:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                    "typeString": "type(uint256)"
                                  }
                                },
                                "id": 1734,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "max",
                                "nodeType": "MemberAccess",
                                "src": "3528:17:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "id": 1735,
                                "name": "ratio",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1431,
                                "src": "3548:5:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3528:25:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3520:33:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1738,
                          "nodeType": "ExpressionStatement",
                          "src": "3520:33:13"
                        }
                      },
                      {
                        "expression": {
                          "id": 1761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1740,
                            "name": "sqrtPriceX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1396,
                            "src": "3863:12:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1759,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1745,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 1743,
                                        "name": "ratio",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1431,
                                        "src": "3887:5:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">>",
                                      "rightExpression": {
                                        "hexValue": "3332",
                                        "id": 1744,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3896:2:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_32_by_1",
                                          "typeString": "int_const 32"
                                        },
                                        "value": "32"
                                      },
                                      "src": "3887:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1746,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "3886:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "condition": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 1754,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 1752,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 1747,
                                            "name": "ratio",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1431,
                                            "src": "3903:5:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "%",
                                          "rightExpression": {
                                            "components": [
                                              {
                                                "commonType": {
                                                  "typeIdentifier": "t_rational_4294967296_by_1",
                                                  "typeString": "int_const 4294967296"
                                                },
                                                "id": 1750,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "hexValue": "31",
                                                  "id": 1748,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "3912:1:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                  },
                                                  "value": "1"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<<",
                                                "rightExpression": {
                                                  "hexValue": "3332",
                                                  "id": 1749,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "3917:2:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_32_by_1",
                                                    "typeString": "int_const 32"
                                                  },
                                                  "value": "32"
                                                },
                                                "src": "3912:7:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_4294967296_by_1",
                                                  "typeString": "int_const 4294967296"
                                                }
                                              }
                                            ],
                                            "id": 1751,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "TupleExpression",
                                            "src": "3911:9:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_4294967296_by_1",
                                              "typeString": "int_const 4294967296"
                                            }
                                          },
                                          "src": "3903:17:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "hexValue": "30",
                                          "id": 1753,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "3924:1:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        },
                                        "src": "3903:22:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseExpression": {
                                        "hexValue": "31",
                                        "id": 1756,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3932:1:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "id": 1757,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "Conditional",
                                      "src": "3903:30:13",
                                      "trueExpression": {
                                        "hexValue": "30",
                                        "id": 1755,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3928:1:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    }
                                  ],
                                  "id": 1758,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "3902:32:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "3886:48:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1742,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3878:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 1741,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "3878:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1760,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3878:57:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "3863:72:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "id": 1762,
                        "nodeType": "ExpressionStatement",
                        "src": "3863:72:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1391,
                    "nodeType": "StructuredDocumentation",
                    "src": "1060:297:13",
                    "text": "@notice Calculates sqrt(1.0001^tick) * 2^96\n @dev Throws if |tick| > max tick\n @param tick The input tick for the above formula\n @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\n at the given tick"
                  },
                  "id": 1764,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSqrtRatioAtTick",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1394,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1393,
                        "mutability": "mutable",
                        "name": "tick",
                        "nodeType": "VariableDeclaration",
                        "scope": 1764,
                        "src": "1390:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 1392,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1390:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1389:12:13"
                  },
                  "returnParameters": {
                    "id": 1397,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1396,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 1764,
                        "src": "1425:20:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 1395,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1425:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1424:22:13"
                  },
                  "scope": 1904,
                  "src": "1362:2580:13",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1902,
                    "nodeType": "Block",
                    "src": "4446:4252:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1779,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 1775,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1773,
                                  "name": "sqrtPriceX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1767,
                                  "src": "4563:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "id": 1774,
                                  "name": "MIN_SQRT_RATIO",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1386,
                                  "src": "4579:14:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "4563:30:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 1778,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1776,
                                  "name": "sqrtPriceX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1767,
                                  "src": "4597:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 1777,
                                  "name": "MAX_SQRT_RATIO",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1390,
                                  "src": "4612:14:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "4597:29:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "4563:63:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "52",
                              "id": 1780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4628:3:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ef22bddd350b943170a67d35191c27e310709a28c38b5762a152ff640108f5b2",
                                "typeString": "literal_string \"R\""
                              },
                              "value": "R"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ef22bddd350b943170a67d35191c27e310709a28c38b5762a152ff640108f5b2",
                                "typeString": "literal_string \"R\""
                              }
                            ],
                            "id": 1772,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4555:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4555:77:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1782,
                        "nodeType": "ExpressionStatement",
                        "src": "4555:77:13"
                      },
                      {
                        "assignments": [
                          1784
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1784,
                            "mutability": "mutable",
                            "name": "ratio",
                            "nodeType": "VariableDeclaration",
                            "scope": 1902,
                            "src": "4642:13:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1783,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4642:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1791,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 1787,
                                "name": "sqrtPriceX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1767,
                                "src": "4666:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "id": 1786,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4658:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 1785,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "4658:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1788,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4658:21:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 1789,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4683:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "4658:27:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4642:43:13"
                      },
                      {
                        "assignments": [
                          1793
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1793,
                            "mutability": "mutable",
                            "name": "r",
                            "nodeType": "VariableDeclaration",
                            "scope": 1902,
                            "src": "4696:9:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1792,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4696:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1795,
                        "initialValue": {
                          "id": 1794,
                          "name": "ratio",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1784,
                          "src": "4708:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4696:17:13"
                      },
                      {
                        "assignments": [
                          1797
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1797,
                            "mutability": "mutable",
                            "name": "msb",
                            "nodeType": "VariableDeclaration",
                            "scope": 1902,
                            "src": "4723:11:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1796,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4723:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1799,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 1798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4737:1:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4723:15:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4758:139:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4772:58:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4785:1:13",
                                    "type": "",
                                    "value": "7"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "4791:1:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4794:34:13",
                                        "type": "",
                                        "value": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4788:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4788:41:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "4781:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4781:49:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "4776:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4843:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "4853:3:13"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "4858:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "4850:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4850:10:13"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "4843:3:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4873:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "4882:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "4885:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "4878:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4878:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "4873:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4843:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4853:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4791:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4873:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4885:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1800,
                        "nodeType": "InlineAssembly",
                        "src": "4749:148:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4915:123:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4929:42:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4942:1:13",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "4948:1:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4951:18:13",
                                        "type": "",
                                        "value": "0xFFFFFFFFFFFFFFFF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4945:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4945:25:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "4938:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4938:33:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "4933:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4984:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "4994:3:13"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "4999:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "4991:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4991:10:13"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "4984:3:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5014:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5023:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5026:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5019:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5019:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5014:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4984:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4994:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4948:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5014:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5026:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1801,
                        "nodeType": "InlineAssembly",
                        "src": "4906:132:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5056:115:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5070:34:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5083:1:13",
                                    "type": "",
                                    "value": "5"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5089:1:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5092:10:13",
                                        "type": "",
                                        "value": "0xFFFFFFFF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5086:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5086:17:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5079:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5079:25:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5074:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5117:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "5127:3:13"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5132:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5124:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5124:10:13"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "5117:3:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5147:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5156:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5159:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5152:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5152:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5147:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5117:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5127:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5089:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5147:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5159:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1802,
                        "nodeType": "InlineAssembly",
                        "src": "5047:124:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5189:111:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5203:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5216:1:13",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5222:1:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5225:6:13",
                                        "type": "",
                                        "value": "0xFFFF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5219:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5219:13:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5212:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5212:21:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5207:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5246:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "5256:3:13"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5261:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5253:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5253:10:13"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "5246:3:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5276:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5285:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5288:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5281:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5281:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5276:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5246:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5256:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5222:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5276:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5288:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1803,
                        "nodeType": "InlineAssembly",
                        "src": "5180:120:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5318:109:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5332:28:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5345:1:13",
                                    "type": "",
                                    "value": "3"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5351:1:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5354:4:13",
                                        "type": "",
                                        "value": "0xFF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5348:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5348:11:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5341:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5341:19:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5336:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5373:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "5383:3:13"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5388:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5380:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5380:10:13"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "5373:3:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5403:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5412:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5415:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5408:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5408:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5403:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5373:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5383:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5351:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5403:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5415:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1804,
                        "nodeType": "InlineAssembly",
                        "src": "5309:118:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5445:108:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5459:27:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5472:1:13",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5478:1:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5481:3:13",
                                        "type": "",
                                        "value": "0xF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5475:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5475:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5468:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5468:18:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5463:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5499:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "5509:3:13"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5514:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5506:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5506:10:13"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "5499:3:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5529:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5538:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5541:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5534:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5534:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5529:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5499:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5509:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5478:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5529:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5541:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1805,
                        "nodeType": "InlineAssembly",
                        "src": "5436:117:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5571:108:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5585:27:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5598:1:13",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5604:1:13"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5607:3:13",
                                        "type": "",
                                        "value": "0x3"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5601:2:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5601:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5594:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5594:18:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5589:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5625:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "5635:3:13"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5640:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5632:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5632:10:13"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "5625:3:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5655:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5664:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5667:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5660:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5660:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5655:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5625:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5635:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5604:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5655:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5667:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1806,
                        "nodeType": "InlineAssembly",
                        "src": "5562:117:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5697:73:13",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5711:19:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5723:1:13"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5726:3:13",
                                    "type": "",
                                    "value": "0x1"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5720:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5720:10:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5715:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5743:17:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "5753:3:13"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5758:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5750:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5750:10:13"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "5743:3:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5743:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5753:3:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5723:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1807,
                        "nodeType": "InlineAssembly",
                        "src": "5688:82:13"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1810,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1808,
                            "name": "msb",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1797,
                            "src": "5784:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "313238",
                            "id": 1809,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5791:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "128"
                          },
                          "src": "5784:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "expression": {
                            "id": 1827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1820,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1793,
                              "src": "5835:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1826,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1821,
                                "name": "ratio",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1784,
                                "src": "5839:5:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1824,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "313237",
                                      "id": 1822,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5849:3:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_127_by_1",
                                        "typeString": "int_const 127"
                                      },
                                      "value": "127"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 1823,
                                      "name": "msb",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1797,
                                      "src": "5855:3:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "5849:9:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1825,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5848:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5839:20:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5835:24:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1828,
                          "nodeType": "ExpressionStatement",
                          "src": "5835:24:13"
                        },
                        "id": 1829,
                        "nodeType": "IfStatement",
                        "src": "5780:79:13",
                        "trueBody": {
                          "expression": {
                            "id": 1818,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1811,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1793,
                              "src": "5796:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1817,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1812,
                                "name": "ratio",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1784,
                                "src": "5800:5:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1815,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1813,
                                      "name": "msb",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1797,
                                      "src": "5810:3:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "313237",
                                      "id": 1814,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5816:3:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_127_by_1",
                                        "typeString": "int_const 127"
                                      },
                                      "value": "127"
                                    },
                                    "src": "5810:9:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1816,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5809:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5800:20:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5796:24:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1819,
                          "nodeType": "ExpressionStatement",
                          "src": "5796:24:13"
                        }
                      },
                      {
                        "assignments": [
                          1831
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1831,
                            "mutability": "mutable",
                            "name": "log_2",
                            "nodeType": "VariableDeclaration",
                            "scope": 1902,
                            "src": "5870:12:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1830,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5870:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1841,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 1840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 1837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 1834,
                                      "name": "msb",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1797,
                                      "src": "5893:3:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1833,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5886:6:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 1832,
                                      "name": "int256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5886:6:13",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1835,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5886:11:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "313238",
                                  "id": 1836,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5900:3:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_128_by_1",
                                    "typeString": "int_const 128"
                                  },
                                  "value": "128"
                                },
                                "src": "5886:17:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "id": 1838,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "5885:19:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "hexValue": "3634",
                            "id": 1839,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5908:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_64_by_1",
                              "typeString": "int_const 64"
                            },
                            "value": "64"
                          },
                          "src": "5885:25:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5870:40:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5930:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5944:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5953:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5962:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5965:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "5958:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5958:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5949:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5949:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5944:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5981:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5994:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5999:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5990:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5990:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5985:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6014:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6026:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6037:2:13",
                                        "type": "",
                                        "value": "63"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6041:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6033:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6033:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6023:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6023:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6014:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6057:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6066:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6069:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6062:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6062:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6057:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6014:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6026:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5944:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5962:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5965:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5999:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6057:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6069:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1842,
                        "nodeType": "InlineAssembly",
                        "src": "5921:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6099:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6113:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6122:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6131:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6134:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6127:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6127:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6118:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6118:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6113:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6150:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6163:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6168:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6159:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6159:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6154:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6183:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6195:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6206:2:13",
                                        "type": "",
                                        "value": "62"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6210:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6202:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6202:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6192:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6192:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6183:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6226:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6235:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6238:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6231:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6231:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6226:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6183:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6195:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6113:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6131:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6134:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6168:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6226:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6238:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1843,
                        "nodeType": "InlineAssembly",
                        "src": "6090:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6268:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6282:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6291:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6300:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6303:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6296:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6296:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6287:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6287:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6282:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6319:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6332:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6337:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6328:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6328:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6323:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6352:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6364:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6375:2:13",
                                        "type": "",
                                        "value": "61"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6379:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6371:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6371:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6361:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6361:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6352:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6395:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6404:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6407:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6400:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6400:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6395:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6352:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6364:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6282:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6300:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6303:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6337:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6395:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6407:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1844,
                        "nodeType": "InlineAssembly",
                        "src": "6259:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6437:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6451:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6460:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6469:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6472:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6465:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6465:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6456:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6456:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6451:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6488:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6501:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6506:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6497:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6497:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6492:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6521:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6533:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6544:2:13",
                                        "type": "",
                                        "value": "60"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6548:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6540:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6540:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6530:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6530:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6521:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6564:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6573:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6576:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6569:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6569:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6564:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6521:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6533:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6451:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6469:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6472:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6506:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6564:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6576:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1845,
                        "nodeType": "InlineAssembly",
                        "src": "6428:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6606:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6620:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6629:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6638:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6641:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6634:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6634:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6625:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6625:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6620:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6657:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6670:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6675:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6666:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6666:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6661:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6690:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6702:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6713:2:13",
                                        "type": "",
                                        "value": "59"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6717:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6709:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6709:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6699:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6699:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6690:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6733:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6742:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6745:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6738:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6738:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6733:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6690:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6702:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6620:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6638:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6641:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6675:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6733:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6745:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1846,
                        "nodeType": "InlineAssembly",
                        "src": "6597:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6775:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6789:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6798:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6807:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6810:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6803:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6803:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6794:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6794:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6789:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6826:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6839:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6844:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6835:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6835:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6830:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6859:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6871:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6882:2:13",
                                        "type": "",
                                        "value": "58"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6886:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6878:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6878:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6868:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6868:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6859:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6902:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6911:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6914:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6907:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6907:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6902:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6859:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6871:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6789:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6807:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6810:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6844:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6902:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6914:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1847,
                        "nodeType": "InlineAssembly",
                        "src": "6766:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6944:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6958:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6967:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6976:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6979:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6972:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6972:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6963:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6963:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6958:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6995:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7008:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7013:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7004:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7004:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6999:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7028:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7040:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7051:2:13",
                                        "type": "",
                                        "value": "57"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "7055:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7047:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7047:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "7037:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7037:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7028:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7071:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "7080:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7083:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7076:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7076:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7071:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7028:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7040:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6958:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6976:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6979:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7013:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7071:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7083:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1848,
                        "nodeType": "InlineAssembly",
                        "src": "6935:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7113:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7127:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7136:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7145:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7148:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "7141:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7141:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7132:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7132:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7127:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7164:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7177:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7182:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7173:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7173:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "7168:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7197:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7209:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7220:2:13",
                                        "type": "",
                                        "value": "56"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "7224:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7216:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7216:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "7206:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7206:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7197:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7240:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "7249:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7252:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7245:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7245:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7240:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7197:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7209:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7127:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7145:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7148:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7182:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7240:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7252:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1849,
                        "nodeType": "InlineAssembly",
                        "src": "7104:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7282:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7296:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7305:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7314:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7317:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "7310:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7310:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7301:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7301:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7296:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7333:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7346:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7351:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7342:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7342:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "7337:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7366:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7378:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7389:2:13",
                                        "type": "",
                                        "value": "55"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "7393:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7385:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7385:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "7375:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7375:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7366:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7409:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "7418:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7421:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7414:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7414:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7409:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7366:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7378:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7296:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7314:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7317:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7351:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7409:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7421:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1850,
                        "nodeType": "InlineAssembly",
                        "src": "7273:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7451:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7465:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7474:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7483:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7486:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "7479:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7479:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7470:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7470:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7465:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7502:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7515:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7520:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7511:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7511:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "7506:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7535:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7547:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7558:2:13",
                                        "type": "",
                                        "value": "54"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "7562:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7554:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7554:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "7544:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7544:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7535:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7578:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "7587:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7590:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7583:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7583:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7578:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7535:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7547:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7465:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7483:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7486:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7520:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7578:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7590:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1851,
                        "nodeType": "InlineAssembly",
                        "src": "7442:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7620:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7634:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7643:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7652:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7655:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "7648:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7648:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7639:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7639:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7634:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7671:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7684:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7689:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7680:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7680:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "7675:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7704:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7716:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7727:2:13",
                                        "type": "",
                                        "value": "53"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "7731:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7723:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7723:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "7713:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7713:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7704:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7747:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "7756:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7759:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7752:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7752:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7747:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7704:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7716:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7634:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7652:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7655:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7689:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7747:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7759:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1852,
                        "nodeType": "InlineAssembly",
                        "src": "7611:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7789:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7803:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7812:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7821:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7824:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "7817:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7817:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7808:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7808:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7803:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7840:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7853:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7858:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7849:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7849:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "7844:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7873:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7885:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7896:2:13",
                                        "type": "",
                                        "value": "52"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "7900:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7892:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7892:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "7882:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7882:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7873:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7916:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "7925:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7928:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7921:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7921:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7916:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7873:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7885:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7803:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7821:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7824:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7858:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7916:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7928:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1853,
                        "nodeType": "InlineAssembly",
                        "src": "7780:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7958:151:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7972:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7981:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7990:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7993:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "7986:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7986:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7977:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7977:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7972:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8009:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8022:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "8027:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "8018:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8018:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "8013:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8042:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8054:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8065:2:13",
                                        "type": "",
                                        "value": "51"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "8069:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8061:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8061:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "8051:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8051:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "8042:5:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8085:14:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "8094:1:13"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "8097:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "8090:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8090:9:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "8085:1:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8042:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8054:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7972:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7990:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7993:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8027:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8085:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8097:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1854,
                        "nodeType": "InlineAssembly",
                        "src": "7949:160:13"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "8127:124:13",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8141:24:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8150:3:13",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "8159:1:13"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "8162:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "8155:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8155:9:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "8146:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8146:19:13"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "8141:1:13"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8178:20:13",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8191:3:13",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "8196:1:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "8187:3:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8187:11:13"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "8182:1:13",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8211:30:13",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8223:5:13"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8234:2:13",
                                        "type": "",
                                        "value": "50"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "8238:1:13"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8230:3:13"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8230:10:13"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "8220:2:13"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8220:21:13"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "8211:5:13"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8211:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1831,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8223:5:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8141:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8159:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8162:1:13",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1793,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8196:1:13",
                            "valueSize": 1
                          }
                        ],
                        "id": 1855,
                        "nodeType": "InlineAssembly",
                        "src": "8118:133:13"
                      },
                      {
                        "assignments": [
                          1857
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1857,
                            "mutability": "mutable",
                            "name": "log_sqrt10001",
                            "nodeType": "VariableDeclaration",
                            "scope": 1902,
                            "src": "8261:20:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1856,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8261:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1861,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 1860,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1858,
                            "name": "log_2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1831,
                            "src": "8284:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "hexValue": "323535373338393538393939363033383236333437313431",
                            "id": 1859,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8292:24:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_255738958999603826347141_by_1",
                              "typeString": "int_const 255738958999603826347141"
                            },
                            "value": "255738958999603826347141"
                          },
                          "src": "8284:32:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8261:55:13"
                      },
                      {
                        "assignments": [
                          1863
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1863,
                            "mutability": "mutable",
                            "name": "tickLow",
                            "nodeType": "VariableDeclaration",
                            "scope": 1902,
                            "src": "8345:13:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 1862,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "8345:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1873,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 1871,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 1868,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1866,
                                      "name": "log_sqrt10001",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1857,
                                      "src": "8368:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "33343032393932393536383039313332343138353936313430313030363630323437323130",
                                      "id": 1867,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8384:37:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3402992956809132418596140100660247210_by_1",
                                        "typeString": "int_const 3402...(29 digits omitted)...7210"
                                      },
                                      "value": "3402992956809132418596140100660247210"
                                    },
                                    "src": "8368:53:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "id": 1869,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "8367:55:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1870,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8426:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "8367:62:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1865,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8361:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int24_$",
                              "typeString": "type(int24)"
                            },
                            "typeName": {
                              "id": 1864,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "8361:5:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1872,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8361:69:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8345:85:13"
                      },
                      {
                        "assignments": [
                          1875
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1875,
                            "mutability": "mutable",
                            "name": "tickHi",
                            "nodeType": "VariableDeclaration",
                            "scope": 1902,
                            "src": "8440:12:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 1874,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "8440:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1885,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 1883,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 1880,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1878,
                                      "name": "log_sqrt10001",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1857,
                                      "src": "8462:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "hexValue": "323931333339343634373731393839363232393037303237363231313533333938303838343935",
                                      "id": 1879,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8478:39:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_291339464771989622907027621153398088495_by_1",
                                        "typeString": "int_const 2913...(31 digits omitted)...8495"
                                      },
                                      "value": "291339464771989622907027621153398088495"
                                    },
                                    "src": "8462:55:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "id": 1881,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "8461:57:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 1882,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8522:3:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "8461:64:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1877,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8455:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int24_$",
                              "typeString": "type(int24)"
                            },
                            "typeName": {
                              "id": 1876,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "8455:5:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1884,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8455:71:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8440:86:13"
                      },
                      {
                        "expression": {
                          "id": 1900,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1886,
                            "name": "tick",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "8537:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              },
                              "id": 1889,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1887,
                                "name": "tickLow",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1863,
                                "src": "8544:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 1888,
                                "name": "tickHi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1875,
                                "src": "8555:6:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "src": "8544:17:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 1895,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 1892,
                                      "name": "tickHi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1875,
                                      "src": "8617:6:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    ],
                                    "id": 1891,
                                    "name": "getSqrtRatioAtTick",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1764,
                                    "src": "8598:18:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_uint160_$",
                                      "typeString": "function (int24) pure returns (uint160)"
                                    }
                                  },
                                  "id": 1893,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8598:26:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "id": 1894,
                                  "name": "sqrtPriceX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1767,
                                  "src": "8628:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "8598:42:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "id": 1897,
                                "name": "tickLow",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1863,
                                "src": "8684:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "id": 1898,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "8598:93:13",
                              "trueExpression": {
                                "id": 1896,
                                "name": "tickHi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1875,
                                "src": "8659:6:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "id": 1899,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "8544:147:13",
                            "trueExpression": {
                              "id": 1890,
                              "name": "tickLow",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1863,
                              "src": "8576:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "8537:154:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "id": 1901,
                        "nodeType": "ExpressionStatement",
                        "src": "8537:154:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1765,
                    "nodeType": "StructuredDocumentation",
                    "src": "3948:408:13",
                    "text": "@notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\n @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may\n ever return.\n @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\n @return tick The greatest tick for which the ratio is less than or equal to the input ratio"
                  },
                  "id": 1903,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTickAtSqrtRatio",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1768,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1767,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 1903,
                        "src": "4389:20:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 1766,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "4389:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4388:22:13"
                  },
                  "returnParameters": {
                    "id": 1771,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1770,
                        "mutability": "mutable",
                        "name": "tick",
                        "nodeType": "VariableDeclaration",
                        "scope": 1903,
                        "src": "4434:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 1769,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "4434:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4433:12:13"
                  },
                  "scope": 1904,
                  "src": "4361:4337:13",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1905,
              "src": "313:8387:13"
            }
          ],
          "src": "45:8656:13"
        },
        "id": 13
      },
      "@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol",
          "exportedSymbols": {
            "BlockTimestamp": [
              1918
            ]
          },
          "id": 1919,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1906,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:14"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1907,
                "nodeType": "StructuredDocumentation",
                "src": "70:100:14",
                "text": "@title Function for getting block timestamp\n @dev Base contract that is overridden for tests"
              },
              "fullyImplemented": true,
              "id": 1918,
              "linearizedBaseContracts": [
                1918
              ],
              "name": "BlockTimestamp",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1916,
                    "nodeType": "Block",
                    "src": "386:39:14",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 1913,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "403:5:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 1914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "403:15:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1912,
                        "id": 1915,
                        "nodeType": "Return",
                        "src": "396:22:14"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1908,
                    "nodeType": "StructuredDocumentation",
                    "src": "209:105:14",
                    "text": "@dev Method that exists purely to be overridden for tests\n @return The current block timestamp"
                  },
                  "id": 1917,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_blockTimestamp",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1909,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "343:2:14"
                  },
                  "returnParameters": {
                    "id": 1912,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1911,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 1917,
                        "src": "377:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1910,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "377:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "376:9:14"
                  },
                  "scope": 1918,
                  "src": "319:106:14",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 1919,
              "src": "170:257:14"
            }
          ],
          "src": "45:383:14"
        },
        "id": 14
      },
      "@airdao/astra-cl-periphery/contracts/base/Multicall.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/base/Multicall.sol",
          "exportedSymbols": {
            "IMulticall": [
              2662
            ],
            "Multicall": [
              2003
            ]
          },
          "id": 2004,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1920,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:15"
            },
            {
              "id": 1921,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:15"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol",
              "file": "../interfaces/IMulticall.sol",
              "id": 1922,
              "nodeType": "ImportDirective",
              "scope": 2004,
              "sourceUnit": 2663,
              "src": "90:38:15",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1924,
                    "name": "IMulticall",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2662,
                    "src": "260:10:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IMulticall_$2662",
                      "typeString": "contract IMulticall"
                    }
                  },
                  "id": 1925,
                  "nodeType": "InheritanceSpecifier",
                  "src": "260:10:15"
                }
              ],
              "contractDependencies": [
                2662
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 1923,
                "nodeType": "StructuredDocumentation",
                "src": "130:99:15",
                "text": "@title Multicall\n @notice Enables calling multiple methods in a single call to the contract"
              },
              "fullyImplemented": true,
              "id": 2003,
              "linearizedBaseContracts": [
                2003,
                2662
              ],
              "name": "Multicall",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    2661
                  ],
                  "body": {
                    "id": 2001,
                    "nodeType": "Block",
                    "src": "407:554:15",
                    "statements": [
                      {
                        "expression": {
                          "id": 1943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1936,
                            "name": "results",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1934,
                            "src": "417:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                              "typeString": "bytes memory[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 1940,
                                  "name": "data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1929,
                                  "src": "439:4:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "bytes calldata[] calldata"
                                  }
                                },
                                "id": 1941,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "439:11:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1939,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "427:11:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (bytes memory[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 1937,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "431:5:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                  }
                                },
                                "id": 1938,
                                "nodeType": "ArrayTypeName",
                                "src": "431:7:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                                  "typeString": "bytes[]"
                                }
                              }
                            },
                            "id": 1942,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "427:24:15",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                              "typeString": "bytes memory[] memory"
                            }
                          },
                          "src": "417:34:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                            "typeString": "bytes memory[] memory"
                          }
                        },
                        "id": 1944,
                        "nodeType": "ExpressionStatement",
                        "src": "417:34:15"
                      },
                      {
                        "body": {
                          "id": 1999,
                          "nodeType": "Block",
                          "src": "503:452:15",
                          "statements": [
                            {
                              "assignments": [
                                1957,
                                1959
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1957,
                                  "mutability": "mutable",
                                  "name": "success",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1999,
                                  "src": "518:12:15",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 1956,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "518:4:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 1959,
                                  "mutability": "mutable",
                                  "name": "result",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1999,
                                  "src": "532:19:15",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 1958,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "532:5:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1969,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 1965,
                                      "name": "data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1929,
                                      "src": "582:4:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                        "typeString": "bytes calldata[] calldata"
                                      }
                                    },
                                    "id": 1967,
                                    "indexExpression": {
                                      "id": 1966,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1946,
                                      "src": "587:1:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "582:7:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 1962,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -28,
                                        "src": "563:4:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_Multicall_$2003",
                                          "typeString": "contract Multicall"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_Multicall_$2003",
                                          "typeString": "contract Multicall"
                                        }
                                      ],
                                      "id": 1961,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "555:7:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1960,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "555:7:15",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1963,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "555:13:15",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "id": 1964,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "delegatecall",
                                  "nodeType": "MemberAccess",
                                  "src": "555:26:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) returns (bool,bytes memory)"
                                  }
                                },
                                "id": 1968,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "555:35:15",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                  "typeString": "tuple(bool,bytes memory)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "517:73:15"
                            },
                            {
                              "condition": {
                                "id": 1971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "!",
                                "prefix": true,
                                "src": "609:8:15",
                                "subExpression": {
                                  "id": 1970,
                                  "name": "success",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1957,
                                  "src": "610:7:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1992,
                              "nodeType": "IfStatement",
                              "src": "605:306:15",
                              "trueBody": {
                                "id": 1991,
                                "nodeType": "Block",
                                "src": "619:292:15",
                                "statements": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1975,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 1972,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1959,
                                          "src": "721:6:15",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 1973,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "src": "721:13:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "hexValue": "3638",
                                        "id": 1974,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "737:2:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_68_by_1",
                                          "typeString": "int_const 68"
                                        },
                                        "value": "68"
                                      },
                                      "src": "721:18:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 1979,
                                    "nodeType": "IfStatement",
                                    "src": "717:32:15",
                                    "trueBody": {
                                      "expression": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "id": 1976,
                                          "name": "revert",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [
                                            -19,
                                            -19
                                          ],
                                          "referencedDeclaration": -19,
                                          "src": "741:6:15",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                                            "typeString": "function () pure"
                                          }
                                        },
                                        "id": 1977,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "741:8:15",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$__$",
                                          "typeString": "tuple()"
                                        }
                                      },
                                      "id": 1978,
                                      "nodeType": "ExpressionStatement",
                                      "src": "741:8:15"
                                    }
                                  },
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "776:67:15",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "798:27:15",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "result",
                                                "nodeType": "YulIdentifier",
                                                "src": "812:6:15"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "820:4:15",
                                                "type": "",
                                                "value": "0x04"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "808:3:15"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "808:17:15"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "result",
                                              "nodeType": "YulIdentifier",
                                              "src": "798:6:15"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                      {
                                        "declaration": 1959,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "798:6:15",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 1959,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "812:6:15",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 1980,
                                    "nodeType": "InlineAssembly",
                                    "src": "767:76:15"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "id": 1984,
                                              "name": "result",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1959,
                                              "src": "878:6:15",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            {
                                              "components": [
                                                {
                                                  "id": 1986,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "887:6:15",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                    "typeString": "type(string storage pointer)"
                                                  },
                                                  "typeName": {
                                                    "id": 1985,
                                                    "name": "string",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "887:6:15",
                                                    "typeDescriptions": {}
                                                  }
                                                }
                                              ],
                                              "id": 1987,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "886:8:15",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              },
                                              {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                              }
                                            ],
                                            "expression": {
                                              "id": 1982,
                                              "name": "abi",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -1,
                                              "src": "867:3:15",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_abi",
                                                "typeString": "abi"
                                              }
                                            },
                                            "id": 1983,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "decode",
                                            "nodeType": "MemberAccess",
                                            "src": "867:10:15",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                              "typeString": "function () pure"
                                            }
                                          },
                                          "id": 1988,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "867:28:15",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        ],
                                        "id": 1981,
                                        "name": "revert",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [
                                          -19,
                                          -19
                                        ],
                                        "referencedDeclaration": -19,
                                        "src": "860:6:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                          "typeString": "function (string memory) pure"
                                        }
                                      },
                                      "id": 1989,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "860:36:15",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 1990,
                                    "nodeType": "ExpressionStatement",
                                    "src": "860:36:15"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "id": 1997,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 1993,
                                    "name": "results",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1934,
                                    "src": "925:7:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                                      "typeString": "bytes memory[] memory"
                                    }
                                  },
                                  "id": 1995,
                                  "indexExpression": {
                                    "id": 1994,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1946,
                                    "src": "933:1:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "925:10:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 1996,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1959,
                                  "src": "938:6:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "src": "925:19:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1998,
                              "nodeType": "ExpressionStatement",
                              "src": "925:19:15"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1949,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1946,
                            "src": "481:1:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 1950,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1929,
                              "src": "485:4:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "bytes calldata[] calldata"
                              }
                            },
                            "id": 1951,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "485:11:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "481:15:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2000,
                        "initializationExpression": {
                          "assignments": [
                            1946
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1946,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 2000,
                              "src": "466:9:15",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1945,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "466:7:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 1948,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 1947,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "478:1:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "466:13:15"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 1954,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "498:3:15",
                            "subExpression": {
                              "id": 1953,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1946,
                              "src": "498:1:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1955,
                          "nodeType": "ExpressionStatement",
                          "src": "498:3:15"
                        },
                        "nodeType": "ForStatement",
                        "src": "461:494:15"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1926,
                    "nodeType": "StructuredDocumentation",
                    "src": "277:26:15",
                    "text": "@inheritdoc IMulticall"
                  },
                  "functionSelector": "ac9650d8",
                  "id": 2002,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "multicall",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1931,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "365:8:15"
                  },
                  "parameters": {
                    "id": 1930,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1929,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 2002,
                        "src": "327:21:15",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1927,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "327:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 1928,
                          "nodeType": "ArrayTypeName",
                          "src": "327:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "326:23:15"
                  },
                  "returnParameters": {
                    "id": 1935,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1934,
                        "mutability": "mutable",
                        "name": "results",
                        "nodeType": "VariableDeclaration",
                        "scope": 2002,
                        "src": "383:22:15",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1932,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "383:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 1933,
                          "nodeType": "ArrayTypeName",
                          "src": "383:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "382:24:15"
                  },
                  "scope": 2003,
                  "src": "308:653:15",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 2004,
              "src": "229:734:15"
            }
          ],
          "src": "45:919:15"
        },
        "id": 15
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
          "exportedSymbols": {
            "IPeripheryImmutableState": [
              2872
            ],
            "PeripheryImmutableState": [
              2034
            ]
          },
          "id": 2035,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2005,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:16"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol",
              "file": "../interfaces/IPeripheryImmutableState.sol",
              "id": 2006,
              "nodeType": "ImportDirective",
              "scope": 2035,
              "sourceUnit": 2873,
              "src": "70:52:16",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2008,
                    "name": "IPeripheryImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2872,
                    "src": "252:24:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPeripheryImmutableState_$2872",
                      "typeString": "contract IPeripheryImmutableState"
                    }
                  },
                  "id": 2009,
                  "nodeType": "InheritanceSpecifier",
                  "src": "252:24:16"
                }
              ],
              "contractDependencies": [
                2872
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 2007,
                "nodeType": "StructuredDocumentation",
                "src": "124:83:16",
                "text": "@title Immutable state\n @notice Immutable state used by periphery contracts"
              },
              "fullyImplemented": true,
              "id": 2034,
              "linearizedBaseContracts": [
                2034,
                2872
              ],
              "name": "PeripheryImmutableState",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    2865
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 2010,
                    "nodeType": "StructuredDocumentation",
                    "src": "283:40:16",
                    "text": "@inheritdoc IPeripheryImmutableState"
                  },
                  "functionSelector": "c45a0155",
                  "id": 2013,
                  "mutability": "immutable",
                  "name": "factory",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 2012,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "353:8:16"
                  },
                  "scope": 2034,
                  "src": "328:41:16",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2011,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "328:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2871
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 2014,
                    "nodeType": "StructuredDocumentation",
                    "src": "375:40:16",
                    "text": "@inheritdoc IPeripheryImmutableState"
                  },
                  "functionSelector": "90793ea8",
                  "id": 2017,
                  "mutability": "immutable",
                  "name": "SAMB",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 2016,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "445:8:16"
                  },
                  "scope": 2034,
                  "src": "420:38:16",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2015,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "420:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2032,
                    "nodeType": "Block",
                    "src": "510:57:16",
                    "statements": [
                      {
                        "expression": {
                          "id": 2026,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2024,
                            "name": "factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2013,
                            "src": "520:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2025,
                            "name": "_factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2019,
                            "src": "530:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "520:18:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2027,
                        "nodeType": "ExpressionStatement",
                        "src": "520:18:16"
                      },
                      {
                        "expression": {
                          "id": 2030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2028,
                            "name": "SAMB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2017,
                            "src": "548:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2029,
                            "name": "_SAMB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2021,
                            "src": "555:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "548:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2031,
                        "nodeType": "ExpressionStatement",
                        "src": "548:12:16"
                      }
                    ]
                  },
                  "id": 2033,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2022,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2019,
                        "mutability": "mutable",
                        "name": "_factory",
                        "nodeType": "VariableDeclaration",
                        "scope": 2033,
                        "src": "477:16:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2018,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "477:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2021,
                        "mutability": "mutable",
                        "name": "_SAMB",
                        "nodeType": "VariableDeclaration",
                        "scope": 2033,
                        "src": "495:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2020,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "495:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "476:33:16"
                  },
                  "returnParameters": {
                    "id": 2023,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "510:0:16"
                  },
                  "scope": 2034,
                  "src": "465:102:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 2035,
              "src": "207:362:16"
            }
          ],
          "src": "45:525:16"
        },
        "id": 16
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol",
          "exportedSymbols": {
            "IERC20": [
              5876
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IPeripheryPayments": [
              2898
            ],
            "ISAMB": [
              3059
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PeripheryPayments": [
              2244
            ],
            "TransferHelper": [
              4225
            ]
          },
          "id": 2245,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2036,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:17"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 2037,
              "nodeType": "ImportDirective",
              "scope": 2245,
              "sourceUnit": 5877,
              "src": "71:56:17",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol",
              "file": "../interfaces/IPeripheryPayments.sol",
              "id": 2038,
              "nodeType": "ImportDirective",
              "scope": 2245,
              "sourceUnit": 2899,
              "src": "129:46:17",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol",
              "file": "../interfaces/external/ISAMB.sol",
              "id": 2039,
              "nodeType": "ImportDirective",
              "scope": 2245,
              "sourceUnit": 3060,
              "src": "176:42:17",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol",
              "file": "../libraries/TransferHelper.sol",
              "id": 2040,
              "nodeType": "ImportDirective",
              "scope": 2245,
              "sourceUnit": 4226,
              "src": "220:41:17",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "file": "./PeripheryImmutableState.sol",
              "id": 2041,
              "nodeType": "ImportDirective",
              "scope": 2245,
              "sourceUnit": 2035,
              "src": "263:39:17",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2042,
                    "name": "IPeripheryPayments",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2898,
                    "src": "343:18:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPeripheryPayments_$2898",
                      "typeString": "contract IPeripheryPayments"
                    }
                  },
                  "id": 2043,
                  "nodeType": "InheritanceSpecifier",
                  "src": "343:18:17"
                },
                {
                  "baseName": {
                    "id": 2044,
                    "name": "PeripheryImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2034,
                    "src": "363:23:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryImmutableState_$2034",
                      "typeString": "contract PeripheryImmutableState"
                    }
                  },
                  "id": 2045,
                  "nodeType": "InheritanceSpecifier",
                  "src": "363:23:17"
                }
              ],
              "contractDependencies": [
                2034,
                2872,
                2898
              ],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 2244,
              "linearizedBaseContracts": [
                2244,
                2034,
                2872,
                2898
              ],
              "name": "PeripheryPayments",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 2056,
                    "nodeType": "Block",
                    "src": "420:56:17",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 2052,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2049,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "438:3:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2050,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "438:10:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 2051,
                                "name": "SAMB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2017,
                                "src": "452:4:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "438:18:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e6f742053414d42",
                              "id": 2053,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "458:10:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9742e45cbdcfb33441b71c5e16cad2d39cf9a5067bcabd680e872cd9d5b8a313",
                                "typeString": "literal_string \"Not SAMB\""
                              },
                              "value": "Not SAMB"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9742e45cbdcfb33441b71c5e16cad2d39cf9a5067bcabd680e872cd9d5b8a313",
                                "typeString": "literal_string \"Not SAMB\""
                              }
                            ],
                            "id": 2048,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "430:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "430:39:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2055,
                        "nodeType": "ExpressionStatement",
                        "src": "430:39:17"
                      }
                    ]
                  },
                  "id": 2057,
                  "implemented": true,
                  "kind": "receive",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2046,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "400:2:17"
                  },
                  "returnParameters": {
                    "id": 2047,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "420:0:17"
                  },
                  "scope": 2244,
                  "src": "393:83:17",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2883
                  ],
                  "body": {
                    "id": 2104,
                    "nodeType": "Block",
                    "src": "607:300:17",
                    "statements": [
                      {
                        "assignments": [
                          2067
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2067,
                            "mutability": "mutable",
                            "name": "balanceSAMB",
                            "nodeType": "VariableDeclaration",
                            "scope": 2104,
                            "src": "617:19:17",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2066,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "617:7:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2077,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2074,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "669:4:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                    "typeString": "contract PeripheryPayments"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                    "typeString": "contract PeripheryPayments"
                                  }
                                ],
                                "id": 2073,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "661:7:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2072,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "661:7:17",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2075,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "661:13:17",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2069,
                                  "name": "SAMB",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2017,
                                  "src": "645:4:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2068,
                                "name": "ISAMB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3059,
                                "src": "639:5:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ISAMB_$3059_$",
                                  "typeString": "type(contract ISAMB)"
                                }
                              },
                              "id": 2070,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "639:11:17",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISAMB_$3059",
                                "typeString": "contract ISAMB"
                              }
                            },
                            "id": 2071,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5815,
                            "src": "639:21:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 2076,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "639:36:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "617:58:17"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2081,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2079,
                                "name": "balanceSAMB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2067,
                                "src": "693:11:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 2080,
                                "name": "amountMinimum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2060,
                                "src": "708:13:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "693:28:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "496e73756666696369656e742053414d42",
                              "id": 2082,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "723:19:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_28ab92c5d6f07031eb580ee0e2845547a46c2cf150bdb8c12bcaa66335c7464f",
                                "typeString": "literal_string \"Insufficient SAMB\""
                              },
                              "value": "Insufficient SAMB"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_28ab92c5d6f07031eb580ee0e2845547a46c2cf150bdb8c12bcaa66335c7464f",
                                "typeString": "literal_string \"Insufficient SAMB\""
                              }
                            ],
                            "id": 2078,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "685:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "685:58:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2084,
                        "nodeType": "ExpressionStatement",
                        "src": "685:58:17"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2085,
                            "name": "balanceSAMB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2067,
                            "src": "758:11:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2086,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "772:1:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "758:15:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2103,
                        "nodeType": "IfStatement",
                        "src": "754:147:17",
                        "trueBody": {
                          "id": 2102,
                          "nodeType": "Block",
                          "src": "775:126:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2092,
                                    "name": "balanceSAMB",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2067,
                                    "src": "810:11:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 2089,
                                        "name": "SAMB",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2017,
                                        "src": "795:4:17",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 2088,
                                      "name": "ISAMB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3059,
                                      "src": "789:5:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ISAMB_$3059_$",
                                        "typeString": "type(contract ISAMB)"
                                      }
                                    },
                                    "id": 2090,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "789:11:17",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ISAMB_$3059",
                                      "typeString": "contract ISAMB"
                                    }
                                  },
                                  "id": 2091,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "withdraw",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3058,
                                  "src": "789:20:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) external"
                                  }
                                },
                                "id": 2093,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "789:33:17",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2094,
                              "nodeType": "ExpressionStatement",
                              "src": "789:33:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2098,
                                    "name": "recipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2062,
                                    "src": "867:9:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 2099,
                                    "name": "balanceSAMB",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2067,
                                    "src": "878:11:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 2095,
                                    "name": "TransferHelper",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4225,
                                    "src": "836:14:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_TransferHelper_$4225_$",
                                      "typeString": "type(library TransferHelper)"
                                    }
                                  },
                                  "id": 2097,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "safeTransferAMB",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4224,
                                  "src": "836:30:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256)"
                                  }
                                },
                                "id": 2100,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "836:54:17",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2101,
                              "nodeType": "ExpressionStatement",
                              "src": "836:54:17"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2058,
                    "nodeType": "StructuredDocumentation",
                    "src": "482:34:17",
                    "text": "@inheritdoc IPeripheryPayments"
                  },
                  "functionSelector": "a98ce37f",
                  "id": 2105,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unwrapSAMB",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2064,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "598:8:17"
                  },
                  "parameters": {
                    "id": 2063,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2060,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 2105,
                        "src": "541:21:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2059,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "541:7:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2062,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2105,
                        "src": "564:17:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2061,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "564:7:17",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "540:42:17"
                  },
                  "returnParameters": {
                    "id": 2065,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "607:0:17"
                  },
                  "scope": 2244,
                  "src": "521:386:17",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2897
                  ],
                  "body": {
                    "id": 2148,
                    "nodeType": "Block",
                    "src": "1053:264:17",
                    "statements": [
                      {
                        "assignments": [
                          2117
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2117,
                            "mutability": "mutable",
                            "name": "balanceToken",
                            "nodeType": "VariableDeclaration",
                            "scope": 2148,
                            "src": "1063:20:17",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2116,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1063:7:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2127,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2124,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1118:4:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                    "typeString": "contract PeripheryPayments"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                    "typeString": "contract PeripheryPayments"
                                  }
                                ],
                                "id": 2123,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1110:7:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2122,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1110:7:17",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2125,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1110:13:17",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2119,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2108,
                                  "src": "1093:5:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2118,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5876,
                                "src": "1086:6:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 2120,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1086:13:17",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$5876",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 2121,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5815,
                            "src": "1086:23:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 2126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1086:38:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1063:61:17"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2129,
                                "name": "balanceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2117,
                                "src": "1142:12:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 2130,
                                "name": "amountMinimum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2110,
                                "src": "1158:13:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1142:29:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "496e73756666696369656e7420746f6b656e",
                              "id": 2132,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1173:20:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2cf3b53843c7738cfb0b95230b455802cee89f2ea29be4a30eee707228c97571",
                                "typeString": "literal_string \"Insufficient token\""
                              },
                              "value": "Insufficient token"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2cf3b53843c7738cfb0b95230b455802cee89f2ea29be4a30eee707228c97571",
                                "typeString": "literal_string \"Insufficient token\""
                              }
                            ],
                            "id": 2128,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1134:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1134:60:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2134,
                        "nodeType": "ExpressionStatement",
                        "src": "1134:60:17"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2135,
                            "name": "balanceToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2117,
                            "src": "1209:12:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1224:1:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1209:16:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2147,
                        "nodeType": "IfStatement",
                        "src": "1205:106:17",
                        "trueBody": {
                          "id": 2146,
                          "nodeType": "Block",
                          "src": "1227:84:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2141,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2108,
                                    "src": "1269:5:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 2142,
                                    "name": "recipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2112,
                                    "src": "1276:9:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 2143,
                                    "name": "balanceToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2117,
                                    "src": "1287:12:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 2138,
                                    "name": "TransferHelper",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4225,
                                    "src": "1241:14:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_TransferHelper_$4225_$",
                                      "typeString": "type(library TransferHelper)"
                                    }
                                  },
                                  "id": 2140,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "safeTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4152,
                                  "src": "1241:27:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256)"
                                  }
                                },
                                "id": 2144,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1241:59:17",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2145,
                              "nodeType": "ExpressionStatement",
                              "src": "1241:59:17"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2106,
                    "nodeType": "StructuredDocumentation",
                    "src": "913:34:17",
                    "text": "@inheritdoc IPeripheryPayments"
                  },
                  "functionSelector": "df2ab5bb",
                  "id": 2149,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sweepToken",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2114,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1044:8:17"
                  },
                  "parameters": {
                    "id": 2113,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2108,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 2149,
                        "src": "972:13:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2107,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "972:7:17",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2110,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 2149,
                        "src": "987:21:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2109,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "987:7:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2112,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2149,
                        "src": "1010:17:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2111,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1010:7:17",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "971:57:17"
                  },
                  "returnParameters": {
                    "id": 2115,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1053:0:17"
                  },
                  "scope": 2244,
                  "src": "952:365:17",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2887
                  ],
                  "body": {
                    "id": 2174,
                    "nodeType": "Block",
                    "src": "1409:113:17",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2160,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2156,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1431:4:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                    "typeString": "contract PeripheryPayments"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                    "typeString": "contract PeripheryPayments"
                                  }
                                ],
                                "id": 2155,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1423:7:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2154,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1423:7:17",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2157,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1423:13:17",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 2158,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "src": "1423:21:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2159,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1447:1:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1423:25:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2173,
                        "nodeType": "IfStatement",
                        "src": "1419:96:17",
                        "trueBody": {
                          "expression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 2164,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1481:3:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2165,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1481:10:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 2168,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "1501:4:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                        "typeString": "contract PeripheryPayments"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                        "typeString": "contract PeripheryPayments"
                                      }
                                    ],
                                    "id": 2167,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1493:7:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 2166,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1493:7:17",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 2169,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1493:13:17",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "id": 2170,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "1493:21:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 2161,
                                "name": "TransferHelper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4225,
                                "src": "1450:14:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_TransferHelper_$4225_$",
                                  "typeString": "type(library TransferHelper)"
                                }
                              },
                              "id": 2163,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "safeTransferAMB",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4224,
                              "src": "1450:30:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                "typeString": "function (address,uint256)"
                              }
                            },
                            "id": 2171,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1450:65:17",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2172,
                          "nodeType": "ExpressionStatement",
                          "src": "1450:65:17"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2150,
                    "nodeType": "StructuredDocumentation",
                    "src": "1323:34:17",
                    "text": "@inheritdoc IPeripheryPayments"
                  },
                  "functionSelector": "c53af304",
                  "id": 2175,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "refundAMB",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2152,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1400:8:17"
                  },
                  "parameters": {
                    "id": 2151,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1380:2:17"
                  },
                  "returnParameters": {
                    "id": 2153,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1409:0:17"
                  },
                  "scope": 2244,
                  "src": "1362:160:17",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 2242,
                    "nodeType": "Block",
                    "src": "1799:569:17",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2197,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2189,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2187,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2178,
                              "src": "1813:5:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 2188,
                              "name": "SAMB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2017,
                              "src": "1822:4:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "1813:13:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2196,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2192,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "1838:4:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                      "typeString": "contract PeripheryPayments"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                      "typeString": "contract PeripheryPayments"
                                    }
                                  ],
                                  "id": 2191,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1830:7:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 2190,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1830:7:17",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2193,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1830:13:17",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 2194,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "src": "1830:21:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "id": 2195,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2184,
                              "src": "1855:5:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1830:30:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1813:47:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2220,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2215,
                              "name": "payer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2180,
                              "src": "2048:5:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "id": 2218,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "2065:4:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                    "typeString": "contract PeripheryPayments"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                                    "typeString": "contract PeripheryPayments"
                                  }
                                ],
                                "id": 2217,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2057:7:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2216,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2057:7:17",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2219,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2057:13:17",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "2048:22:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 2239,
                            "nodeType": "Block",
                            "src": "2246:116:17",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 2233,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2178,
                                      "src": "2320:5:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 2234,
                                      "name": "payer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2180,
                                      "src": "2327:5:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 2235,
                                      "name": "recipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2182,
                                      "src": "2334:9:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 2236,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2184,
                                      "src": "2345:5:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 2230,
                                      "name": "TransferHelper",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4225,
                                      "src": "2288:14:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_TransferHelper_$4225_$",
                                        "typeString": "type(library TransferHelper)"
                                      }
                                    },
                                    "id": 2232,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "safeTransferFrom",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4106,
                                    "src": "2288:31:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                      "typeString": "function (address,address,address,uint256)"
                                    }
                                  },
                                  "id": 2237,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2288:63:17",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 2238,
                                "nodeType": "ExpressionStatement",
                                "src": "2288:63:17"
                              }
                            ]
                          },
                          "id": 2240,
                          "nodeType": "IfStatement",
                          "src": "2044:318:17",
                          "trueBody": {
                            "id": 2229,
                            "nodeType": "Block",
                            "src": "2072:168:17",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 2224,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2178,
                                      "src": "2205:5:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 2225,
                                      "name": "recipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2182,
                                      "src": "2212:9:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 2226,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2184,
                                      "src": "2223:5:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 2221,
                                      "name": "TransferHelper",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4225,
                                      "src": "2177:14:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_TransferHelper_$4225_$",
                                        "typeString": "type(library TransferHelper)"
                                      }
                                    },
                                    "id": 2223,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "safeTransfer",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4152,
                                    "src": "2177:27:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                      "typeString": "function (address,address,uint256)"
                                    }
                                  },
                                  "id": 2227,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2177:52:17",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 2228,
                                "nodeType": "ExpressionStatement",
                                "src": "2177:52:17"
                              }
                            ]
                          }
                        },
                        "id": 2241,
                        "nodeType": "IfStatement",
                        "src": "1809:553:17",
                        "trueBody": {
                          "id": 2214,
                          "nodeType": "Block",
                          "src": "1862:176:17",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 2199,
                                          "name": "SAMB",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2017,
                                          "src": "1911:4:17",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 2198,
                                        "name": "ISAMB",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3059,
                                        "src": "1905:5:17",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_ISAMB_$3059_$",
                                          "typeString": "type(contract ISAMB)"
                                        }
                                      },
                                      "id": 2200,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1905:11:17",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ISAMB_$3059",
                                        "typeString": "contract ISAMB"
                                      }
                                    },
                                    "id": 2201,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "deposit",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3052,
                                    "src": "1905:19:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_payable$__$returns$__$",
                                      "typeString": "function () payable external"
                                    }
                                  },
                                  "id": 2203,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "names": [
                                    "value"
                                  ],
                                  "nodeType": "FunctionCallOptions",
                                  "options": [
                                    {
                                      "id": 2202,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2184,
                                      "src": "1932:5:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "src": "1905:33:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                                    "typeString": "function () payable external"
                                  }
                                },
                                "id": 2204,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1905:35:17",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2205,
                              "nodeType": "ExpressionStatement",
                              "src": "1905:35:17"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2210,
                                    "name": "recipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2182,
                                    "src": "2010:9:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 2211,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2184,
                                    "src": "2021:5:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 2207,
                                        "name": "SAMB",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2017,
                                        "src": "1995:4:17",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 2206,
                                      "name": "ISAMB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3059,
                                      "src": "1989:5:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ISAMB_$3059_$",
                                        "typeString": "type(contract ISAMB)"
                                      }
                                    },
                                    "id": 2208,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1989:11:17",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ISAMB_$3059",
                                      "typeString": "contract ISAMB"
                                    }
                                  },
                                  "id": 2209,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5825,
                                  "src": "1989:20:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,uint256) external returns (bool)"
                                  }
                                },
                                "id": 2212,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1989:38:17",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2213,
                              "nodeType": "ExpressionStatement",
                              "src": "1989:38:17"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2176,
                    "nodeType": "StructuredDocumentation",
                    "src": "1528:180:17",
                    "text": "@param token The token to pay\n @param payer The entity that must pay\n @param recipient The entity that will receive payment\n @param value The amount to pay"
                  },
                  "id": 2243,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pay",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2185,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2178,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 2243,
                        "src": "1726:13:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2177,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1726:7:17",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2180,
                        "mutability": "mutable",
                        "name": "payer",
                        "nodeType": "VariableDeclaration",
                        "scope": 2243,
                        "src": "1741:13:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2179,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1741:7:17",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2182,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2243,
                        "src": "1756:17:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2181,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1756:7:17",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2184,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 2243,
                        "src": "1775:13:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2183,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1775:7:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1725:64:17"
                  },
                  "returnParameters": {
                    "id": 2186,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1799:0:17"
                  },
                  "scope": 2244,
                  "src": "1713:655:17",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 2245,
              "src": "304:2066:17"
            }
          ],
          "src": "45:2326:17"
        },
        "id": 17
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol",
          "exportedSymbols": {
            "IERC20": [
              5876
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IPeripheryPayments": [
              2898
            ],
            "IPeripheryPaymentsWithFee": [
              2931
            ],
            "ISAMB": [
              3059
            ],
            "LowGasSafeMath": [
              1043
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PeripheryPayments": [
              2244
            ],
            "PeripheryPaymentsWithFee": [
              2425
            ],
            "TransferHelper": [
              4225
            ]
          },
          "id": 2426,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2246,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:18"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 2247,
              "nodeType": "ImportDirective",
              "scope": 2426,
              "sourceUnit": 5877,
              "src": "71:56:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol",
              "id": 2248,
              "nodeType": "ImportDirective",
              "scope": 2426,
              "sourceUnit": 1044,
              "src": "181:70:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol",
              "file": "./PeripheryPayments.sol",
              "id": 2249,
              "nodeType": "ImportDirective",
              "scope": 2426,
              "sourceUnit": 2245,
              "src": "253:33:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol",
              "file": "../interfaces/IPeripheryPaymentsWithFee.sol",
              "id": 2250,
              "nodeType": "ImportDirective",
              "scope": 2426,
              "sourceUnit": 2932,
              "src": "287:53:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol",
              "file": "../interfaces/external/ISAMB.sol",
              "id": 2251,
              "nodeType": "ImportDirective",
              "scope": 2426,
              "sourceUnit": 3060,
              "src": "342:42:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol",
              "file": "../libraries/TransferHelper.sol",
              "id": 2252,
              "nodeType": "ImportDirective",
              "scope": 2426,
              "sourceUnit": 4226,
              "src": "385:41:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2253,
                    "name": "PeripheryPayments",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2244,
                    "src": "474:17:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                      "typeString": "contract PeripheryPayments"
                    }
                  },
                  "id": 2254,
                  "nodeType": "InheritanceSpecifier",
                  "src": "474:17:18"
                },
                {
                  "baseName": {
                    "id": 2255,
                    "name": "IPeripheryPaymentsWithFee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2931,
                    "src": "493:25:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPeripheryPaymentsWithFee_$2931",
                      "typeString": "contract IPeripheryPaymentsWithFee"
                    }
                  },
                  "id": 2256,
                  "nodeType": "InheritanceSpecifier",
                  "src": "493:25:18"
                }
              ],
              "contractDependencies": [
                2034,
                2244,
                2872,
                2898,
                2931
              ],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 2425,
              "linearizedBaseContracts": [
                2425,
                2931,
                2244,
                2034,
                2872,
                2898
              ],
              "name": "PeripheryPaymentsWithFee",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 2259,
                  "libraryName": {
                    "id": 2257,
                    "name": "LowGasSafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1043,
                    "src": "531:14:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LowGasSafeMath_$1043",
                      "typeString": "library LowGasSafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "525:33:18",
                  "typeName": {
                    "id": 2258,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "550:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "baseFunctions": [
                    2916
                  ],
                  "body": {
                    "id": 2342,
                    "nodeType": "Block",
                    "src": "780:516:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 2279,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2275,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2273,
                                  "name": "feeBips",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2266,
                                  "src": "798:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 2274,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "808:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "798:11:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2278,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2276,
                                  "name": "feeBips",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2266,
                                  "src": "813:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "hexValue": "313030",
                                  "id": 2277,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "824:3:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_100_by_1",
                                    "typeString": "int_const 100"
                                  },
                                  "value": "100"
                                },
                                "src": "813:14:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "798:29:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2272,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "790:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "790:38:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2281,
                        "nodeType": "ExpressionStatement",
                        "src": "790:38:18"
                      },
                      {
                        "assignments": [
                          2283
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2283,
                            "mutability": "mutable",
                            "name": "balanceSAMB",
                            "nodeType": "VariableDeclaration",
                            "scope": 2342,
                            "src": "839:19:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2282,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "839:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2293,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2290,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "891:4:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PeripheryPaymentsWithFee_$2425",
                                    "typeString": "contract PeripheryPaymentsWithFee"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PeripheryPaymentsWithFee_$2425",
                                    "typeString": "contract PeripheryPaymentsWithFee"
                                  }
                                ],
                                "id": 2289,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "883:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2288,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "883:7:18",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2291,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "883:13:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2285,
                                  "name": "SAMB",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2017,
                                  "src": "867:4:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2284,
                                "name": "ISAMB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3059,
                                "src": "861:5:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ISAMB_$3059_$",
                                  "typeString": "type(contract ISAMB)"
                                }
                              },
                              "id": 2286,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "861:11:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISAMB_$3059",
                                "typeString": "contract ISAMB"
                              }
                            },
                            "id": 2287,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5815,
                            "src": "861:21:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 2292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "861:36:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "839:58:18"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2297,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2295,
                                "name": "balanceSAMB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2283,
                                "src": "915:11:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 2296,
                                "name": "amountMinimum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2262,
                                "src": "930:13:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "915:28:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "496e73756666696369656e742053414d42",
                              "id": 2298,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "945:19:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_28ab92c5d6f07031eb580ee0e2845547a46c2cf150bdb8c12bcaa66335c7464f",
                                "typeString": "literal_string \"Insufficient SAMB\""
                              },
                              "value": "Insufficient SAMB"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_28ab92c5d6f07031eb580ee0e2845547a46c2cf150bdb8c12bcaa66335c7464f",
                                "typeString": "literal_string \"Insufficient SAMB\""
                              }
                            ],
                            "id": 2294,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "907:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "907:58:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2300,
                        "nodeType": "ExpressionStatement",
                        "src": "907:58:18"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2301,
                            "name": "balanceSAMB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2283,
                            "src": "980:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2302,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "994:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "980:15:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2341,
                        "nodeType": "IfStatement",
                        "src": "976:314:18",
                        "trueBody": {
                          "id": 2340,
                          "nodeType": "Block",
                          "src": "997:293:18",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2308,
                                    "name": "balanceSAMB",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2283,
                                    "src": "1032:11:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 2305,
                                        "name": "SAMB",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2017,
                                        "src": "1017:4:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 2304,
                                      "name": "ISAMB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3059,
                                      "src": "1011:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ISAMB_$3059_$",
                                        "typeString": "type(contract ISAMB)"
                                      }
                                    },
                                    "id": 2306,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1011:11:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ISAMB_$3059",
                                      "typeString": "contract ISAMB"
                                    }
                                  },
                                  "id": 2307,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "withdraw",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3058,
                                  "src": "1011:20:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) external"
                                  }
                                },
                                "id": 2309,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1011:33:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2310,
                              "nodeType": "ExpressionStatement",
                              "src": "1011:33:18"
                            },
                            {
                              "assignments": [
                                2312
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2312,
                                  "mutability": "mutable",
                                  "name": "feeAmount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2340,
                                  "src": "1058:17:18",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2311,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1058:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2319,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2318,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 2315,
                                      "name": "feeBips",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2266,
                                      "src": "1094:7:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 2313,
                                      "name": "balanceSAMB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2283,
                                      "src": "1078:11:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2314,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 988,
                                    "src": "1078:15:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 2316,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1078:24:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "31305f303030",
                                  "id": 2317,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1105:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10000_by_1",
                                    "typeString": "int_const 10000"
                                  },
                                  "value": "10_000"
                                },
                                "src": "1078:33:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1058:53:18"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2322,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2320,
                                  "name": "feeAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2312,
                                  "src": "1129:9:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 2321,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1141:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "1129:13:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2330,
                              "nodeType": "IfStatement",
                              "src": "1125:74:18",
                              "trueBody": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 2326,
                                      "name": "feeRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2268,
                                      "src": "1175:12:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 2327,
                                      "name": "feeAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2312,
                                      "src": "1189:9:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 2323,
                                      "name": "TransferHelper",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4225,
                                      "src": "1144:14:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_TransferHelper_$4225_$",
                                        "typeString": "type(library TransferHelper)"
                                      }
                                    },
                                    "id": 2325,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "safeTransferAMB",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4224,
                                    "src": "1144:30:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                      "typeString": "function (address,uint256)"
                                    }
                                  },
                                  "id": 2328,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1144:55:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 2329,
                                "nodeType": "ExpressionStatement",
                                "src": "1144:55:18"
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2334,
                                    "name": "recipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2264,
                                    "src": "1244:9:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2337,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2335,
                                      "name": "balanceSAMB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2283,
                                      "src": "1255:11:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 2336,
                                      "name": "feeAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2312,
                                      "src": "1269:9:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1255:23:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 2331,
                                    "name": "TransferHelper",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4225,
                                    "src": "1213:14:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_TransferHelper_$4225_$",
                                      "typeString": "type(library TransferHelper)"
                                    }
                                  },
                                  "id": 2333,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "safeTransferAMB",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4224,
                                  "src": "1213:30:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256)"
                                  }
                                },
                                "id": 2338,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1213:66:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2339,
                              "nodeType": "ExpressionStatement",
                              "src": "1213:66:18"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2260,
                    "nodeType": "StructuredDocumentation",
                    "src": "564:41:18",
                    "text": "@inheritdoc IPeripheryPaymentsWithFee"
                  },
                  "functionSelector": "97e87d9d",
                  "id": 2343,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unwrapSAMBWithFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2270,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "771:8:18"
                  },
                  "parameters": {
                    "id": 2269,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2262,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 2343,
                        "src": "646:21:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2261,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "646:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2264,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2343,
                        "src": "677:17:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2263,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "677:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2266,
                        "mutability": "mutable",
                        "name": "feeBips",
                        "nodeType": "VariableDeclaration",
                        "scope": 2343,
                        "src": "704:15:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2265,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "704:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2268,
                        "mutability": "mutable",
                        "name": "feeRecipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2343,
                        "src": "729:20:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2267,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "729:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "636:119:18"
                  },
                  "returnParameters": {
                    "id": 2271,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "780:0:18"
                  },
                  "scope": 2425,
                  "src": "610:686:18",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2930
                  ],
                  "body": {
                    "id": 2423,
                    "nodeType": "Block",
                    "src": "1541:485:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 2365,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2361,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2359,
                                  "name": "feeBips",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2352,
                                  "src": "1559:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 2360,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1569:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "1559:11:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2364,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2362,
                                  "name": "feeBips",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2352,
                                  "src": "1574:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "hexValue": "313030",
                                  "id": 2363,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1585:3:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_100_by_1",
                                    "typeString": "int_const 100"
                                  },
                                  "value": "100"
                                },
                                "src": "1574:14:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1559:29:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2358,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1551:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2366,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1551:38:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2367,
                        "nodeType": "ExpressionStatement",
                        "src": "1551:38:18"
                      },
                      {
                        "assignments": [
                          2369
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2369,
                            "mutability": "mutable",
                            "name": "balanceToken",
                            "nodeType": "VariableDeclaration",
                            "scope": 2423,
                            "src": "1600:20:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2368,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1600:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2379,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2376,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1655:4:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PeripheryPaymentsWithFee_$2425",
                                    "typeString": "contract PeripheryPaymentsWithFee"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PeripheryPaymentsWithFee_$2425",
                                    "typeString": "contract PeripheryPaymentsWithFee"
                                  }
                                ],
                                "id": 2375,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1647:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2374,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1647:7:18",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2377,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1647:13:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2371,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2346,
                                  "src": "1630:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2370,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5876,
                                "src": "1623:6:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 2372,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1623:13:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$5876",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 2373,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5815,
                            "src": "1623:23:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 2378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1623:38:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1600:61:18"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2383,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2381,
                                "name": "balanceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2369,
                                "src": "1679:12:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 2382,
                                "name": "amountMinimum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2348,
                                "src": "1695:13:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1679:29:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "496e73756666696369656e7420746f6b656e",
                              "id": 2384,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1710:20:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2cf3b53843c7738cfb0b95230b455802cee89f2ea29be4a30eee707228c97571",
                                "typeString": "literal_string \"Insufficient token\""
                              },
                              "value": "Insufficient token"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2cf3b53843c7738cfb0b95230b455802cee89f2ea29be4a30eee707228c97571",
                                "typeString": "literal_string \"Insufficient token\""
                              }
                            ],
                            "id": 2380,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1671:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1671:60:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2386,
                        "nodeType": "ExpressionStatement",
                        "src": "1671:60:18"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2389,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2387,
                            "name": "balanceToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2369,
                            "src": "1746:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2388,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1761:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1746:16:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2422,
                        "nodeType": "IfStatement",
                        "src": "1742:278:18",
                        "trueBody": {
                          "id": 2421,
                          "nodeType": "Block",
                          "src": "1764:256:18",
                          "statements": [
                            {
                              "assignments": [
                                2391
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2391,
                                  "mutability": "mutable",
                                  "name": "feeAmount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2421,
                                  "src": "1778:17:18",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2390,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1778:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2398,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2397,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 2394,
                                      "name": "feeBips",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2352,
                                      "src": "1815:7:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 2392,
                                      "name": "balanceToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2369,
                                      "src": "1798:12:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2393,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 988,
                                    "src": "1798:16:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 2395,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1798:25:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "31305f303030",
                                  "id": 2396,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1826:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10000_by_1",
                                    "typeString": "int_const 10000"
                                  },
                                  "value": "10_000"
                                },
                                "src": "1798:34:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1778:54:18"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2401,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2399,
                                  "name": "feeAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2391,
                                  "src": "1850:9:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 2400,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1862:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "1850:13:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2410,
                              "nodeType": "IfStatement",
                              "src": "1846:78:18",
                              "trueBody": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 2405,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2346,
                                      "src": "1893:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 2406,
                                      "name": "feeRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2354,
                                      "src": "1900:12:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 2407,
                                      "name": "feeAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2391,
                                      "src": "1914:9:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 2402,
                                      "name": "TransferHelper",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4225,
                                      "src": "1865:14:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_TransferHelper_$4225_$",
                                        "typeString": "type(library TransferHelper)"
                                      }
                                    },
                                    "id": 2404,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "safeTransfer",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4152,
                                    "src": "1865:27:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                      "typeString": "function (address,address,uint256)"
                                    }
                                  },
                                  "id": 2408,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1865:59:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 2409,
                                "nodeType": "ExpressionStatement",
                                "src": "1865:59:18"
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2414,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2346,
                                    "src": "1966:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 2415,
                                    "name": "recipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2350,
                                    "src": "1973:9:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2418,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2416,
                                      "name": "balanceToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2369,
                                      "src": "1984:12:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 2417,
                                      "name": "feeAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2391,
                                      "src": "1999:9:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1984:24:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 2411,
                                    "name": "TransferHelper",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4225,
                                    "src": "1938:14:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_TransferHelper_$4225_$",
                                      "typeString": "type(library TransferHelper)"
                                    }
                                  },
                                  "id": 2413,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "safeTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4152,
                                  "src": "1938:27:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256)"
                                  }
                                },
                                "id": 2419,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1938:71:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2420,
                              "nodeType": "ExpressionStatement",
                              "src": "1938:71:18"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2344,
                    "nodeType": "StructuredDocumentation",
                    "src": "1302:41:18",
                    "text": "@inheritdoc IPeripheryPaymentsWithFee"
                  },
                  "functionSelector": "e0e189a0",
                  "id": 2424,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sweepTokenWithFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2356,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1532:8:18"
                  },
                  "parameters": {
                    "id": 2355,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2346,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 2424,
                        "src": "1384:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2345,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1384:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2348,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 2424,
                        "src": "1407:21:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2347,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1407:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2350,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2424,
                        "src": "1438:17:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2349,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1438:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2352,
                        "mutability": "mutable",
                        "name": "feeBips",
                        "nodeType": "VariableDeclaration",
                        "scope": 2424,
                        "src": "1465:15:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2351,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1465:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2354,
                        "mutability": "mutable",
                        "name": "feeRecipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2424,
                        "src": "1490:20:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2353,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1490:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1374:142:18"
                  },
                  "returnParameters": {
                    "id": 2357,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1541:0:18"
                  },
                  "scope": 2425,
                  "src": "1348:678:18",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 2426,
              "src": "428:1600:18"
            }
          ],
          "src": "45:1984:18"
        },
        "id": 18
      },
      "@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol",
          "exportedSymbols": {
            "BlockTimestamp": [
              1918
            ],
            "PeripheryValidation": [
              2445
            ]
          },
          "id": 2446,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2427,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:19"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol",
              "file": "./BlockTimestamp.sol",
              "id": 2428,
              "nodeType": "ImportDirective",
              "scope": 2446,
              "sourceUnit": 1919,
              "src": "70:30:19",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2429,
                    "name": "BlockTimestamp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1918,
                    "src": "143:14:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BlockTimestamp_$1918",
                      "typeString": "contract BlockTimestamp"
                    }
                  },
                  "id": 2430,
                  "nodeType": "InheritanceSpecifier",
                  "src": "143:14:19"
                }
              ],
              "contractDependencies": [
                1918
              ],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 2445,
              "linearizedBaseContracts": [
                2445,
                1918
              ],
              "name": "PeripheryValidation",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 2443,
                    "nodeType": "Block",
                    "src": "205:89:19",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2438,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 2435,
                                  "name": "_blockTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1917,
                                  "src": "223:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 2436,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "223:17:19",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 2437,
                                "name": "deadline",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2432,
                                "src": "244:8:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "223:29:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5472616e73616374696f6e20746f6f206f6c64",
                              "id": 2439,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "254:21:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c2621685b6a86291a4533558eb72fba04db12a0363db47624d86d9bbb608d293",
                                "typeString": "literal_string \"Transaction too old\""
                              },
                              "value": "Transaction too old"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c2621685b6a86291a4533558eb72fba04db12a0363db47624d86d9bbb608d293",
                                "typeString": "literal_string \"Transaction too old\""
                              }
                            ],
                            "id": 2434,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "215:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "215:61:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2441,
                        "nodeType": "ExpressionStatement",
                        "src": "215:61:19"
                      },
                      {
                        "id": 2442,
                        "nodeType": "PlaceholderStatement",
                        "src": "286:1:19"
                      }
                    ]
                  },
                  "id": 2444,
                  "name": "checkDeadline",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 2433,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2432,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nodeType": "VariableDeclaration",
                        "scope": 2444,
                        "src": "187:16:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2431,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "187:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "186:18:19"
                  },
                  "src": "164:130:19",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 2446,
              "src": "102:194:19"
            }
          ],
          "src": "45:252:19"
        },
        "id": 19
      },
      "@airdao/astra-cl-periphery/contracts/base/SelfPermit.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/base/SelfPermit.sol",
          "exportedSymbols": {
            "IERC20": [
              5876
            ],
            "IERC20Permit": [
              4928
            ],
            "IERC20PermitAllowed": [
              3042
            ],
            "ISelfPermit": [
              3018
            ],
            "SelfPermit": [
              2612
            ]
          },
          "id": 2613,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2447,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:20"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 2448,
              "nodeType": "ImportDirective",
              "scope": 2613,
              "sourceUnit": 5877,
              "src": "71:56:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/drafts/IERC20Permit.sol",
              "file": "@openzeppelin/contracts/drafts/IERC20Permit.sol",
              "id": 2449,
              "nodeType": "ImportDirective",
              "scope": 2613,
              "sourceUnit": 4929,
              "src": "128:57:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol",
              "file": "../interfaces/ISelfPermit.sol",
              "id": 2450,
              "nodeType": "ImportDirective",
              "scope": 2613,
              "sourceUnit": 3019,
              "src": "187:39:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol",
              "file": "../interfaces/external/IERC20PermitAllowed.sol",
              "id": 2451,
              "nodeType": "ImportDirective",
              "scope": 2613,
              "sourceUnit": 3043,
              "src": "227:56:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2453,
                    "name": "ISelfPermit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3018,
                    "src": "612:11:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISelfPermit_$3018",
                      "typeString": "contract ISelfPermit"
                    }
                  },
                  "id": 2454,
                  "nodeType": "InheritanceSpecifier",
                  "src": "612:11:20"
                }
              ],
              "contractDependencies": [
                3018
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 2452,
                "nodeType": "StructuredDocumentation",
                "src": "285:295:20",
                "text": "@title Self Permit\n @notice Functionality to call permit on any EIP-2612-compliant token for use in the route\n @dev These functions are expected to be embedded in multicalls to allow EOAs to approve a contract and call a function\n that requires an approval in a single transaction."
              },
              "fullyImplemented": true,
              "id": 2612,
              "linearizedBaseContracts": [
                2612,
                3018
              ],
              "name": "SelfPermit",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    2969
                  ],
                  "body": {
                    "id": 2488,
                    "nodeType": "Block",
                    "src": "839:96:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2475,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "876:3:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2476,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "876:10:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 2479,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "896:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_SelfPermit_$2612",
                                    "typeString": "contract SelfPermit"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_SelfPermit_$2612",
                                    "typeString": "contract SelfPermit"
                                  }
                                ],
                                "id": 2478,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "888:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2477,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "888:7:20",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2480,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "888:13:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2481,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2459,
                              "src": "903:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 2482,
                              "name": "deadline",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2461,
                              "src": "910:8:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 2483,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2463,
                              "src": "920:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 2484,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2465,
                              "src": "923:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 2485,
                              "name": "s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2467,
                              "src": "926:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2472,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2457,
                                  "src": "862:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2471,
                                "name": "IERC20Permit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4928,
                                "src": "849:12:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20Permit_$4928_$",
                                  "typeString": "type(contract IERC20Permit)"
                                }
                              },
                              "id": 2473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "849:19:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Permit_$4928",
                                "typeString": "contract IERC20Permit"
                              }
                            },
                            "id": 2474,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permit",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4913,
                            "src": "849:26:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"
                            }
                          },
                          "id": 2486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "849:79:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2487,
                        "nodeType": "ExpressionStatement",
                        "src": "849:79:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2455,
                    "nodeType": "StructuredDocumentation",
                    "src": "630:27:20",
                    "text": "@inheritdoc ISelfPermit"
                  },
                  "functionSelector": "f3995c67",
                  "id": 2489,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "selfPermit",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2469,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "830:8:20"
                  },
                  "parameters": {
                    "id": 2468,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2457,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 2489,
                        "src": "691:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2456,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "691:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2459,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 2489,
                        "src": "714:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2458,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "714:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2461,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nodeType": "VariableDeclaration",
                        "scope": 2489,
                        "src": "737:16:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2460,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "737:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2463,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 2489,
                        "src": "763:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2462,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "763:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2465,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 2489,
                        "src": "780:9:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2464,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "780:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2467,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 2489,
                        "src": "799:9:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2466,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "799:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "681:133:20"
                  },
                  "returnParameters": {
                    "id": 2470,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "839:0:20"
                  },
                  "scope": 2612,
                  "src": "662:273:20",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2985
                  ],
                  "body": {
                    "id": 2529,
                    "nodeType": "Block",
                    "src": "1163:124:20",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 2510,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1201:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2511,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1201:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 2514,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "1221:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_SelfPermit_$2612",
                                      "typeString": "contract SelfPermit"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_SelfPermit_$2612",
                                      "typeString": "contract SelfPermit"
                                    }
                                  ],
                                  "id": 2513,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1213:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 2512,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1213:7:20",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2515,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1213:13:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2507,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2492,
                                    "src": "1184:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2506,
                                  "name": "IERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5876,
                                  "src": "1177:6:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                    "typeString": "type(contract IERC20)"
                                  }
                                },
                                "id": 2508,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1177:13:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$5876",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 2509,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allowance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5835,
                              "src": "1177:23:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address,address) view external returns (uint256)"
                              }
                            },
                            "id": 2516,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1177:50:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 2517,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2494,
                            "src": "1230:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1177:58:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2528,
                        "nodeType": "IfStatement",
                        "src": "1173:107:20",
                        "trueBody": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 2520,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2492,
                                "src": "1248:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 2521,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2494,
                                "src": "1255:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 2522,
                                "name": "deadline",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2496,
                                "src": "1262:8:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 2523,
                                "name": "v",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2498,
                                "src": "1272:1:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 2524,
                                "name": "r",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2500,
                                "src": "1275:1:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 2525,
                                "name": "s",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2502,
                                "src": "1278:1:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 2519,
                              "name": "selfPermit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2489,
                              "src": "1237:10:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$",
                                "typeString": "function (address,uint256,uint256,uint8,bytes32,bytes32)"
                              }
                            },
                            "id": 2526,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1237:43:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2527,
                          "nodeType": "ExpressionStatement",
                          "src": "1237:43:20"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2490,
                    "nodeType": "StructuredDocumentation",
                    "src": "941:27:20",
                    "text": "@inheritdoc ISelfPermit"
                  },
                  "functionSelector": "c2e3140a",
                  "id": 2530,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "selfPermitIfNecessary",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2504,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1154:8:20"
                  },
                  "parameters": {
                    "id": 2503,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2492,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 2530,
                        "src": "1013:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2491,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1013:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2494,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 2530,
                        "src": "1036:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2493,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1036:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2496,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nodeType": "VariableDeclaration",
                        "scope": 2530,
                        "src": "1059:16:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2495,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1059:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2498,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 2530,
                        "src": "1085:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2497,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1085:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2500,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 2530,
                        "src": "1102:9:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2499,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1102:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2502,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 2530,
                        "src": "1121:9:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2501,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1121:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1003:133:20"
                  },
                  "returnParameters": {
                    "id": 2505,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1163:0:20"
                  },
                  "scope": 2612,
                  "src": "973:314:20",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3001
                  ],
                  "body": {
                    "id": 2565,
                    "nodeType": "Block",
                    "src": "1507:107:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2551,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1551:3:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2552,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1551:10:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 2555,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1571:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_SelfPermit_$2612",
                                    "typeString": "contract SelfPermit"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_SelfPermit_$2612",
                                    "typeString": "contract SelfPermit"
                                  }
                                ],
                                "id": 2554,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1563:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2553,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1563:7:20",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2556,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1563:13:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2557,
                              "name": "nonce",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2535,
                              "src": "1578:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 2558,
                              "name": "expiry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2537,
                              "src": "1585:6:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "74727565",
                              "id": 2559,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1593:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "id": 2560,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2539,
                              "src": "1599:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 2561,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2541,
                              "src": "1602:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 2562,
                              "name": "s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2543,
                              "src": "1605:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2548,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2533,
                                  "src": "1537:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2547,
                                "name": "IERC20PermitAllowed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3042,
                                "src": "1517:19:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20PermitAllowed_$3042_$",
                                  "typeString": "type(contract IERC20PermitAllowed)"
                                }
                              },
                              "id": 2549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1517:26:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20PermitAllowed_$3042",
                                "typeString": "contract IERC20PermitAllowed"
                              }
                            },
                            "id": 2550,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "permit",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3041,
                            "src": "1517:33:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256,bool,uint8,bytes32,bytes32) external"
                            }
                          },
                          "id": 2563,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1517:90:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2564,
                        "nodeType": "ExpressionStatement",
                        "src": "1517:90:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2531,
                    "nodeType": "StructuredDocumentation",
                    "src": "1293:27:20",
                    "text": "@inheritdoc ISelfPermit"
                  },
                  "functionSelector": "4659a494",
                  "id": 2566,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "selfPermitAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2545,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1498:8:20"
                  },
                  "parameters": {
                    "id": 2544,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2533,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 2566,
                        "src": "1361:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2532,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1361:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2535,
                        "mutability": "mutable",
                        "name": "nonce",
                        "nodeType": "VariableDeclaration",
                        "scope": 2566,
                        "src": "1384:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2534,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1384:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2537,
                        "mutability": "mutable",
                        "name": "expiry",
                        "nodeType": "VariableDeclaration",
                        "scope": 2566,
                        "src": "1407:14:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2536,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1407:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2539,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 2566,
                        "src": "1431:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2538,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1431:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2541,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 2566,
                        "src": "1448:9:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2540,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1448:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2543,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 2566,
                        "src": "1467:9:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2542,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1467:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1351:131:20"
                  },
                  "returnParameters": {
                    "id": 2546,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1507:0:20"
                  },
                  "scope": 2612,
                  "src": "1325:289:20",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3017
                  ],
                  "body": {
                    "id": 2610,
                    "nodeType": "Block",
                    "src": "1847:153:20",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 2587,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1885:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2588,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1885:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 2591,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "1905:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_SelfPermit_$2612",
                                      "typeString": "contract SelfPermit"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_SelfPermit_$2612",
                                      "typeString": "contract SelfPermit"
                                    }
                                  ],
                                  "id": 2590,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1897:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 2589,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1897:7:20",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1897:13:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2584,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2569,
                                    "src": "1868:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2583,
                                  "name": "IERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5876,
                                  "src": "1861:6:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                    "typeString": "type(contract IERC20)"
                                  }
                                },
                                "id": 2585,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1861:13:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$5876",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 2586,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allowance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5835,
                              "src": "1861:23:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address,address) view external returns (uint256)"
                              }
                            },
                            "id": 2593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1861:50:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2596,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1919:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 2595,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1919:7:20",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  }
                                ],
                                "id": 2594,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "1914:4:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 2597,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1914:13:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint256",
                                "typeString": "type(uint256)"
                              }
                            },
                            "id": 2598,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "1914:17:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1861:70:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2609,
                        "nodeType": "IfStatement",
                        "src": "1857:136:20",
                        "trueBody": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 2601,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2569,
                                "src": "1963:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 2602,
                                "name": "nonce",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2571,
                                "src": "1970:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 2603,
                                "name": "expiry",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2573,
                                "src": "1977:6:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 2604,
                                "name": "v",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2575,
                                "src": "1985:1:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 2605,
                                "name": "r",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2577,
                                "src": "1988:1:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 2606,
                                "name": "s",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2579,
                                "src": "1991:1:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 2600,
                              "name": "selfPermitAllowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2566,
                              "src": "1945:17:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$",
                                "typeString": "function (address,uint256,uint256,uint8,bytes32,bytes32)"
                              }
                            },
                            "id": 2607,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1945:48:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2608,
                          "nodeType": "ExpressionStatement",
                          "src": "1945:48:20"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2567,
                    "nodeType": "StructuredDocumentation",
                    "src": "1620:27:20",
                    "text": "@inheritdoc ISelfPermit"
                  },
                  "functionSelector": "a4a78f0c",
                  "id": 2611,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "selfPermitAllowedIfNecessary",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2581,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1838:8:20"
                  },
                  "parameters": {
                    "id": 2580,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2569,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 2611,
                        "src": "1699:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2568,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1699:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2571,
                        "mutability": "mutable",
                        "name": "nonce",
                        "nodeType": "VariableDeclaration",
                        "scope": 2611,
                        "src": "1722:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2570,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1722:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2573,
                        "mutability": "mutable",
                        "name": "expiry",
                        "nodeType": "VariableDeclaration",
                        "scope": 2611,
                        "src": "1745:14:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2572,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1745:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2575,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 2611,
                        "src": "1769:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2574,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1769:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2577,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 2611,
                        "src": "1786:9:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2576,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1786:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2579,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 2611,
                        "src": "1805:9:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2578,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1805:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1689:131:20"
                  },
                  "returnParameters": {
                    "id": 2582,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1847:0:20"
                  },
                  "scope": 2612,
                  "src": "1652:348:20",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2613,
              "src": "580:1422:20"
            }
          ],
          "src": "45:1958:20"
        },
        "id": 20
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IERC721Permit.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IERC721Permit.sol",
          "exportedSymbols": {
            "IERC165": [
              4940
            ],
            "IERC721": [
              5992
            ],
            "IERC721Permit": [
              2647
            ]
          },
          "id": 2648,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2614,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:21"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "id": 2615,
              "nodeType": "ImportDirective",
              "scope": 2648,
              "sourceUnit": 5993,
              "src": "71:58:21",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2617,
                    "name": "IERC721",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5992,
                    "src": "282:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC721_$5992",
                      "typeString": "contract IERC721"
                    }
                  },
                  "id": 2618,
                  "nodeType": "InheritanceSpecifier",
                  "src": "282:7:21"
                }
              ],
              "contractDependencies": [
                4940,
                5992
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 2616,
                "nodeType": "StructuredDocumentation",
                "src": "131:124:21",
                "text": "@title ERC721 with permit\n @notice Extension to ERC721 that includes a permit function for signature based approvals"
              },
              "fullyImplemented": false,
              "id": 2647,
              "linearizedBaseContracts": [
                2647,
                5992,
                4940
              ],
              "name": "IERC721Permit",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2619,
                    "nodeType": "StructuredDocumentation",
                    "src": "296:104:21",
                    "text": "@notice The permit typehash used in the permit signature\n @return The typehash for the permit"
                  },
                  "functionSelector": "30adf81f",
                  "id": 2624,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "PERMIT_TYPEHASH",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2620,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "429:2:21"
                  },
                  "returnParameters": {
                    "id": 2623,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2622,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2624,
                        "src": "455:7:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2621,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "455:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "454:9:21"
                  },
                  "scope": 2647,
                  "src": "405:59:21",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2625,
                    "nodeType": "StructuredDocumentation",
                    "src": "470:135:21",
                    "text": "@notice The domain separator used in the permit signature\n @return The domain seperator used in encoding of permit signature"
                  },
                  "functionSelector": "3644e515",
                  "id": 2630,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "DOMAIN_SEPARATOR",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2626,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "635:2:21"
                  },
                  "returnParameters": {
                    "id": 2629,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2628,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2630,
                        "src": "661:7:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2627,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "661:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "660:9:21"
                  },
                  "scope": 2647,
                  "src": "610:60:21",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2631,
                    "nodeType": "StructuredDocumentation",
                    "src": "676:605:21",
                    "text": "@notice Approve of a specific token ID for spending by spender via signature\n @param spender The account that is being approved\n @param tokenId The ID of the token that is being approved for spending\n @param deadline The deadline timestamp by which the call must be mined for the approve to work\n @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`"
                  },
                  "functionSelector": "7ac2ff7b",
                  "id": 2646,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "permit",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2644,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2633,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 2646,
                        "src": "1302:15:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2632,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1302:7:21",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2635,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2646,
                        "src": "1319:15:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2634,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1319:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2637,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nodeType": "VariableDeclaration",
                        "scope": 2646,
                        "src": "1336:16:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2636,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1336:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2639,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 2646,
                        "src": "1354:7:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2638,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1354:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2641,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 2646,
                        "src": "1363:9:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2640,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1363:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2643,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 2646,
                        "src": "1374:9:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2642,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1374:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1301:83:21"
                  },
                  "returnParameters": {
                    "id": 2645,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1401:0:21"
                  },
                  "scope": 2647,
                  "src": "1286:116:21",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2648,
              "src": "255:1149:21"
            }
          ],
          "src": "45:1360:21"
        },
        "id": 21
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol",
          "exportedSymbols": {
            "IMulticall": [
              2662
            ]
          },
          "id": 2663,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2649,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:22"
            },
            {
              "id": 2650,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:22"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2651,
                "nodeType": "StructuredDocumentation",
                "src": "91:109:22",
                "text": "@title Multicall interface\n @notice Enables calling multiple methods in a single call to the contract"
              },
              "fullyImplemented": false,
              "id": 2662,
              "linearizedBaseContracts": [
                2662
              ],
              "name": "IMulticall",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2652,
                    "nodeType": "StructuredDocumentation",
                    "src": "227:378:22",
                    "text": "@notice Call multiple functions in the current contract and return the data from all of them if they all succeed\n @dev The `msg.value` should not be trusted for any method callable from multicall.\n @param data The encoded function data for each of the calls to make to this contract\n @return results The results from each of the calls passed in via data"
                  },
                  "functionSelector": "ac9650d8",
                  "id": 2661,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "multicall",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2656,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2655,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 2661,
                        "src": "629:21:22",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2653,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "629:5:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 2654,
                          "nodeType": "ArrayTypeName",
                          "src": "629:7:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "628:23:22"
                  },
                  "returnParameters": {
                    "id": 2660,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2659,
                        "mutability": "mutable",
                        "name": "results",
                        "nodeType": "VariableDeclaration",
                        "scope": 2661,
                        "src": "678:22:22",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2657,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "678:5:22",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 2658,
                          "nodeType": "ArrayTypeName",
                          "src": "678:7:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "677:24:22"
                  },
                  "scope": 2662,
                  "src": "610:92:22",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2663,
              "src": "200:504:22"
            }
          ],
          "src": "45:660:22"
        },
        "id": 22
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol",
          "exportedSymbols": {
            "IERC165": [
              4940
            ],
            "IERC721": [
              5992
            ],
            "IERC721Enumerable": [
              6023
            ],
            "IERC721Metadata": [
              6050
            ],
            "IERC721Permit": [
              2647
            ],
            "INonfungiblePositionManager": [
              2856
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IPeripheryPayments": [
              2898
            ],
            "IPoolInitializer": [
              2950
            ]
          },
          "id": 2857,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2664,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:23"
            },
            {
              "id": 2665,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:23"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol",
              "file": "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol",
              "id": 2666,
              "nodeType": "ImportDirective",
              "scope": 2857,
              "sourceUnit": 6051,
              "src": "91:66:23",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol",
              "file": "@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol",
              "id": 2667,
              "nodeType": "ImportDirective",
              "scope": 2857,
              "sourceUnit": 6024,
              "src": "158:68:23",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPoolInitializer.sol",
              "file": "./IPoolInitializer.sol",
              "id": 2668,
              "nodeType": "ImportDirective",
              "scope": 2857,
              "sourceUnit": 2951,
              "src": "228:32:23",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IERC721Permit.sol",
              "file": "./IERC721Permit.sol",
              "id": 2669,
              "nodeType": "ImportDirective",
              "scope": 2857,
              "sourceUnit": 2648,
              "src": "261:29:23",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol",
              "file": "./IPeripheryPayments.sol",
              "id": 2670,
              "nodeType": "ImportDirective",
              "scope": 2857,
              "sourceUnit": 2899,
              "src": "291:34:23",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol",
              "file": "./IPeripheryImmutableState.sol",
              "id": 2671,
              "nodeType": "ImportDirective",
              "scope": 2857,
              "sourceUnit": 2873,
              "src": "326:40:23",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2673,
                    "name": "IPoolInitializer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2950,
                    "src": "591:16:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolInitializer_$2950",
                      "typeString": "contract IPoolInitializer"
                    }
                  },
                  "id": 2674,
                  "nodeType": "InheritanceSpecifier",
                  "src": "591:16:23"
                },
                {
                  "baseName": {
                    "id": 2675,
                    "name": "IPeripheryPayments",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2898,
                    "src": "613:18:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPeripheryPayments_$2898",
                      "typeString": "contract IPeripheryPayments"
                    }
                  },
                  "id": 2676,
                  "nodeType": "InheritanceSpecifier",
                  "src": "613:18:23"
                },
                {
                  "baseName": {
                    "id": 2677,
                    "name": "IPeripheryImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2872,
                    "src": "637:24:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPeripheryImmutableState_$2872",
                      "typeString": "contract IPeripheryImmutableState"
                    }
                  },
                  "id": 2678,
                  "nodeType": "InheritanceSpecifier",
                  "src": "637:24:23"
                },
                {
                  "baseName": {
                    "id": 2679,
                    "name": "IERC721Metadata",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6050,
                    "src": "667:15:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC721Metadata_$6050",
                      "typeString": "contract IERC721Metadata"
                    }
                  },
                  "id": 2680,
                  "nodeType": "InheritanceSpecifier",
                  "src": "667:15:23"
                },
                {
                  "baseName": {
                    "id": 2681,
                    "name": "IERC721Enumerable",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6023,
                    "src": "688:17:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC721Enumerable_$6023",
                      "typeString": "contract IERC721Enumerable"
                    }
                  },
                  "id": 2682,
                  "nodeType": "InheritanceSpecifier",
                  "src": "688:17:23"
                },
                {
                  "baseName": {
                    "id": 2683,
                    "name": "IERC721Permit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2647,
                    "src": "711:13:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC721Permit_$2647",
                      "typeString": "contract IERC721Permit"
                    }
                  },
                  "id": 2684,
                  "nodeType": "InheritanceSpecifier",
                  "src": "711:13:23"
                }
              ],
              "contractDependencies": [
                2647,
                2872,
                2898,
                2950,
                4940,
                5992,
                6023,
                6050
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 2672,
                "nodeType": "StructuredDocumentation",
                "src": "368:178:23",
                "text": "@title Non-fungible token for positions\n @notice Wraps AstraDEX CL positions in a non-fungible token interface which allows for them to be transferred\n and authorized."
              },
              "fullyImplemented": false,
              "id": 2856,
              "linearizedBaseContracts": [
                2856,
                2647,
                6023,
                6050,
                5992,
                4940,
                2872,
                2898,
                2950
              ],
              "name": "INonfungiblePositionManager",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2685,
                    "nodeType": "StructuredDocumentation",
                    "src": "731:458:23",
                    "text": "@notice Emitted when liquidity is increased for a position NFT\n @dev Also emitted when a token is minted\n @param tokenId The ID of the token for which liquidity was increased\n @param liquidity The amount by which liquidity for the NFT position was increased\n @param amount0 The amount of token0 that was paid for the increase in liquidity\n @param amount1 The amount of token1 that was paid for the increase in liquidity"
                  },
                  "id": 2695,
                  "name": "IncreaseLiquidity",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2694,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2687,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2695,
                        "src": "1218:23:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2686,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1218:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2689,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nodeType": "VariableDeclaration",
                        "scope": 2695,
                        "src": "1243:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2688,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1243:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2691,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 2695,
                        "src": "1262:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2690,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1262:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2693,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2695,
                        "src": "1279:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2692,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1279:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1217:78:23"
                  },
                  "src": "1194:102:23"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2696,
                    "nodeType": "StructuredDocumentation",
                    "src": "1301:419:23",
                    "text": "@notice Emitted when liquidity is decreased for a position NFT\n @param tokenId The ID of the token for which liquidity was decreased\n @param liquidity The amount by which liquidity for the NFT position was decreased\n @param amount0 The amount of token0 that was accounted for the decrease in liquidity\n @param amount1 The amount of token1 that was accounted for the decrease in liquidity"
                  },
                  "id": 2706,
                  "name": "DecreaseLiquidity",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2705,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2698,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2706,
                        "src": "1749:23:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2697,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1749:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2700,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nodeType": "VariableDeclaration",
                        "scope": 2706,
                        "src": "1774:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2699,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1774:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2702,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 2706,
                        "src": "1793:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2701,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1793:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2704,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2706,
                        "src": "1810:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2703,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1810:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1748:78:23"
                  },
                  "src": "1725:102:23"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2707,
                    "nodeType": "StructuredDocumentation",
                    "src": "1832:522:23",
                    "text": "@notice Emitted when tokens are collected for a position NFT\n @dev The amounts reported may not be exactly equivalent to the amounts transferred, due to rounding behavior\n @param tokenId The ID of the token for which underlying tokens were collected\n @param recipient The address of the account that received the collected tokens\n @param amount0 The amount of token0 owed to the position that was collected\n @param amount1 The amount of token1 owed to the position that was collected"
                  },
                  "id": 2717,
                  "name": "Collect",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2716,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2709,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2717,
                        "src": "2373:23:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2708,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2373:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2711,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2717,
                        "src": "2398:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2710,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2398:7:23",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2713,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 2717,
                        "src": "2417:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2712,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2417:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2715,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2717,
                        "src": "2434:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2714,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2434:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2372:78:23"
                  },
                  "src": "2359:92:23"
                },
                {
                  "documentation": {
                    "id": 2718,
                    "nodeType": "StructuredDocumentation",
                    "src": "2457:1157:23",
                    "text": "@notice Returns the position information associated with a given token ID.\n @dev Throws if the token ID is not valid.\n @param tokenId The ID of the token that represents the position\n @return nonce The nonce for permits\n @return operator The address that is approved for spending\n @return token0 The address of the token0 for a specific pool\n @return token1 The address of the token1 for a specific pool\n @return fee The fee associated with the pool\n @return tickLower The lower end of the tick range for the position\n @return tickUpper The higher end of the tick range for the position\n @return liquidity The liquidity of the position\n @return feeGrowthInside0LastX128 The fee growth of token0 as of the last action on the individual position\n @return feeGrowthInside1LastX128 The fee growth of token1 as of the last action on the individual position\n @return tokensOwed0 The uncollected amount of token0 owed to the position as of the last computation\n @return tokensOwed1 The uncollected amount of token1 owed to the position as of the last computation"
                  },
                  "functionSelector": "99fbab88",
                  "id": 2747,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "positions",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2721,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2720,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "3647:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2719,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3647:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3637:31:23"
                  },
                  "returnParameters": {
                    "id": 2746,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2723,
                        "mutability": "mutable",
                        "name": "nonce",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "3729:12:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        },
                        "typeName": {
                          "id": 2722,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "3729:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2725,
                        "mutability": "mutable",
                        "name": "operator",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "3755:16:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2724,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3755:7:23",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2727,
                        "mutability": "mutable",
                        "name": "token0",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "3785:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2726,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3785:7:23",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2729,
                        "mutability": "mutable",
                        "name": "token1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "3813:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2728,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3813:7:23",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2731,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "3841:10:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 2730,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3841:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2733,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "3865:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2732,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3865:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2735,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "3894:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2734,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3894:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2737,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "3923:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2736,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "3923:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2739,
                        "mutability": "mutable",
                        "name": "feeGrowthInside0LastX128",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "3954:32:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2738,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3954:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2741,
                        "mutability": "mutable",
                        "name": "feeGrowthInside1LastX128",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "4000:32:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2740,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4000:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2743,
                        "mutability": "mutable",
                        "name": "tokensOwed0",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "4046:19:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2742,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "4046:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2745,
                        "mutability": "mutable",
                        "name": "tokensOwed1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2747,
                        "src": "4079:19:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2744,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "4079:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3715:393:23"
                  },
                  "scope": 2856,
                  "src": "3619:490:23",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "INonfungiblePositionManager.MintParams",
                  "id": 2770,
                  "members": [
                    {
                      "constant": false,
                      "id": 2749,
                      "mutability": "mutable",
                      "name": "token0",
                      "nodeType": "VariableDeclaration",
                      "scope": 2770,
                      "src": "4143:14:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2748,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4143:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2751,
                      "mutability": "mutable",
                      "name": "token1",
                      "nodeType": "VariableDeclaration",
                      "scope": 2770,
                      "src": "4167:14:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2750,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4167:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2753,
                      "mutability": "mutable",
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "scope": 2770,
                      "src": "4191:10:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint24",
                        "typeString": "uint24"
                      },
                      "typeName": {
                        "id": 2752,
                        "name": "uint24",
                        "nodeType": "ElementaryTypeName",
                        "src": "4191:6:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2755,
                      "mutability": "mutable",
                      "name": "tickLower",
                      "nodeType": "VariableDeclaration",
                      "scope": 2770,
                      "src": "4211:15:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      },
                      "typeName": {
                        "id": 2754,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "4211:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2757,
                      "mutability": "mutable",
                      "name": "tickUpper",
                      "nodeType": "VariableDeclaration",
                      "scope": 2770,
                      "src": "4236:15:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      },
                      "typeName": {
                        "id": 2756,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "4236:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2759,
                      "mutability": "mutable",
                      "name": "amount0Desired",
                      "nodeType": "VariableDeclaration",
                      "scope": 2770,
                      "src": "4261:22:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2758,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4261:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2761,
                      "mutability": "mutable",
                      "name": "amount1Desired",
                      "nodeType": "VariableDeclaration",
                      "scope": 2770,
                      "src": "4293:22:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2760,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4293:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2763,
                      "mutability": "mutable",
                      "name": "amount0Min",
                      "nodeType": "VariableDeclaration",
                      "scope": 2770,
                      "src": "4325:18:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2762,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4325:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2765,
                      "mutability": "mutable",
                      "name": "amount1Min",
                      "nodeType": "VariableDeclaration",
                      "scope": 2770,
                      "src": "4353:18:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2764,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4353:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2767,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nodeType": "VariableDeclaration",
                      "scope": 2770,
                      "src": "4381:17:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2766,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4381:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2769,
                      "mutability": "mutable",
                      "name": "deadline",
                      "nodeType": "VariableDeclaration",
                      "scope": 2770,
                      "src": "4408:16:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2768,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4408:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "MintParams",
                  "nodeType": "StructDefinition",
                  "scope": 2856,
                  "src": "4115:316:23",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 2771,
                    "nodeType": "StructuredDocumentation",
                    "src": "4437:586:23",
                    "text": "@notice Creates a new position wrapped in a NFT\n @dev Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized\n a method does not exist, i.e. the pool is assumed to be initialized.\n @param params The params necessary to mint a position, encoded as `MintParams` in calldata\n @return tokenId The ID of the token that represents the minted position\n @return liquidity The amount of liquidity for this position\n @return amount0 The amount of token0\n @return amount1 The amount of token1"
                  },
                  "functionSelector": "88316456",
                  "id": 2784,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2774,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2773,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 2784,
                        "src": "5051:26:23",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintParams_$2770_calldata_ptr",
                          "typeString": "struct INonfungiblePositionManager.MintParams"
                        },
                        "typeName": {
                          "id": 2772,
                          "name": "MintParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2770,
                          "src": "5051:10:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintParams_$2770_storage_ptr",
                            "typeString": "struct INonfungiblePositionManager.MintParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5041:42:23"
                  },
                  "returnParameters": {
                    "id": 2783,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2776,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2784,
                        "src": "5110:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2775,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5110:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2778,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nodeType": "VariableDeclaration",
                        "scope": 2784,
                        "src": "5127:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2777,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5127:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2780,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 2784,
                        "src": "5146:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2779,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5146:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2782,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2784,
                        "src": "5163:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2781,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5163:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5109:70:23"
                  },
                  "scope": 2856,
                  "src": "5028:152:23",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "INonfungiblePositionManager.IncreaseLiquidityParams",
                  "id": 2797,
                  "members": [
                    {
                      "constant": false,
                      "id": 2786,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 2797,
                      "src": "5227:15:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2785,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5227:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2788,
                      "mutability": "mutable",
                      "name": "amount0Desired",
                      "nodeType": "VariableDeclaration",
                      "scope": 2797,
                      "src": "5252:22:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2787,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5252:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2790,
                      "mutability": "mutable",
                      "name": "amount1Desired",
                      "nodeType": "VariableDeclaration",
                      "scope": 2797,
                      "src": "5284:22:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2789,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5284:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2792,
                      "mutability": "mutable",
                      "name": "amount0Min",
                      "nodeType": "VariableDeclaration",
                      "scope": 2797,
                      "src": "5316:18:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2791,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5316:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2794,
                      "mutability": "mutable",
                      "name": "amount1Min",
                      "nodeType": "VariableDeclaration",
                      "scope": 2797,
                      "src": "5344:18:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2793,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5344:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2796,
                      "mutability": "mutable",
                      "name": "deadline",
                      "nodeType": "VariableDeclaration",
                      "scope": 2797,
                      "src": "5372:16:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2795,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5372:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "IncreaseLiquidityParams",
                  "nodeType": "StructDefinition",
                  "scope": 2856,
                  "src": "5186:209:23",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 2798,
                    "nodeType": "StructuredDocumentation",
                    "src": "5401:821:23",
                    "text": "@notice Increases the amount of liquidity in a position, with tokens paid by the `msg.sender`\n @param params tokenId The ID of the token for which liquidity is being increased,\n amount0Desired The desired amount of token0 to be spent,\n amount1Desired The desired amount of token1 to be spent,\n amount0Min The minimum amount of token0 to spend, which serves as a slippage check,\n amount1Min The minimum amount of token1 to spend, which serves as a slippage check,\n deadline The time by which the transaction must be included to effect the change\n @return liquidity The new liquidity amount as a result of the increase\n @return amount0 The amount of token0 to acheive resulting liquidity\n @return amount1 The amount of token1 to acheive resulting liquidity"
                  },
                  "functionSelector": "219f5d17",
                  "id": 2809,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseLiquidity",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2801,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2800,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 2809,
                        "src": "6263:39:23",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$2797_calldata_ptr",
                          "typeString": "struct INonfungiblePositionManager.IncreaseLiquidityParams"
                        },
                        "typeName": {
                          "id": 2799,
                          "name": "IncreaseLiquidityParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2797,
                          "src": "6263:23:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$2797_storage_ptr",
                            "typeString": "struct INonfungiblePositionManager.IncreaseLiquidityParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6253:55:23"
                  },
                  "returnParameters": {
                    "id": 2808,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2803,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nodeType": "VariableDeclaration",
                        "scope": 2809,
                        "src": "6335:17:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2802,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "6335:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2805,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 2809,
                        "src": "6354:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2804,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6354:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2807,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2809,
                        "src": "6371:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2806,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6371:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6334:53:23"
                  },
                  "scope": 2856,
                  "src": "6227:161:23",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "INonfungiblePositionManager.DecreaseLiquidityParams",
                  "id": 2820,
                  "members": [
                    {
                      "constant": false,
                      "id": 2811,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 2820,
                      "src": "6435:15:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2810,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6435:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2813,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "nodeType": "VariableDeclaration",
                      "scope": 2820,
                      "src": "6460:17:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 2812,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "6460:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2815,
                      "mutability": "mutable",
                      "name": "amount0Min",
                      "nodeType": "VariableDeclaration",
                      "scope": 2820,
                      "src": "6487:18:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2814,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6487:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2817,
                      "mutability": "mutable",
                      "name": "amount1Min",
                      "nodeType": "VariableDeclaration",
                      "scope": 2820,
                      "src": "6515:18:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2816,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6515:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2819,
                      "mutability": "mutable",
                      "name": "deadline",
                      "nodeType": "VariableDeclaration",
                      "scope": 2820,
                      "src": "6543:16:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2818,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6543:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "DecreaseLiquidityParams",
                  "nodeType": "StructDefinition",
                  "scope": 2856,
                  "src": "6394:172:23",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 2821,
                    "nodeType": "StructuredDocumentation",
                    "src": "6572:702:23",
                    "text": "@notice Decreases the amount of liquidity in a position and accounts it to the position\n @param params tokenId The ID of the token for which liquidity is being decreased,\n amount The amount by which liquidity will be decreased,\n amount0Min The minimum amount of token0 that should be accounted for the burned liquidity,\n amount1Min The minimum amount of token1 that should be accounted for the burned liquidity,\n deadline The time by which the transaction must be included to effect the change\n @return amount0 The amount of token0 accounted to the position's tokens owed\n @return amount1 The amount of token1 accounted to the position's tokens owed"
                  },
                  "functionSelector": "0c49ccbe",
                  "id": 2830,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decreaseLiquidity",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2824,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2823,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 2830,
                        "src": "7315:39:23",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DecreaseLiquidityParams_$2820_calldata_ptr",
                          "typeString": "struct INonfungiblePositionManager.DecreaseLiquidityParams"
                        },
                        "typeName": {
                          "id": 2822,
                          "name": "DecreaseLiquidityParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2820,
                          "src": "7315:23:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DecreaseLiquidityParams_$2820_storage_ptr",
                            "typeString": "struct INonfungiblePositionManager.DecreaseLiquidityParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7305:55:23"
                  },
                  "returnParameters": {
                    "id": 2829,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2826,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 2830,
                        "src": "7387:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2825,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7387:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2828,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2830,
                        "src": "7404:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2827,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7404:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7386:34:23"
                  },
                  "scope": 2856,
                  "src": "7279:142:23",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "INonfungiblePositionManager.CollectParams",
                  "id": 2839,
                  "members": [
                    {
                      "constant": false,
                      "id": 2832,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 2839,
                      "src": "7458:15:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2831,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7458:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2834,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nodeType": "VariableDeclaration",
                      "scope": 2839,
                      "src": "7483:17:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2833,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7483:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2836,
                      "mutability": "mutable",
                      "name": "amount0Max",
                      "nodeType": "VariableDeclaration",
                      "scope": 2839,
                      "src": "7510:18:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 2835,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "7510:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2838,
                      "mutability": "mutable",
                      "name": "amount1Max",
                      "nodeType": "VariableDeclaration",
                      "scope": 2839,
                      "src": "7538:18:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 2837,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "7538:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "CollectParams",
                  "nodeType": "StructDefinition",
                  "scope": 2856,
                  "src": "7427:136:23",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 2840,
                    "nodeType": "StructuredDocumentation",
                    "src": "7569:489:23",
                    "text": "@notice Collects up to a maximum amount of fees owed to a specific position to the recipient\n @param params tokenId The ID of the NFT for which tokens are being collected,\n recipient The account that should receive the tokens,\n amount0Max The maximum amount of token0 to collect,\n amount1Max The maximum amount of token1 to collect\n @return amount0 The amount of fees collected in token0\n @return amount1 The amount of fees collected in token1"
                  },
                  "functionSelector": "fc6f7865",
                  "id": 2849,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collect",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2843,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2842,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 2849,
                        "src": "8080:29:23",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollectParams_$2839_calldata_ptr",
                          "typeString": "struct INonfungiblePositionManager.CollectParams"
                        },
                        "typeName": {
                          "id": 2841,
                          "name": "CollectParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2839,
                          "src": "8080:13:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollectParams_$2839_storage_ptr",
                            "typeString": "struct INonfungiblePositionManager.CollectParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8079:31:23"
                  },
                  "returnParameters": {
                    "id": 2848,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2845,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 2849,
                        "src": "8137:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2844,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8137:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2847,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2849,
                        "src": "8154:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2846,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8154:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8136:34:23"
                  },
                  "scope": 2856,
                  "src": "8063:108:23",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2850,
                    "nodeType": "StructuredDocumentation",
                    "src": "8177:213:23",
                    "text": "@notice Burns a token ID, which deletes it from the NFT contract. The token must have 0 liquidity and all tokens\n must be collected first.\n @param tokenId The ID of the token that is being burned"
                  },
                  "functionSelector": "42966c68",
                  "id": 2855,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2853,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2852,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 2855,
                        "src": "8409:15:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2851,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8409:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8408:17:23"
                  },
                  "returnParameters": {
                    "id": 2854,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8442:0:23"
                  },
                  "scope": 2856,
                  "src": "8395:48:23",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2857,
              "src": "546:7899:23"
            }
          ],
          "src": "45:8401:23"
        },
        "id": 23
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryImmutableState.sol",
          "exportedSymbols": {
            "IPeripheryImmutableState": [
              2872
            ]
          },
          "id": 2873,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2858,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:24"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2859,
                "nodeType": "StructuredDocumentation",
                "src": "71:91:24",
                "text": "@title Immutable state\n @notice Functions that return immutable state of the router"
              },
              "fullyImplemented": false,
              "id": 2872,
              "linearizedBaseContracts": [
                2872
              ],
              "name": "IPeripheryImmutableState",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2860,
                    "nodeType": "StructuredDocumentation",
                    "src": "203:58:24",
                    "text": "@return Returns the address of the AstraDEX CL factory"
                  },
                  "functionSelector": "c45a0155",
                  "id": 2865,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factory",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2861,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "282:2:24"
                  },
                  "returnParameters": {
                    "id": 2864,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2863,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2865,
                        "src": "308:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2862,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "308:7:24",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "307:9:24"
                  },
                  "scope": 2872,
                  "src": "266:51:24",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2866,
                    "nodeType": "StructuredDocumentation",
                    "src": "323:39:24",
                    "text": "@return Returns the address of SAMB"
                  },
                  "functionSelector": "90793ea8",
                  "id": 2871,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "SAMB",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2867,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "380:2:24"
                  },
                  "returnParameters": {
                    "id": 2870,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2869,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 2871,
                        "src": "406:7:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2868,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "406:7:24",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "405:9:24"
                  },
                  "scope": 2872,
                  "src": "367:48:24",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2873,
              "src": "162:255:24"
            }
          ],
          "src": "45:373:24"
        },
        "id": 24
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol",
          "exportedSymbols": {
            "IPeripheryPayments": [
              2898
            ]
          },
          "id": 2899,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2874,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:25"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2875,
                "nodeType": "StructuredDocumentation",
                "src": "71:92:25",
                "text": "@title Periphery Payments\n @notice Functions to ease deposits and withdrawals of AMB"
              },
              "fullyImplemented": false,
              "id": 2898,
              "linearizedBaseContracts": [
                2898
              ],
              "name": "IPeripheryPayments",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2876,
                    "nodeType": "StructuredDocumentation",
                    "src": "198:299:25",
                    "text": "@notice Unwraps the contract's SAMB balance and sends it to recipient as AMB.\n @dev The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\n @param amountMinimum The minimum amount of SAMB to unwrap\n @param recipient The address receiving AMB"
                  },
                  "functionSelector": "a98ce37f",
                  "id": 2883,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unwrapSAMB",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2881,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2878,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 2883,
                        "src": "522:21:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2877,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "522:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2880,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2883,
                        "src": "545:17:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2879,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "545:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "521:42:25"
                  },
                  "returnParameters": {
                    "id": 2882,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "580:0:25"
                  },
                  "scope": 2898,
                  "src": "502:79:25",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2884,
                    "nodeType": "StructuredDocumentation",
                    "src": "587:225:25",
                    "text": "@notice Refunds any AMB balance held by this contract to the `msg.sender`\n @dev Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps\n that use ether for the input amount"
                  },
                  "functionSelector": "c53af304",
                  "id": 2887,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "refundAMB",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2885,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "835:2:25"
                  },
                  "returnParameters": {
                    "id": 2886,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "854:0:25"
                  },
                  "scope": 2898,
                  "src": "817:38:25",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2888,
                    "nodeType": "StructuredDocumentation",
                    "src": "861:427:25",
                    "text": "@notice Transfers the full amount of a token held by this contract to recipient\n @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users\n @param token The contract address of the token which will be transferred to `recipient`\n @param amountMinimum The minimum amount of token required for a transfer\n @param recipient The destination address of the token"
                  },
                  "functionSelector": "df2ab5bb",
                  "id": 2897,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sweepToken",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2895,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2890,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 2897,
                        "src": "1313:13:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2889,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1313:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2892,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 2897,
                        "src": "1328:21:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2891,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1328:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2894,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2897,
                        "src": "1351:17:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2893,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1351:7:25",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1312:57:25"
                  },
                  "returnParameters": {
                    "id": 2896,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1386:0:25"
                  },
                  "scope": 2898,
                  "src": "1293:94:25",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2899,
              "src": "163:1226:25"
            }
          ],
          "src": "45:1345:25"
        },
        "id": 25
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol",
          "exportedSymbols": {
            "IPeripheryPayments": [
              2898
            ],
            "IPeripheryPaymentsWithFee": [
              2931
            ]
          },
          "id": 2932,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2900,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:26"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol",
              "file": "./IPeripheryPayments.sol",
              "id": 2901,
              "nodeType": "ImportDirective",
              "scope": 2932,
              "sourceUnit": 2899,
              "src": "71:34:26",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2903,
                    "name": "IPeripheryPayments",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2898,
                    "src": "238:18:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPeripheryPayments_$2898",
                      "typeString": "contract IPeripheryPayments"
                    }
                  },
                  "id": 2904,
                  "nodeType": "InheritanceSpecifier",
                  "src": "238:18:26"
                }
              ],
              "contractDependencies": [
                2898
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 2902,
                "nodeType": "StructuredDocumentation",
                "src": "107:92:26",
                "text": "@title Periphery Payments\n @notice Functions to ease deposits and withdrawals of AMB"
              },
              "fullyImplemented": false,
              "id": 2931,
              "linearizedBaseContracts": [
                2931,
                2898
              ],
              "name": "IPeripheryPaymentsWithFee",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2905,
                    "nodeType": "StructuredDocumentation",
                    "src": "263:271:26",
                    "text": "@notice Unwraps the contract's SAMB balance and sends it to recipient as AMB, with a percentage between\n 0 (exclusive), and 1 (inclusive) going to feeRecipient\n @dev The amountMinimum parameter prevents malicious contracts from stealing SAMB from users."
                  },
                  "functionSelector": "97e87d9d",
                  "id": 2916,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unwrapSAMBWithFee",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2914,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2907,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 2916,
                        "src": "575:21:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2906,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "575:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2909,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2916,
                        "src": "606:17:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2908,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "606:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2911,
                        "mutability": "mutable",
                        "name": "feeBips",
                        "nodeType": "VariableDeclaration",
                        "scope": 2916,
                        "src": "633:15:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2910,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "633:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2913,
                        "mutability": "mutable",
                        "name": "feeRecipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2916,
                        "src": "658:20:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2912,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "658:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "565:119:26"
                  },
                  "returnParameters": {
                    "id": 2915,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "701:0:26"
                  },
                  "scope": 2931,
                  "src": "539:163:26",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2917,
                    "nodeType": "StructuredDocumentation",
                    "src": "708:277:26",
                    "text": "@notice Transfers the full amount of a token held by this contract to recipient, with a percentage between\n 0 (exclusive) and 1 (inclusive) going to feeRecipient\n @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users"
                  },
                  "functionSelector": "e0e189a0",
                  "id": 2930,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sweepTokenWithFee",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2928,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2919,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 2930,
                        "src": "1026:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2918,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1026:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2921,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 2930,
                        "src": "1049:21:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2920,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1049:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2923,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2930,
                        "src": "1080:17:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2922,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1080:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2925,
                        "mutability": "mutable",
                        "name": "feeBips",
                        "nodeType": "VariableDeclaration",
                        "scope": 2930,
                        "src": "1107:15:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2924,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1107:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2927,
                        "mutability": "mutable",
                        "name": "feeRecipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 2930,
                        "src": "1132:20:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2926,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1132:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1016:142:26"
                  },
                  "returnParameters": {
                    "id": 2929,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1175:0:26"
                  },
                  "scope": 2931,
                  "src": "990:186:26",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2932,
              "src": "199:979:26"
            }
          ],
          "src": "45:1134:26"
        },
        "id": 26
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/IPoolInitializer.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPoolInitializer.sol",
          "exportedSymbols": {
            "IPoolInitializer": [
              2950
            ]
          },
          "id": 2951,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2933,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:27"
            },
            {
              "id": 2934,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:27"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2935,
                "nodeType": "StructuredDocumentation",
                "src": "91:194:27",
                "text": "@title Creates and initializes CL Pools\n @notice Provides a method for creating and initializing a pool, if necessary, for bundling with other methods that\n require the pool to exist."
              },
              "fullyImplemented": false,
              "id": 2950,
              "linearizedBaseContracts": [
                2950
              ],
              "name": "IPoolInitializer",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2936,
                    "nodeType": "StructuredDocumentation",
                    "src": "318:648:27",
                    "text": "@notice Creates a new pool if it does not exist, then initializes if not initialized\n @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool\n @param token0 The contract address of token0 of the pool\n @param token1 The contract address of token1 of the pool\n @param fee The fee amount of the CL pool for the specified token pair\n @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value\n @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary"
                  },
                  "functionSelector": "13ead562",
                  "id": 2949,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createAndInitializePoolIfNecessary",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2945,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2938,
                        "mutability": "mutable",
                        "name": "token0",
                        "nodeType": "VariableDeclaration",
                        "scope": 2949,
                        "src": "1024:14:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2937,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1024:7:27",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2940,
                        "mutability": "mutable",
                        "name": "token1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2949,
                        "src": "1048:14:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2939,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1048:7:27",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2942,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 2949,
                        "src": "1072:10:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 2941,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1072:6:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2944,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 2949,
                        "src": "1092:20:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 2943,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1092:7:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1014:104:27"
                  },
                  "returnParameters": {
                    "id": 2948,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2947,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 2949,
                        "src": "1145:12:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2946,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1145:7:27",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1144:14:27"
                  },
                  "scope": 2950,
                  "src": "971:188:27",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2951,
              "src": "285:876:27"
            }
          ],
          "src": "45:1117:27"
        },
        "id": 27
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol",
          "exportedSymbols": {
            "ISelfPermit": [
              3018
            ]
          },
          "id": 3019,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2952,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:28"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2953,
                "nodeType": "StructuredDocumentation",
                "src": "71:117:28",
                "text": "@title Self Permit\n @notice Functionality to call permit on any EIP-2612-compliant token for use in the route"
              },
              "fullyImplemented": false,
              "id": 3018,
              "linearizedBaseContracts": [
                3018
              ],
              "name": "ISelfPermit",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2954,
                    "nodeType": "StructuredDocumentation",
                    "src": "216:663:28",
                    "text": "@notice Permits this contract to spend a given token from `msg.sender`\n @dev The `owner` is always msg.sender and the `spender` is always address(this).\n @param token The address of the token spent\n @param value The amount that can be spent of token\n @param deadline A timestamp, the current blocktime must be less than or equal to this timestamp\n @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`"
                  },
                  "functionSelector": "f3995c67",
                  "id": 2969,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "selfPermit",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2967,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2956,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 2969,
                        "src": "904:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2955,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "904:7:28",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2958,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 2969,
                        "src": "919:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2957,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "919:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2960,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nodeType": "VariableDeclaration",
                        "scope": 2969,
                        "src": "934:16:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2959,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "934:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2962,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 2969,
                        "src": "952:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2961,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "952:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2964,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 2969,
                        "src": "961:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2963,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "961:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2966,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 2969,
                        "src": "972:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2965,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "972:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "903:79:28"
                  },
                  "returnParameters": {
                    "id": 2968,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "999:0:28"
                  },
                  "scope": 3018,
                  "src": "884:116:28",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2970,
                    "nodeType": "StructuredDocumentation",
                    "src": "1006:779:28",
                    "text": "@notice Permits this contract to spend a given token from `msg.sender`\n @dev The `owner` is always msg.sender and the `spender` is always address(this).\n Can be used instead of #selfPermit to prevent calls from failing due to a frontrun of a call to #selfPermit\n @param token The address of the token spent\n @param value The amount that can be spent of token\n @param deadline A timestamp, the current blocktime must be less than or equal to this timestamp\n @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`"
                  },
                  "functionSelector": "c2e3140a",
                  "id": 2985,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "selfPermitIfNecessary",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2983,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2972,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 2985,
                        "src": "1830:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2971,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1830:7:28",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2974,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 2985,
                        "src": "1853:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2973,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1853:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2976,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nodeType": "VariableDeclaration",
                        "scope": 2985,
                        "src": "1876:16:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2975,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1876:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2978,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 2985,
                        "src": "1902:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2977,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1902:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2980,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 2985,
                        "src": "1919:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2979,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1919:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2982,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 2985,
                        "src": "1938:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2981,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1938:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1820:133:28"
                  },
                  "returnParameters": {
                    "id": 2984,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1970:0:28"
                  },
                  "scope": 3018,
                  "src": "1790:181:28",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2986,
                    "nodeType": "StructuredDocumentation",
                    "src": "1977:670:28",
                    "text": "@notice Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\n @dev The `owner` is always msg.sender and the `spender` is always address(this)\n @param token The address of the token spent\n @param nonce The current nonce of the owner\n @param expiry The timestamp at which the permit is no longer valid\n @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`"
                  },
                  "functionSelector": "4659a494",
                  "id": 3001,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "selfPermitAllowed",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2999,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2988,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 3001,
                        "src": "2688:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2987,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2688:7:28",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2990,
                        "mutability": "mutable",
                        "name": "nonce",
                        "nodeType": "VariableDeclaration",
                        "scope": 3001,
                        "src": "2711:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2989,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2711:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2992,
                        "mutability": "mutable",
                        "name": "expiry",
                        "nodeType": "VariableDeclaration",
                        "scope": 3001,
                        "src": "2734:14:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2991,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2734:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2994,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 3001,
                        "src": "2758:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2993,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "2758:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2996,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 3001,
                        "src": "2775:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2995,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2775:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2998,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 3001,
                        "src": "2794:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2997,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2794:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2678:131:28"
                  },
                  "returnParameters": {
                    "id": 3000,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2826:0:28"
                  },
                  "scope": 3018,
                  "src": "2652:175:28",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 3002,
                    "nodeType": "StructuredDocumentation",
                    "src": "2833:801:28",
                    "text": "@notice Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter\n @dev The `owner` is always msg.sender and the `spender` is always address(this)\n Can be used instead of #selfPermitAllowed to prevent calls from failing due to a frontrun of a call to #selfPermitAllowed.\n @param token The address of the token spent\n @param nonce The current nonce of the owner\n @param expiry The timestamp at which the permit is no longer valid\n @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`"
                  },
                  "functionSelector": "a4a78f0c",
                  "id": 3017,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "selfPermitAllowedIfNecessary",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3015,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3004,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 3017,
                        "src": "3686:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3003,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3686:7:28",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3006,
                        "mutability": "mutable",
                        "name": "nonce",
                        "nodeType": "VariableDeclaration",
                        "scope": 3017,
                        "src": "3709:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3005,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3709:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3008,
                        "mutability": "mutable",
                        "name": "expiry",
                        "nodeType": "VariableDeclaration",
                        "scope": 3017,
                        "src": "3732:14:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3007,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3732:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3010,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 3017,
                        "src": "3756:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3009,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "3756:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3012,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 3017,
                        "src": "3773:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3011,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3773:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3014,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 3017,
                        "src": "3792:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3013,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3792:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3676:131:28"
                  },
                  "returnParameters": {
                    "id": 3016,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3824:0:28"
                  },
                  "scope": 3018,
                  "src": "3639:186:28",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3019,
              "src": "188:3639:28"
            }
          ],
          "src": "45:3783:28"
        },
        "id": 28
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/external/IERC20PermitAllowed.sol",
          "exportedSymbols": {
            "IERC20PermitAllowed": [
              3042
            ]
          },
          "id": 3043,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3020,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:29"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 3021,
                "nodeType": "StructuredDocumentation",
                "src": "71:82:29",
                "text": "@title Interface for permit\n @notice Interface used by DAI/CHAI for permit"
              },
              "fullyImplemented": false,
              "id": 3042,
              "linearizedBaseContracts": [
                3042
              ],
              "name": "IERC20PermitAllowed",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 3022,
                    "nodeType": "StructuredDocumentation",
                    "src": "189:802:29",
                    "text": "@notice Approve the spender to spend some tokens via the holder signature\n @dev This is the permit interface used by DAI and CHAI\n @param holder The address of the token holder, the token owner\n @param spender The address of the token spender\n @param nonce The holder's nonce, increases at each call to permit\n @param expiry The timestamp at which the permit is no longer valid\n @param allowed Boolean that sets approval amount, true for type(uint256).max and false for 0\n @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`\n @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`\n @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`"
                  },
                  "functionSelector": "8fcbaf0c",
                  "id": 3041,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "permit",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3039,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3024,
                        "mutability": "mutable",
                        "name": "holder",
                        "nodeType": "VariableDeclaration",
                        "scope": 3041,
                        "src": "1021:14:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3023,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1021:7:29",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3026,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 3041,
                        "src": "1045:15:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3025,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1045:7:29",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3028,
                        "mutability": "mutable",
                        "name": "nonce",
                        "nodeType": "VariableDeclaration",
                        "scope": 3041,
                        "src": "1070:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3027,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1070:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3030,
                        "mutability": "mutable",
                        "name": "expiry",
                        "nodeType": "VariableDeclaration",
                        "scope": 3041,
                        "src": "1093:14:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3029,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1093:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3032,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "scope": 3041,
                        "src": "1117:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3031,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1117:4:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3034,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 3041,
                        "src": "1139:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3033,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1139:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3036,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 3041,
                        "src": "1156:9:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3035,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1156:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3038,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 3041,
                        "src": "1175:9:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 3037,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1175:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1011:179:29"
                  },
                  "returnParameters": {
                    "id": 3040,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1199:0:29"
                  },
                  "scope": 3042,
                  "src": "996:204:29",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3043,
              "src": "153:1049:29"
            }
          ],
          "src": "45:1158:29"
        },
        "id": 29
      },
      "@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/external/ISAMB.sol",
          "exportedSymbols": {
            "IERC20": [
              5876
            ],
            "ISAMB": [
              3059
            ]
          },
          "id": 3060,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3044,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:30"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 3045,
              "nodeType": "ImportDirective",
              "scope": 3060,
              "sourceUnit": 5877,
              "src": "70:56:30",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 3047,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5876,
                    "src": "177:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$5876",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 3048,
                  "nodeType": "InheritanceSpecifier",
                  "src": "177:6:30"
                }
              ],
              "contractDependencies": [
                5876
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 3046,
                "nodeType": "StructuredDocumentation",
                "src": "128:30:30",
                "text": "@title Interface for SAMB"
              },
              "fullyImplemented": false,
              "id": 3059,
              "linearizedBaseContracts": [
                3059,
                5876
              ],
              "name": "ISAMB",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 3049,
                    "nodeType": "StructuredDocumentation",
                    "src": "190:46:30",
                    "text": "@notice Deposit ether to get wrapped ether"
                  },
                  "functionSelector": "d0e30db0",
                  "id": 3052,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deposit",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3050,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "257:2:30"
                  },
                  "returnParameters": {
                    "id": 3051,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "276:0:30"
                  },
                  "scope": 3059,
                  "src": "241:36:30",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 3053,
                    "nodeType": "StructuredDocumentation",
                    "src": "283:47:30",
                    "text": "@notice Withdraw wrapped ether to get ether"
                  },
                  "functionSelector": "2e1a7d4d",
                  "id": 3058,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3056,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3055,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3058,
                        "src": "353:7:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3054,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "353:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "352:9:30"
                  },
                  "returnParameters": {
                    "id": 3057,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "370:0:30"
                  },
                  "scope": 3059,
                  "src": "335:36:30",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3060,
              "src": "158:215:30"
            }
          ],
          "src": "45:329:30"
        },
        "id": 30
      },
      "@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol",
          "exportedSymbols": {
            "BytesLib": [
              3178
            ]
          },
          "id": 3179,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3061,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "343:31:31"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "fullyImplemented": true,
              "id": 3178,
              "linearizedBaseContracts": [
                3178
              ],
              "name": "BytesLib",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 3106,
                    "nodeType": "Block",
                    "src": "505:2703:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3077,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3075,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3073,
                                  "name": "_length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3067,
                                  "src": "523:7:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "3331",
                                  "id": 3074,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "533:2:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_31_by_1",
                                    "typeString": "int_const 31"
                                  },
                                  "value": "31"
                                },
                                "src": "523:12:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 3076,
                                "name": "_length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3067,
                                "src": "539:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "523:23:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "736c6963655f6f766572666c6f77",
                              "id": 3078,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "548:16:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5d3d629f76473d94377d221b1f1c8f2161f7b65cab69e095662ec5d0e026c17e",
                                "typeString": "literal_string \"slice_overflow\""
                              },
                              "value": "slice_overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5d3d629f76473d94377d221b1f1c8f2161f7b65cab69e095662ec5d0e026c17e",
                                "typeString": "literal_string \"slice_overflow\""
                              }
                            ],
                            "id": 3072,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "515:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3079,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "515:50:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3080,
                        "nodeType": "ExpressionStatement",
                        "src": "515:50:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3086,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3084,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3082,
                                  "name": "_start",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3065,
                                  "src": "583:6:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 3083,
                                  "name": "_length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3067,
                                  "src": "592:7:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "583:16:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 3085,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3065,
                                "src": "603:6:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "583:26:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "736c6963655f6f766572666c6f77",
                              "id": 3087,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "611:16:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5d3d629f76473d94377d221b1f1c8f2161f7b65cab69e095662ec5d0e026c17e",
                                "typeString": "literal_string \"slice_overflow\""
                              },
                              "value": "slice_overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5d3d629f76473d94377d221b1f1c8f2161f7b65cab69e095662ec5d0e026c17e",
                                "typeString": "literal_string \"slice_overflow\""
                              }
                            ],
                            "id": 3081,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "575:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3088,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "575:53:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3089,
                        "nodeType": "ExpressionStatement",
                        "src": "575:53:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3096,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 3091,
                                  "name": "_bytes",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3063,
                                  "src": "646:6:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 3092,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "646:13:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3095,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3093,
                                  "name": "_start",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3065,
                                  "src": "663:6:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 3094,
                                  "name": "_length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3067,
                                  "src": "672:7:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "663:16:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "646:33:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "736c6963655f6f75744f66426f756e6473",
                              "id": 3097,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "681:19:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cca2258dcc0d08c244435525255fbef9116c9a31b4c29471218f002bbbceb7a0",
                                "typeString": "literal_string \"slice_outOfBounds\""
                              },
                              "value": "slice_outOfBounds"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cca2258dcc0d08c244435525255fbef9116c9a31b4c29471218f002bbbceb7a0",
                                "typeString": "literal_string \"slice_outOfBounds\""
                              }
                            ],
                            "id": 3090,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "638:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "638:63:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3099,
                        "nodeType": "ExpressionStatement",
                        "src": "638:63:31"
                      },
                      {
                        "assignments": [
                          3101
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3101,
                            "mutability": "mutable",
                            "name": "tempBytes",
                            "nodeType": "VariableDeclaration",
                            "scope": 3106,
                            "src": "712:22:31",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3100,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "712:5:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3102,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "712:22:31"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "754:2421:31",
                          "statements": [
                            {
                              "cases": [
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "810:1960:31",
                                    "statements": [
                                      {
                                        "nodeType": "YulAssignment",
                                        "src": "966:24:31",
                                        "value": {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "985:4:31",
                                              "type": "",
                                              "value": "0x40"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "979:5:31"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "979:11:31"
                                        },
                                        "variableNames": [
                                          {
                                            "name": "tempBytes",
                                            "nodeType": "YulIdentifier",
                                            "src": "966:9:31"
                                          }
                                        ]
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "1614:33:31",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "_length",
                                              "nodeType": "YulIdentifier",
                                              "src": "1635:7:31"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1644:2:31",
                                              "type": "",
                                              "value": "31"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "1631:3:31"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1631:16:31"
                                        },
                                        "variables": [
                                          {
                                            "name": "lengthmod",
                                            "nodeType": "YulTypedName",
                                            "src": "1618:9:31",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "1968:70:31",
                                        "value": {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "tempBytes",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1986:9:31"
                                                },
                                                {
                                                  "name": "lengthmod",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1997:9:31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1982:3:31"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1982:25:31"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "2013:4:31",
                                                  "type": "",
                                                  "value": "0x20"
                                                },
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "lengthmod",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2026:9:31"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "iszero",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2019:6:31"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "2019:17:31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mul",
                                                "nodeType": "YulIdentifier",
                                                "src": "2009:3:31"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2009:28:31"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "1978:3:31"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1978:60:31"
                                        },
                                        "variables": [
                                          {
                                            "name": "mc",
                                            "nodeType": "YulTypedName",
                                            "src": "1972:2:31",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "2055:27:31",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "mc",
                                              "nodeType": "YulIdentifier",
                                              "src": "2070:2:31"
                                            },
                                            {
                                              "name": "_length",
                                              "nodeType": "YulIdentifier",
                                              "src": "2074:7:31"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "2066:3:31"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2066:16:31"
                                        },
                                        "variables": [
                                          {
                                            "name": "end",
                                            "nodeType": "YulTypedName",
                                            "src": "2059:3:31",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "2464:61:31",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "name": "mc",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2493:2:31"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "cc",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2503:2:31"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2497:5:31"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2497:9:31"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mstore",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2486:6:31"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2486:21:31"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "2486:21:31"
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "arguments": [
                                            {
                                              "name": "mc",
                                              "nodeType": "YulIdentifier",
                                              "src": "2355:2:31"
                                            },
                                            {
                                              "name": "end",
                                              "nodeType": "YulIdentifier",
                                              "src": "2359:3:31"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "lt",
                                            "nodeType": "YulIdentifier",
                                            "src": "2352:2:31"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2352:11:31"
                                        },
                                        "nodeType": "YulForLoop",
                                        "post": {
                                          "nodeType": "YulBlock",
                                          "src": "2364:99:31",
                                          "statements": [
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "2386:19:31",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "mc",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2396:2:31"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2400:4:31",
                                                    "type": "",
                                                    "value": "0x20"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2392:3:31"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2392:13:31"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "mc",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2386:2:31"
                                                }
                                              ]
                                            },
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "2426:19:31",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "cc",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2436:2:31"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2440:4:31",
                                                    "type": "",
                                                    "value": "0x20"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2432:3:31"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2432:13:31"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "cc",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2426:2:31"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "pre": {
                                          "nodeType": "YulBlock",
                                          "src": "2104:247:31",
                                          "statements": [
                                            {
                                              "nodeType": "YulVariableDeclaration",
                                              "src": "2253:80:31",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "_bytes",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2275:6:31"
                                                          },
                                                          {
                                                            "name": "lengthmod",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2283:9:31"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2271:3:31"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2271:22:31"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "2299:4:31",
                                                            "type": "",
                                                            "value": "0x20"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "lengthmod",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "2312:9:31"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "iszero",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "2305:6:31"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "2305:17:31"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "mul",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2295:3:31"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2295:28:31"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2267:3:31"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2267:57:31"
                                                  },
                                                  {
                                                    "name": "_start",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2326:6:31"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2263:3:31"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2263:70:31"
                                              },
                                              "variables": [
                                                {
                                                  "name": "cc",
                                                  "nodeType": "YulTypedName",
                                                  "src": "2257:2:31",
                                                  "type": ""
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "src": "2100:425:31"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "tempBytes",
                                              "nodeType": "YulIdentifier",
                                              "src": "2550:9:31"
                                            },
                                            {
                                              "name": "_length",
                                              "nodeType": "YulIdentifier",
                                              "src": "2561:7:31"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "2543:6:31"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2543:26:31"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "2543:26:31"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2724:4:31",
                                              "type": "",
                                              "value": "0x40"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "mc",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2738:2:31"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "2742:2:31",
                                                      "type": "",
                                                      "value": "31"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2734:3:31"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "2734:11:31"
                                                },
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "2751:2:31",
                                                      "type": "",
                                                      "value": "31"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "not",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2747:3:31"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "2747:7:31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "and",
                                                "nodeType": "YulIdentifier",
                                                "src": "2730:3:31"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2730:25:31"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "2717:6:31"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2717:39:31"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "2717:39:31"
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "803:1967:31",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "808:1:31",
                                    "type": "",
                                    "value": "0"
                                  }
                                },
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "2874:291:31",
                                    "statements": [
                                      {
                                        "nodeType": "YulAssignment",
                                        "src": "2892:24:31",
                                        "value": {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2911:4:31",
                                              "type": "",
                                              "value": "0x40"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "2905:5:31"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2905:11:31"
                                        },
                                        "variableNames": [
                                          {
                                            "name": "tempBytes",
                                            "nodeType": "YulIdentifier",
                                            "src": "2892:9:31"
                                          }
                                        ]
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "tempBytes",
                                              "nodeType": "YulIdentifier",
                                              "src": "3086:9:31"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "3097:1:31",
                                              "type": "",
                                              "value": "0"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "3079:6:31"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3079:20:31"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "3079:20:31"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "3124:4:31",
                                              "type": "",
                                              "value": "0x40"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "tempBytes",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3134:9:31"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "3145:4:31",
                                                  "type": "",
                                                  "value": "0x20"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "3130:3:31"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3130:20:31"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "3117:6:31"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3117:34:31"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "3117:34:31"
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "2866:299:31",
                                  "value": "default"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "_length",
                                    "nodeType": "YulIdentifier",
                                    "src": "782:7:31"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "775:6:31"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "775:15:31"
                              },
                              "nodeType": "YulSwitch",
                              "src": "768:2397:31"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 3063,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2275:6:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3067,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1635:7:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3067,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2074:7:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3067,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2561:7:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3067,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "782:7:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3065,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2326:6:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3101,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1986:9:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3101,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2550:9:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3101,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2892:9:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3101,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3086:9:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3101,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3134:9:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3101,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "966:9:31",
                            "valueSize": 1
                          }
                        ],
                        "id": 3103,
                        "nodeType": "InlineAssembly",
                        "src": "745:2430:31"
                      },
                      {
                        "expression": {
                          "id": 3104,
                          "name": "tempBytes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3101,
                          "src": "3192:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3071,
                        "id": 3105,
                        "nodeType": "Return",
                        "src": "3185:16:31"
                      }
                    ]
                  },
                  "id": 3107,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "slice",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3068,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3063,
                        "mutability": "mutable",
                        "name": "_bytes",
                        "nodeType": "VariableDeclaration",
                        "scope": 3107,
                        "src": "414:19:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3062,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "414:5:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3065,
                        "mutability": "mutable",
                        "name": "_start",
                        "nodeType": "VariableDeclaration",
                        "scope": 3107,
                        "src": "435:14:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3064,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "435:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3067,
                        "mutability": "mutable",
                        "name": "_length",
                        "nodeType": "VariableDeclaration",
                        "scope": 3107,
                        "src": "451:15:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3066,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "451:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "413:54:31"
                  },
                  "returnParameters": {
                    "id": 3071,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3070,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3107,
                        "src": "491:12:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3069,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "491:5:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "490:14:31"
                  },
                  "scope": 3178,
                  "src": "399:2809:31",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3141,
                    "nodeType": "Block",
                    "src": "3302:328:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3121,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3119,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3117,
                                  "name": "_start",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3111,
                                  "src": "3320:6:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "3230",
                                  "id": 3118,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3329:2:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_20_by_1",
                                    "typeString": "int_const 20"
                                  },
                                  "value": "20"
                                },
                                "src": "3320:11:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 3120,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3111,
                                "src": "3335:6:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3320:21:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "746f416464726573735f6f766572666c6f77",
                              "id": 3122,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3343:20:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f71efb0937d5d9d75bbebe9d7207dad811fd47ced903ea9404d5e8d77eb17a95",
                                "typeString": "literal_string \"toAddress_overflow\""
                              },
                              "value": "toAddress_overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f71efb0937d5d9d75bbebe9d7207dad811fd47ced903ea9404d5e8d77eb17a95",
                                "typeString": "literal_string \"toAddress_overflow\""
                              }
                            ],
                            "id": 3116,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3312:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3123,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3312:52:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3124,
                        "nodeType": "ExpressionStatement",
                        "src": "3312:52:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 3126,
                                  "name": "_bytes",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3109,
                                  "src": "3382:6:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 3127,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "3382:13:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3130,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3128,
                                  "name": "_start",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3111,
                                  "src": "3399:6:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "3230",
                                  "id": 3129,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3408:2:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_20_by_1",
                                    "typeString": "int_const 20"
                                  },
                                  "value": "20"
                                },
                                "src": "3399:11:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3382:28:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "746f416464726573735f6f75744f66426f756e6473",
                              "id": 3132,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3412:23:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9f688071e1df0f70b63e3651005878331be1fe9591d6cfb3187cb52a13439e5d",
                                "typeString": "literal_string \"toAddress_outOfBounds\""
                              },
                              "value": "toAddress_outOfBounds"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9f688071e1df0f70b63e3651005878331be1fe9591d6cfb3187cb52a13439e5d",
                                "typeString": "literal_string \"toAddress_outOfBounds\""
                              }
                            ],
                            "id": 3125,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3374:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3374:62:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3134,
                        "nodeType": "ExpressionStatement",
                        "src": "3374:62:31"
                      },
                      {
                        "assignments": [
                          3136
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3136,
                            "mutability": "mutable",
                            "name": "tempAddress",
                            "nodeType": "VariableDeclaration",
                            "scope": 3141,
                            "src": "3446:19:31",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 3135,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3446:7:31",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3137,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3446:19:31"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "3485:110:31",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3499:86:31",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "_bytes",
                                                "nodeType": "YulIdentifier",
                                                "src": "3532:6:31"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3540:4:31",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "3528:3:31"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3528:17:31"
                                          },
                                          {
                                            "name": "_start",
                                            "nodeType": "YulIdentifier",
                                            "src": "3547:6:31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3524:3:31"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3524:30:31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "3518:5:31"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3518:37:31"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3557:27:31",
                                    "type": "",
                                    "value": "0x1000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "3514:3:31"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3514:71:31"
                              },
                              "variableNames": [
                                {
                                  "name": "tempAddress",
                                  "nodeType": "YulIdentifier",
                                  "src": "3499:11:31"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 3109,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3532:6:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3111,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3547:6:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3136,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3499:11:31",
                            "valueSize": 1
                          }
                        ],
                        "id": 3138,
                        "nodeType": "InlineAssembly",
                        "src": "3476:119:31"
                      },
                      {
                        "expression": {
                          "id": 3139,
                          "name": "tempAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3136,
                          "src": "3612:11:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 3115,
                        "id": 3140,
                        "nodeType": "Return",
                        "src": "3605:18:31"
                      }
                    ]
                  },
                  "id": 3142,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toAddress",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3109,
                        "mutability": "mutable",
                        "name": "_bytes",
                        "nodeType": "VariableDeclaration",
                        "scope": 3142,
                        "src": "3233:19:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3108,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3233:5:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3111,
                        "mutability": "mutable",
                        "name": "_start",
                        "nodeType": "VariableDeclaration",
                        "scope": 3142,
                        "src": "3254:14:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3110,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3254:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3232:37:31"
                  },
                  "returnParameters": {
                    "id": 3115,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3114,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3142,
                        "src": "3293:7:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3113,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3293:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3292:9:31"
                  },
                  "scope": 3178,
                  "src": "3214:416:31",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3176,
                    "nodeType": "Block",
                    "src": "3722:279:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3156,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3154,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3152,
                                  "name": "_start",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3146,
                                  "src": "3740:6:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "33",
                                  "id": 3153,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3749:1:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  },
                                  "value": "3"
                                },
                                "src": "3740:10:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 3155,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3146,
                                "src": "3754:6:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3740:20:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "746f55696e7432345f6f766572666c6f77",
                              "id": 3157,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3762:19:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_428a8ba368fc474210479d5009a3c2ddaf9d762393b1b3cd3cf1b440d48791c5",
                                "typeString": "literal_string \"toUint24_overflow\""
                              },
                              "value": "toUint24_overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_428a8ba368fc474210479d5009a3c2ddaf9d762393b1b3cd3cf1b440d48791c5",
                                "typeString": "literal_string \"toUint24_overflow\""
                              }
                            ],
                            "id": 3151,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3732:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3732:50:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3159,
                        "nodeType": "ExpressionStatement",
                        "src": "3732:50:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3166,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 3161,
                                  "name": "_bytes",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3144,
                                  "src": "3800:6:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 3162,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "3800:13:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3165,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3163,
                                  "name": "_start",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3146,
                                  "src": "3817:6:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "33",
                                  "id": 3164,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3826:1:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  },
                                  "value": "3"
                                },
                                "src": "3817:10:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3800:27:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "746f55696e7432345f6f75744f66426f756e6473",
                              "id": 3167,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3829:22:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_92c5fac6e5cb4f75ffccd9c8f373ae2e2c333a8b9c2fdc616c52c36fa31575dc",
                                "typeString": "literal_string \"toUint24_outOfBounds\""
                              },
                              "value": "toUint24_outOfBounds"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_92c5fac6e5cb4f75ffccd9c8f373ae2e2c333a8b9c2fdc616c52c36fa31575dc",
                                "typeString": "literal_string \"toUint24_outOfBounds\""
                              }
                            ],
                            "id": 3160,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3792:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3792:60:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3169,
                        "nodeType": "ExpressionStatement",
                        "src": "3792:60:31"
                      },
                      {
                        "assignments": [
                          3171
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3171,
                            "mutability": "mutable",
                            "name": "tempUint",
                            "nodeType": "VariableDeclaration",
                            "scope": 3176,
                            "src": "3862:15:31",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            },
                            "typeName": {
                              "id": 3170,
                              "name": "uint24",
                              "nodeType": "ElementaryTypeName",
                              "src": "3862:6:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3172,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3862:15:31"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "3897:72:31",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3911:48:31",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_bytes",
                                            "nodeType": "YulIdentifier",
                                            "src": "3937:6:31"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3945:3:31",
                                            "type": "",
                                            "value": "0x3"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3933:3:31"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3933:16:31"
                                      },
                                      {
                                        "name": "_start",
                                        "nodeType": "YulIdentifier",
                                        "src": "3951:6:31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3929:3:31"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3929:29:31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3923:5:31"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3923:36:31"
                              },
                              "variableNames": [
                                {
                                  "name": "tempUint",
                                  "nodeType": "YulIdentifier",
                                  "src": "3911:8:31"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 3144,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3937:6:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3146,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3951:6:31",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3171,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3911:8:31",
                            "valueSize": 1
                          }
                        ],
                        "id": 3173,
                        "nodeType": "InlineAssembly",
                        "src": "3888:81:31"
                      },
                      {
                        "expression": {
                          "id": 3174,
                          "name": "tempUint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3171,
                          "src": "3986:8:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "functionReturnParameters": 3150,
                        "id": 3175,
                        "nodeType": "Return",
                        "src": "3979:15:31"
                      }
                    ]
                  },
                  "id": 3177,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3147,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3144,
                        "mutability": "mutable",
                        "name": "_bytes",
                        "nodeType": "VariableDeclaration",
                        "scope": 3177,
                        "src": "3654:19:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3143,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3654:5:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3146,
                        "mutability": "mutable",
                        "name": "_start",
                        "nodeType": "VariableDeclaration",
                        "scope": 3177,
                        "src": "3675:14:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3145,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3675:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3653:37:31"
                  },
                  "returnParameters": {
                    "id": 3150,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3149,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3177,
                        "src": "3714:6:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 3148,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3714:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3713:8:31"
                  },
                  "scope": 3178,
                  "src": "3636:365:31",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 3179,
              "src": "376:3627:31"
            }
          ],
          "src": "343:3661:31"
        },
        "id": 31
      },
      "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol",
          "exportedSymbols": {
            "CallbackValidation": [
              3240
            ],
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "PoolAddress": [
              4054
            ]
          },
          "id": 3241,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3180,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:32"
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "id": 3181,
              "nodeType": "ImportDirective",
              "scope": 3241,
              "sourceUnit": 28,
              "src": "123:69:32",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
              "file": "./PoolAddress.sol",
              "id": 3182,
              "nodeType": "ImportDirective",
              "scope": 3241,
              "sourceUnit": 4055,
              "src": "193:27:32",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3183,
                "nodeType": "StructuredDocumentation",
                "src": "222:69:32",
                "text": "@notice Provides validation for callbacks from AstraDEX CL Pools"
              },
              "fullyImplemented": true,
              "id": 3240,
              "linearizedBaseContracts": [
                3240
              ],
              "name": "CallbackValidation",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 3207,
                    "nodeType": "Block",
                    "src": "907:92:32",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3198,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3186,
                              "src": "939:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 3201,
                                  "name": "tokenA",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3188,
                                  "src": "971:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 3202,
                                  "name": "tokenB",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3190,
                                  "src": "979:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 3203,
                                  "name": "fee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3192,
                                  "src": "987:3:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                ],
                                "expression": {
                                  "id": 3199,
                                  "name": "PoolAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4054,
                                  "src": "948:11:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                    "typeString": "type(library PoolAddress)"
                                  }
                                },
                                "id": 3200,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getPoolKey",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4006,
                                "src": "948:22:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint24_$returns$_t_struct$_PoolKey_$3975_memory_ptr_$",
                                  "typeString": "function (address,address,uint24) pure returns (struct PoolAddress.PoolKey memory)"
                                }
                              },
                              "id": 3204,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "948:43:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                "typeString": "struct PoolAddress.PoolKey memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                "typeString": "struct PoolAddress.PoolKey memory"
                              }
                            ],
                            "id": 3197,
                            "name": "verifyCallback",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3208,
                              3239
                            ],
                            "referencedDeclaration": 3239,
                            "src": "924:14:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_struct$_PoolKey_$3975_memory_ptr_$returns$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "function (address,struct PoolAddress.PoolKey memory) view returns (contract IAstraCLPool)"
                            }
                          },
                          "id": 3205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "924:68:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "functionReturnParameters": 3196,
                        "id": 3206,
                        "nodeType": "Return",
                        "src": "917:75:32"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3184,
                    "nodeType": "StructuredDocumentation",
                    "src": "324:413:32",
                    "text": "@notice Returns the address of a valid AstraDEX CL Pool\n @param factory The contract address of the AstraDEX CL factory\n @param tokenA The contract address of either token0 or token1\n @param tokenB The contract address of the other token\n @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip\n @return pool The CL pool contract address"
                  },
                  "id": 3208,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifyCallback",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3193,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3186,
                        "mutability": "mutable",
                        "name": "factory",
                        "nodeType": "VariableDeclaration",
                        "scope": 3208,
                        "src": "775:15:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3185,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "775:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3188,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 3208,
                        "src": "800:14:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3187,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "800:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3190,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 3208,
                        "src": "824:14:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3189,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "824:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3192,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 3208,
                        "src": "848:10:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 3191,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "848:6:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "765:99:32"
                  },
                  "returnParameters": {
                    "id": 3196,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3195,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 3208,
                        "src": "888:17:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 3194,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "888:12:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "887:19:32"
                  },
                  "scope": 3240,
                  "src": "742:257:32",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3238,
                    "nodeType": "Block",
                    "src": "1389:128:32",
                    "statements": [
                      {
                        "expression": {
                          "id": 3226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3218,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3216,
                            "src": "1399:4:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 3222,
                                    "name": "factory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3211,
                                    "src": "1446:7:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3223,
                                    "name": "poolKey",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3213,
                                    "src": "1455:7:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                      "typeString": "struct PoolAddress.PoolKey memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                      "typeString": "struct PoolAddress.PoolKey memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 3220,
                                    "name": "PoolAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4054,
                                    "src": "1419:11:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                      "typeString": "type(library PoolAddress)"
                                    }
                                  },
                                  "id": 3221,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "computeAddress",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4053,
                                  "src": "1419:26:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_address_$_t_struct$_PoolKey_$3975_memory_ptr_$returns$_t_address_$",
                                    "typeString": "function (address,struct PoolAddress.PoolKey memory) pure returns (address)"
                                  }
                                },
                                "id": 3224,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1419:44:32",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3219,
                              "name": "IAstraCLPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27,
                              "src": "1406:12:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                "typeString": "type(contract IAstraCLPool)"
                              }
                            },
                            "id": 3225,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1406:58:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            }
                          },
                          "src": "1399:65:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "id": 3227,
                        "nodeType": "ExpressionStatement",
                        "src": "1399:65:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 3229,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1482:3:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3230,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1482:10:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "id": 3233,
                                    "name": "pool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3216,
                                    "src": "1504:4:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                      "typeString": "contract IAstraCLPool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                      "typeString": "contract IAstraCLPool"
                                    }
                                  ],
                                  "id": 3232,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1496:7:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 3231,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1496:7:32",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3234,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1496:13:32",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1482:27:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 3228,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1474:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 3236,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1474:36:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3237,
                        "nodeType": "ExpressionStatement",
                        "src": "1474:36:32"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3209,
                    "nodeType": "StructuredDocumentation",
                    "src": "1005:238:32",
                    "text": "@notice Returns the address of a valid AstraDEX CL Pool\n @param factory The contract address of the AstraDEX CL factory\n @param poolKey The identifying key of the CL pool\n @return pool The CL pool contract address"
                  },
                  "id": 3239,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifyCallback",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3214,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3211,
                        "mutability": "mutable",
                        "name": "factory",
                        "nodeType": "VariableDeclaration",
                        "scope": 3239,
                        "src": "1281:15:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3210,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1281:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3213,
                        "mutability": "mutable",
                        "name": "poolKey",
                        "nodeType": "VariableDeclaration",
                        "scope": 3239,
                        "src": "1306:34:32",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                          "typeString": "struct PoolAddress.PoolKey"
                        },
                        "typeName": {
                          "id": 3212,
                          "name": "PoolAddress.PoolKey",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3975,
                          "src": "1306:19:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PoolKey_$3975_storage_ptr",
                            "typeString": "struct PoolAddress.PoolKey"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1271:75:32"
                  },
                  "returnParameters": {
                    "id": 3217,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3216,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 3239,
                        "src": "1370:17:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 3215,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "1370:12:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1369:19:32"
                  },
                  "scope": 3240,
                  "src": "1248:269:32",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 3241,
              "src": "291:1228:32"
            }
          ],
          "src": "45:1475:32"
        },
        "id": 32
      },
      "@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol",
          "exportedSymbols": {
            "FullMath": [
              913
            ],
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "OracleLibrary": [
              3829
            ],
            "TickMath": [
              1904
            ]
          },
          "id": 3830,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3242,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:31:33"
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/FullMath.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/FullMath.sol",
              "id": 3243,
              "nodeType": "ImportDirective",
              "scope": 3830,
              "sourceUnit": 914,
              "src": "131:64:33",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/TickMath.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/TickMath.sol",
              "id": 3244,
              "nodeType": "ImportDirective",
              "scope": 3830,
              "sourceUnit": 1905,
              "src": "249:64:33",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "id": 3245,
              "nodeType": "ImportDirective",
              "scope": 3830,
              "sourceUnit": 28,
              "src": "367:69:33",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3246,
                "nodeType": "StructuredDocumentation",
                "src": "438:90:33",
                "text": "@title Oracle library\n @notice Provides functions to integrate with CL pool oracle"
              },
              "fullyImplemented": true,
              "id": 3829,
              "linearizedBaseContracts": [
                3829
              ],
              "name": "OracleLibrary",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 3374,
                    "nodeType": "Block",
                    "src": "1210:1068:33",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "id": 3261,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3259,
                                "name": "secondsAgo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3251,
                                "src": "1228:10:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 3260,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1242:1:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1228:15:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4250",
                              "id": 3262,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1245:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6f8c752f16a50d13ae873620fdefd90c2c58e0d13a068366e5a1b685076b71bb",
                                "typeString": "literal_string \"BP\""
                              },
                              "value": "BP"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6f8c752f16a50d13ae873620fdefd90c2c58e0d13a068366e5a1b685076b71bb",
                                "typeString": "literal_string \"BP\""
                              }
                            ],
                            "id": 3258,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1220:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1220:30:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3264,
                        "nodeType": "ExpressionStatement",
                        "src": "1220:30:33"
                      },
                      {
                        "assignments": [
                          3269
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3269,
                            "mutability": "mutable",
                            "name": "secondsAgos",
                            "nodeType": "VariableDeclaration",
                            "scope": 3374,
                            "src": "1261:27:33",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3267,
                                "name": "uint32",
                                "nodeType": "ElementaryTypeName",
                                "src": "1261:6:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 3268,
                              "nodeType": "ArrayTypeName",
                              "src": "1261:8:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                "typeString": "uint32[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3275,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "32",
                              "id": 3273,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1304:1:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "id": 3272,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "1291:12:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (uint32[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3270,
                                "name": "uint32",
                                "nodeType": "ElementaryTypeName",
                                "src": "1295:6:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 3271,
                              "nodeType": "ArrayTypeName",
                              "src": "1295:8:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                "typeString": "uint32[]"
                              }
                            }
                          },
                          "id": 3274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1291:15:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1261:45:33"
                      },
                      {
                        "expression": {
                          "id": 3280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3276,
                              "name": "secondsAgos",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3269,
                              "src": "1316:11:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            },
                            "id": 3278,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 3277,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1328:1:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1316:14:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3279,
                            "name": "secondsAgo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3251,
                            "src": "1333:10:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "1316:27:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 3281,
                        "nodeType": "ExpressionStatement",
                        "src": "1316:27:33"
                      },
                      {
                        "expression": {
                          "id": 3286,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3282,
                              "name": "secondsAgos",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3269,
                              "src": "1353:11:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            },
                            "id": 3284,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 3283,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1365:1:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1353:14:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 3285,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1370:1:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1353:18:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 3287,
                        "nodeType": "ExpressionStatement",
                        "src": "1353:18:33"
                      },
                      {
                        "assignments": [
                          3292,
                          3295
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3292,
                            "mutability": "mutable",
                            "name": "tickCumulatives",
                            "nodeType": "VariableDeclaration",
                            "scope": 3374,
                            "src": "1383:30:33",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                              "typeString": "int56[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3290,
                                "name": "int56",
                                "nodeType": "ElementaryTypeName",
                                "src": "1383:5:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                }
                              },
                              "id": 3291,
                              "nodeType": "ArrayTypeName",
                              "src": "1383:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_int56_$dyn_storage_ptr",
                                "typeString": "int56[]"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3295,
                            "mutability": "mutable",
                            "name": "secondsPerLiquidityCumulativeX128s",
                            "nodeType": "VariableDeclaration",
                            "scope": 3374,
                            "src": "1415:51:33",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                              "typeString": "uint160[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3293,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "1415:7:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "id": 3294,
                              "nodeType": "ArrayTypeName",
                              "src": "1415:9:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                                "typeString": "uint160[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3302,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3300,
                              "name": "secondsAgos",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3269,
                              "src": "1510:11:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3297,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3249,
                                  "src": "1483:4:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3296,
                                "name": "IAstraCLPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27,
                                "src": "1470:12:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "type(contract IAstraCLPool)"
                                }
                              },
                              "id": 3298,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1470:18:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 3299,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "observe",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 153,
                            "src": "1470:39:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_array$_t_int56_$dyn_memory_ptr_$_t_array$_t_uint160_$dyn_memory_ptr_$",
                              "typeString": "function (uint32[] memory) view external returns (int56[] memory,uint160[] memory)"
                            }
                          },
                          "id": 3301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1470:52:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_array$_t_int56_$dyn_memory_ptr_$_t_array$_t_uint160_$dyn_memory_ptr_$",
                            "typeString": "tuple(int56[] memory,uint160[] memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1382:140:33"
                      },
                      {
                        "assignments": [
                          3304
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3304,
                            "mutability": "mutable",
                            "name": "tickCumulativesDelta",
                            "nodeType": "VariableDeclaration",
                            "scope": 3374,
                            "src": "1533:26:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            },
                            "typeName": {
                              "id": 3303,
                              "name": "int56",
                              "nodeType": "ElementaryTypeName",
                              "src": "1533:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3312,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          },
                          "id": 3311,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 3305,
                              "name": "tickCumulatives",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3292,
                              "src": "1562:15:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                                "typeString": "int56[] memory"
                              }
                            },
                            "id": 3307,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 3306,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1578:1:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1562:18:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 3308,
                              "name": "tickCumulatives",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3292,
                              "src": "1583:15:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                                "typeString": "int56[] memory"
                              }
                            },
                            "id": 3310,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 3309,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1599:1:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1583:18:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "src": "1562:39:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1533:68:33"
                      },
                      {
                        "assignments": [
                          3314
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3314,
                            "mutability": "mutable",
                            "name": "secondsPerLiquidityCumulativesDelta",
                            "nodeType": "VariableDeclaration",
                            "scope": 3374,
                            "src": "1611:43:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "typeName": {
                              "id": 3313,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "1611:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3322,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 3321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 3315,
                              "name": "secondsPerLiquidityCumulativeX128s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3295,
                              "src": "1657:34:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                                "typeString": "uint160[] memory"
                              }
                            },
                            "id": 3317,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 3316,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1692:1:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1657:37:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 3318,
                              "name": "secondsPerLiquidityCumulativeX128s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3295,
                              "src": "1709:34:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                                "typeString": "uint160[] memory"
                              }
                            },
                            "id": 3320,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 3319,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1744:1:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1709:37:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "1657:89:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1611:135:33"
                      },
                      {
                        "expression": {
                          "id": 3330,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3323,
                            "name": "arithmeticMeanTick",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3254,
                            "src": "1757:18:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                },
                                "id": 3328,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3326,
                                  "name": "tickCumulativesDelta",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3304,
                                  "src": "1784:20:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "id": 3327,
                                  "name": "secondsAgo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3251,
                                  "src": "1807:10:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "1784:33:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                }
                              ],
                              "id": 3325,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1778:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int24_$",
                                "typeString": "type(int24)"
                              },
                              "typeName": {
                                "id": 3324,
                                "name": "int24",
                                "nodeType": "ElementaryTypeName",
                                "src": "1778:5:33",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3329,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1778:40:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "1757:61:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "id": 3331,
                        "nodeType": "ExpressionStatement",
                        "src": "1757:61:33"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3341,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            },
                            "id": 3334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3332,
                              "name": "tickCumulativesDelta",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3304,
                              "src": "1877:20:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 3333,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1900:1:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "1877:24:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                },
                                "id": 3339,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  },
                                  "id": 3337,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3335,
                                    "name": "tickCumulativesDelta",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3304,
                                    "src": "1906:20:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int56",
                                      "typeString": "int56"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "id": 3336,
                                    "name": "secondsAgo",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3251,
                                    "src": "1929:10:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "1906:33:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 3338,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1943:1:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "1906:38:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 3340,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1905:40:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1877:68:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3345,
                        "nodeType": "IfStatement",
                        "src": "1873:94:33",
                        "trueBody": {
                          "expression": {
                            "id": 3343,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": false,
                            "src": "1947:20:33",
                            "subExpression": {
                              "id": 3342,
                              "name": "arithmeticMeanTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3254,
                              "src": "1947:18:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "id": 3344,
                          "nodeType": "ExpressionStatement",
                          "src": "1947:20:33"
                        }
                      },
                      {
                        "assignments": [
                          3347
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3347,
                            "mutability": "mutable",
                            "name": "secondsAgoX160",
                            "nodeType": "VariableDeclaration",
                            "scope": 3374,
                            "src": "2095:22:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint192",
                              "typeString": "uint192"
                            },
                            "typeName": {
                              "id": 3346,
                              "name": "uint192",
                              "nodeType": "ElementaryTypeName",
                              "src": "2095:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint192",
                                "typeString": "uint192"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3358,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint192",
                            "typeString": "uint192"
                          },
                          "id": 3357,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 3350,
                                "name": "secondsAgo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3251,
                                "src": "2128:10:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 3349,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2120:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint192_$",
                                "typeString": "type(uint192)"
                              },
                              "typeName": {
                                "id": 3348,
                                "name": "uint192",
                                "nodeType": "ElementaryTypeName",
                                "src": "2120:7:33",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3351,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2120:19:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint192",
                              "typeString": "uint192"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3354,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2147:7:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  },
                                  "typeName": {
                                    "id": 3353,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2147:7:33",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  }
                                ],
                                "id": 3352,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "2142:4:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 3355,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2142:13:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint160",
                                "typeString": "type(uint160)"
                              }
                            },
                            "id": 3356,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "2142:17:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "2120:39:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint192",
                            "typeString": "uint192"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2095:64:33"
                      },
                      {
                        "expression": {
                          "id": 3372,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3359,
                            "name": "harmonicMeanLiquidity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3256,
                            "src": "2169:21:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint192",
                                  "typeString": "uint192"
                                },
                                "id": 3370,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3362,
                                  "name": "secondsAgoX160",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3347,
                                  "src": "2201:14:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint192",
                                    "typeString": "uint192"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint192",
                                        "typeString": "uint192"
                                      },
                                      "id": 3368,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "arguments": [
                                          {
                                            "id": 3365,
                                            "name": "secondsPerLiquidityCumulativesDelta",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3314,
                                            "src": "2227:35:33",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            }
                                          ],
                                          "id": 3364,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "2219:7:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint192_$",
                                            "typeString": "type(uint192)"
                                          },
                                          "typeName": {
                                            "id": 3363,
                                            "name": "uint192",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2219:7:33",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 3366,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2219:44:33",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint192",
                                          "typeString": "uint192"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<<",
                                      "rightExpression": {
                                        "hexValue": "3332",
                                        "id": 3367,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2267:2:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_32_by_1",
                                          "typeString": "int_const 32"
                                        },
                                        "value": "32"
                                      },
                                      "src": "2219:50:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint192",
                                        "typeString": "uint192"
                                      }
                                    }
                                  ],
                                  "id": 3369,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "2218:52:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint192",
                                    "typeString": "uint192"
                                  }
                                },
                                "src": "2201:69:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint192",
                                  "typeString": "uint192"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint192",
                                  "typeString": "uint192"
                                }
                              ],
                              "id": 3361,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2193:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint128_$",
                                "typeString": "type(uint128)"
                              },
                              "typeName": {
                                "id": 3360,
                                "name": "uint128",
                                "nodeType": "ElementaryTypeName",
                                "src": "2193:7:33",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3371,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2193:78:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "2169:102:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 3373,
                        "nodeType": "ExpressionStatement",
                        "src": "2169:102:33"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3247,
                    "nodeType": "StructuredDocumentation",
                    "src": "556:497:33",
                    "text": "@notice Calculates time-weighted means of tick and liquidity for a given AstraDEX CL pool\n @param pool Address of the pool that we want to observe\n @param secondsAgo Number of seconds in the past from which to calculate the time-weighted means\n @return arithmeticMeanTick The arithmetic mean tick from (block.timestamp - secondsAgo) to block.timestamp\n @return harmonicMeanLiquidity The harmonic mean liquidity from (block.timestamp - secondsAgo) to block.timestamp"
                  },
                  "id": 3375,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "consult",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3252,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3249,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 3375,
                        "src": "1084:12:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1084:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3251,
                        "mutability": "mutable",
                        "name": "secondsAgo",
                        "nodeType": "VariableDeclaration",
                        "scope": 3375,
                        "src": "1106:17:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 3250,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1106:6:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1074:55:33"
                  },
                  "returnParameters": {
                    "id": 3257,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3254,
                        "mutability": "mutable",
                        "name": "arithmeticMeanTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 3375,
                        "src": "1153:24:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 3253,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1153:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3256,
                        "mutability": "mutable",
                        "name": "harmonicMeanLiquidity",
                        "nodeType": "VariableDeclaration",
                        "scope": 3375,
                        "src": "1179:29:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 3255,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1179:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1152:57:33"
                  },
                  "scope": 3829,
                  "src": "1058:1220:33",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3472,
                    "nodeType": "Block",
                    "src": "2959:778:33",
                    "statements": [
                      {
                        "assignments": [
                          3390
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3390,
                            "mutability": "mutable",
                            "name": "sqrtRatioX96",
                            "nodeType": "VariableDeclaration",
                            "scope": 3472,
                            "src": "2969:20:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "typeName": {
                              "id": 3389,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "2969:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3395,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3393,
                              "name": "tick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3378,
                              "src": "3020:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            ],
                            "expression": {
                              "id": 3391,
                              "name": "TickMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1904,
                              "src": "2992:8:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                "typeString": "type(library TickMath)"
                              }
                            },
                            "id": 3392,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getSqrtRatioAtTick",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1764,
                            "src": "2992:27:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_uint160_$",
                              "typeString": "function (int24) pure returns (uint160)"
                            }
                          },
                          "id": 3394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2992:33:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2969:56:33"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 3402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3396,
                            "name": "sqrtRatioX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3390,
                            "src": "3144:12:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3399,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3165:7:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  },
                                  "typeName": {
                                    "id": 3398,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3165:7:33",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  }
                                ],
                                "id": 3397,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "3160:4:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 3400,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3160:13:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint128",
                                "typeString": "type(uint128)"
                              }
                            },
                            "id": 3401,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "3160:17:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "3144:33:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 3470,
                          "nodeType": "Block",
                          "src": "3450:281:33",
                          "statements": [
                            {
                              "assignments": [
                                3437
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3437,
                                  "mutability": "mutable",
                                  "name": "ratioX128",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3470,
                                  "src": "3464:17:33",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3436,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3464:7:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3446,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 3440,
                                    "name": "sqrtRatioX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3390,
                                    "src": "3500:12:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  {
                                    "id": 3441,
                                    "name": "sqrtRatioX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3390,
                                    "src": "3514:12:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                      "typeString": "int_const 18446744073709551616"
                                    },
                                    "id": 3444,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 3442,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3528:1:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "3634",
                                      "id": 3443,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3533:2:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "3528:7:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                      "typeString": "int_const 18446744073709551616"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                      "typeString": "int_const 18446744073709551616"
                                    }
                                  ],
                                  "expression": {
                                    "id": 3438,
                                    "name": "FullMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 913,
                                    "src": "3484:8:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_FullMath_$913_$",
                                      "typeString": "type(library FullMath)"
                                    }
                                  },
                                  "id": 3439,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mulDiv",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 869,
                                  "src": "3484:15:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 3445,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3484:52:33",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3464:72:33"
                            },
                            {
                              "expression": {
                                "id": 3468,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3447,
                                  "name": "quoteAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3387,
                                  "src": "3550:11:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 3450,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 3448,
                                      "name": "baseToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3382,
                                      "src": "3564:9:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "id": 3449,
                                      "name": "quoteToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3384,
                                      "src": "3576:10:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "3564:22:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "arguments": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                          "typeString": "int_const 3402...(31 digits omitted)...1456"
                                        },
                                        "id": 3463,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "31",
                                          "id": 3461,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "3688:1:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "hexValue": "313238",
                                          "id": 3462,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "3693:3:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_128_by_1",
                                            "typeString": "int_const 128"
                                          },
                                          "value": "128"
                                        },
                                        "src": "3688:8:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                          "typeString": "int_const 3402...(31 digits omitted)...1456"
                                        }
                                      },
                                      {
                                        "id": 3464,
                                        "name": "baseAmount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3380,
                                        "src": "3698:10:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      {
                                        "id": 3465,
                                        "name": "ratioX128",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3437,
                                        "src": "3710:9:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                          "typeString": "int_const 3402...(31 digits omitted)...1456"
                                        },
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 3459,
                                        "name": "FullMath",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 913,
                                        "src": "3672:8:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_FullMath_$913_$",
                                          "typeString": "type(library FullMath)"
                                        }
                                      },
                                      "id": 3460,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mulDiv",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 869,
                                      "src": "3672:15:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 3466,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3672:48:33",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 3467,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "3564:156:33",
                                  "trueExpression": {
                                    "arguments": [
                                      {
                                        "id": 3453,
                                        "name": "ratioX128",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3437,
                                        "src": "3621:9:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 3454,
                                        "name": "baseAmount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3380,
                                        "src": "3632:10:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                          "typeString": "int_const 3402...(31 digits omitted)...1456"
                                        },
                                        "id": 3457,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "31",
                                          "id": 3455,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "3644:1:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "hexValue": "313238",
                                          "id": 3456,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "3649:3:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_128_by_1",
                                            "typeString": "int_const 128"
                                          },
                                          "value": "128"
                                        },
                                        "src": "3644:8:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                          "typeString": "int_const 3402...(31 digits omitted)...1456"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        },
                                        {
                                          "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                          "typeString": "int_const 3402...(31 digits omitted)...1456"
                                        }
                                      ],
                                      "expression": {
                                        "id": 3451,
                                        "name": "FullMath",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 913,
                                        "src": "3605:8:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_FullMath_$913_$",
                                          "typeString": "type(library FullMath)"
                                        }
                                      },
                                      "id": 3452,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mulDiv",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 869,
                                      "src": "3605:15:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 3458,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3605:48:33",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3550:170:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3469,
                              "nodeType": "ExpressionStatement",
                              "src": "3550:170:33"
                            }
                          ]
                        },
                        "id": 3471,
                        "nodeType": "IfStatement",
                        "src": "3140:591:33",
                        "trueBody": {
                          "id": 3435,
                          "nodeType": "Block",
                          "src": "3179:265:33",
                          "statements": [
                            {
                              "assignments": [
                                3404
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3404,
                                  "mutability": "mutable",
                                  "name": "ratioX192",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3435,
                                  "src": "3193:17:33",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3403,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3193:7:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3411,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3410,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 3407,
                                      "name": "sqrtRatioX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3390,
                                      "src": "3221:12:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    ],
                                    "id": 3406,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3213:7:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 3405,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3213:7:33",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 3408,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3213:21:33",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 3409,
                                  "name": "sqrtRatioX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3390,
                                  "src": "3237:12:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "3213:36:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3193:56:33"
                            },
                            {
                              "expression": {
                                "id": 3433,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3412,
                                  "name": "quoteAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3387,
                                  "src": "3263:11:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 3415,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 3413,
                                      "name": "baseToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3382,
                                      "src": "3277:9:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "id": 3414,
                                      "name": "quoteToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3384,
                                      "src": "3289:10:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "3277:22:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "arguments": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                          "typeString": "int_const 6277...(50 digits omitted)...2896"
                                        },
                                        "id": 3428,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "31",
                                          "id": 3426,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "3401:1:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "hexValue": "313932",
                                          "id": 3427,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "3406:3:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_192_by_1",
                                            "typeString": "int_const 192"
                                          },
                                          "value": "192"
                                        },
                                        "src": "3401:8:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                          "typeString": "int_const 6277...(50 digits omitted)...2896"
                                        }
                                      },
                                      {
                                        "id": 3429,
                                        "name": "baseAmount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3380,
                                        "src": "3411:10:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      {
                                        "id": 3430,
                                        "name": "ratioX192",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3404,
                                        "src": "3423:9:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                          "typeString": "int_const 6277...(50 digits omitted)...2896"
                                        },
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 3424,
                                        "name": "FullMath",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 913,
                                        "src": "3385:8:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_FullMath_$913_$",
                                          "typeString": "type(library FullMath)"
                                        }
                                      },
                                      "id": 3425,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mulDiv",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 869,
                                      "src": "3385:15:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 3431,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3385:48:33",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 3432,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "3277:156:33",
                                  "trueExpression": {
                                    "arguments": [
                                      {
                                        "id": 3418,
                                        "name": "ratioX192",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3404,
                                        "src": "3334:9:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 3419,
                                        "name": "baseAmount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3380,
                                        "src": "3345:10:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                          "typeString": "int_const 6277...(50 digits omitted)...2896"
                                        },
                                        "id": 3422,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "31",
                                          "id": 3420,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "3357:1:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "hexValue": "313932",
                                          "id": 3421,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "3362:3:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_192_by_1",
                                            "typeString": "int_const 192"
                                          },
                                          "value": "192"
                                        },
                                        "src": "3357:8:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                          "typeString": "int_const 6277...(50 digits omitted)...2896"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        },
                                        {
                                          "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                          "typeString": "int_const 6277...(50 digits omitted)...2896"
                                        }
                                      ],
                                      "expression": {
                                        "id": 3416,
                                        "name": "FullMath",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 913,
                                        "src": "3318:8:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_FullMath_$913_$",
                                          "typeString": "type(library FullMath)"
                                        }
                                      },
                                      "id": 3417,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mulDiv",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 869,
                                      "src": "3318:15:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 3423,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3318:48:33",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3263:170:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3434,
                              "nodeType": "ExpressionStatement",
                              "src": "3263:170:33"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3376,
                    "nodeType": "StructuredDocumentation",
                    "src": "2284:493:33",
                    "text": "@notice Given a tick and a token amount, calculates the amount of token received in exchange\n @param tick Tick value used to calculate the quote\n @param baseAmount Amount of token to be converted\n @param baseToken Address of an ERC20 token contract used as the baseAmount denomination\n @param quoteToken Address of an ERC20 token contract used as the quoteAmount denomination\n @return quoteAmount Amount of quoteToken received for baseAmount of baseToken"
                  },
                  "id": 3473,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getQuoteAtTick",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3385,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3378,
                        "mutability": "mutable",
                        "name": "tick",
                        "nodeType": "VariableDeclaration",
                        "scope": 3473,
                        "src": "2815:10:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 3377,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2815:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3380,
                        "mutability": "mutable",
                        "name": "baseAmount",
                        "nodeType": "VariableDeclaration",
                        "scope": 3473,
                        "src": "2835:18:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 3379,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2835:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3382,
                        "mutability": "mutable",
                        "name": "baseToken",
                        "nodeType": "VariableDeclaration",
                        "scope": 3473,
                        "src": "2863:17:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3381,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2863:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3384,
                        "mutability": "mutable",
                        "name": "quoteToken",
                        "nodeType": "VariableDeclaration",
                        "scope": 3473,
                        "src": "2890:18:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3383,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2890:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2805:109:33"
                  },
                  "returnParameters": {
                    "id": 3388,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3387,
                        "mutability": "mutable",
                        "name": "quoteAmount",
                        "nodeType": "VariableDeclaration",
                        "scope": 3473,
                        "src": "2938:19:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3386,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2938:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2937:21:33"
                  },
                  "scope": 3829,
                  "src": "2782:955:33",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3538,
                    "nodeType": "Block",
                    "src": "4110:688:33",
                    "statements": [
                      {
                        "assignments": [
                          null,
                          null,
                          3482,
                          3484,
                          null,
                          null,
                          null
                        ],
                        "declarations": [
                          null,
                          null,
                          {
                            "constant": false,
                            "id": 3482,
                            "mutability": "mutable",
                            "name": "observationIndex",
                            "nodeType": "VariableDeclaration",
                            "scope": 3538,
                            "src": "4125:23:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            "typeName": {
                              "id": 3481,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "4125:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3484,
                            "mutability": "mutable",
                            "name": "observationCardinality",
                            "nodeType": "VariableDeclaration",
                            "scope": 3538,
                            "src": "4150:29:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            "typeName": {
                              "id": 3483,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "4150:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "visibility": "internal"
                          },
                          null,
                          null,
                          null
                        ],
                        "id": 3490,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3486,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3476,
                                  "src": "4202:4:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3485,
                                "name": "IAstraCLPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27,
                                "src": "4189:12:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "type(contract IAstraCLPool)"
                                }
                              },
                              "id": 3487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4189:18:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 3488,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "slot0",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 374,
                            "src": "4189:24:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                              "typeString": "function () view external returns (uint160,int24,uint16,uint16,uint16,uint8,bool)"
                            }
                          },
                          "id": 3489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4189:26:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                            "typeString": "tuple(uint160,int24,uint16,uint16,uint16,uint8,bool)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4120:95:33"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 3494,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3492,
                                "name": "observationCardinality",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3484,
                                "src": "4233:22:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 3493,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4258:1:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "4233:26:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e49",
                              "id": 3495,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4261:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e817963341ac54b6c6630a42fcd594b50ae6e47bc5952aa5478cb70078a54ca0",
                                "typeString": "literal_string \"NI\""
                              },
                              "value": "NI"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e817963341ac54b6c6630a42fcd594b50ae6e47bc5952aa5478cb70078a54ca0",
                                "typeString": "literal_string \"NI\""
                              }
                            ],
                            "id": 3491,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4225:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4225:41:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3497,
                        "nodeType": "ExpressionStatement",
                        "src": "4225:41:33"
                      },
                      {
                        "assignments": [
                          3499,
                          null,
                          null,
                          3501
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3499,
                            "mutability": "mutable",
                            "name": "observationTimestamp",
                            "nodeType": "VariableDeclaration",
                            "scope": 3538,
                            "src": "4278:27:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 3498,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "4278:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "visibility": "internal"
                          },
                          null,
                          null,
                          {
                            "constant": false,
                            "id": 3501,
                            "mutability": "mutable",
                            "name": "initialized",
                            "nodeType": "VariableDeclaration",
                            "scope": 3538,
                            "src": "4311:16:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3500,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4311:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3513,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 3511,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    },
                                    "id": 3508,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 3506,
                                      "name": "observationIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3482,
                                      "src": "4377:16:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 3507,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4396:1:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "4377:20:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  }
                                ],
                                "id": 3509,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4376:22:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "%",
                              "rightExpression": {
                                "id": 3510,
                                "name": "observationCardinality",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3484,
                                "src": "4401:22:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "src": "4376:47:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3503,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3476,
                                  "src": "4344:4:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3502,
                                "name": "IAstraCLPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27,
                                "src": "4331:12:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "type(contract IAstraCLPool)"
                                }
                              },
                              "id": 3504,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4331:18:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 3505,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "observations",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 460,
                            "src": "4331:31:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                              "typeString": "function (uint256) view external returns (uint32,int56,uint160,bool)"
                            }
                          },
                          "id": 3512,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4331:102:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                            "typeString": "tuple(uint32,int56,uint160,bool)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4277:156:33"
                      },
                      {
                        "condition": {
                          "id": 3515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "4618:12:33",
                          "subExpression": {
                            "id": 3514,
                            "name": "initialized",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3501,
                            "src": "4619:11:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3527,
                        "nodeType": "IfStatement",
                        "src": "4614:108:33",
                        "trueBody": {
                          "id": 3526,
                          "nodeType": "Block",
                          "src": "4632:90:33",
                          "statements": [
                            {
                              "expression": {
                                "id": 3524,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "components": [
                                    {
                                      "id": 3516,
                                      "name": "observationTimestamp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3499,
                                      "src": "4647:20:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    },
                                    null,
                                    null,
                                    null
                                  ],
                                  "id": 3517,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "TupleExpression",
                                  "src": "4646:28:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint32_$__$__$__$",
                                    "typeString": "tuple(uint32,,,)"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 3522,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4709:1:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 3519,
                                          "name": "pool",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3476,
                                          "src": "4690:4:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 3518,
                                        "name": "IAstraCLPool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 27,
                                        "src": "4677:12:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                          "typeString": "type(contract IAstraCLPool)"
                                        }
                                      },
                                      "id": 3520,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4677:18:33",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                        "typeString": "contract IAstraCLPool"
                                      }
                                    },
                                    "id": 3521,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "observations",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 460,
                                    "src": "4677:31:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                                      "typeString": "function (uint256) view external returns (uint32,int56,uint160,bool)"
                                    }
                                  },
                                  "id": 3523,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4677:34:33",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                                    "typeString": "tuple(uint32,int56,uint160,bool)"
                                  }
                                },
                                "src": "4646:65:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3525,
                              "nodeType": "ExpressionStatement",
                              "src": "4646:65:33"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 3536,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3528,
                            "name": "secondsAgo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3479,
                            "src": "4732:10:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "id": 3535,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 3531,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "4752:5:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 3532,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "4752:15:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3530,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4745:6:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint32_$",
                                  "typeString": "type(uint32)"
                                },
                                "typeName": {
                                  "id": 3529,
                                  "name": "uint32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4745:6:33",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3533,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4745:23:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 3534,
                              "name": "observationTimestamp",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3499,
                              "src": "4771:20:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "src": "4745:46:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "4732:59:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 3537,
                        "nodeType": "ExpressionStatement",
                        "src": "4732:59:33"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3474,
                    "nodeType": "StructuredDocumentation",
                    "src": "3743:266:33",
                    "text": "@notice Given a pool, it returns the number of seconds ago of the oldest stored observation\n @param pool Address of AstraDEX CL pool that we want to observe\n @return secondsAgo The number of seconds ago of the oldest observation stored for the pool"
                  },
                  "id": 3539,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getOldestObservationSecondsAgo",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3477,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3476,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 3539,
                        "src": "4054:12:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3475,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4054:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4053:14:33"
                  },
                  "returnParameters": {
                    "id": 3480,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3479,
                        "mutability": "mutable",
                        "name": "secondsAgo",
                        "nodeType": "VariableDeclaration",
                        "scope": 3539,
                        "src": "4091:17:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 3478,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4091:6:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4090:19:33"
                  },
                  "scope": 3829,
                  "src": "4014:784:33",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3681,
                    "nodeType": "Block",
                    "src": "5120:1654:33",
                    "statements": [
                      {
                        "assignments": [
                          null,
                          3550,
                          3552,
                          3554,
                          null,
                          null,
                          null
                        ],
                        "declarations": [
                          null,
                          {
                            "constant": false,
                            "id": 3550,
                            "mutability": "mutable",
                            "name": "tick",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "5133:10:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 3549,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "5133:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3552,
                            "mutability": "mutable",
                            "name": "observationIndex",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "5145:23:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            "typeName": {
                              "id": 3551,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "5145:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3554,
                            "mutability": "mutable",
                            "name": "observationCardinality",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "5170:29:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            "typeName": {
                              "id": 3553,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "5170:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "visibility": "internal"
                          },
                          null,
                          null,
                          null
                        ],
                        "id": 3560,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3556,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3542,
                                  "src": "5222:4:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3555,
                                "name": "IAstraCLPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27,
                                "src": "5209:12:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "type(contract IAstraCLPool)"
                                }
                              },
                              "id": 3557,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5209:18:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 3558,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "slot0",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 374,
                            "src": "5209:24:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                              "typeString": "function () view external returns (uint160,int24,uint16,uint16,uint16,uint8,bool)"
                            }
                          },
                          "id": 3559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5209:26:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                            "typeString": "tuple(uint160,int24,uint16,uint16,uint16,uint8,bool)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5130:105:33"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 3564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3562,
                                "name": "observationCardinality",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3554,
                                "src": "5337:22:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 3563,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5362:1:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "5337:26:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e454f",
                              "id": 3565,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5365:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6dc5790d7c4bfaaa2e4f8e2cd517bacd4a3831f85c0964e56f2743cbb847bc46",
                                "typeString": "literal_string \"NEO\""
                              },
                              "value": "NEO"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6dc5790d7c4bfaaa2e4f8e2cd517bacd4a3831f85c0964e56f2743cbb847bc46",
                                "typeString": "literal_string \"NEO\""
                              }
                            ],
                            "id": 3561,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5329:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3566,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5329:42:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3567,
                        "nodeType": "ExpressionStatement",
                        "src": "5329:42:33"
                      },
                      {
                        "assignments": [
                          3569,
                          3571,
                          3573,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3569,
                            "mutability": "mutable",
                            "name": "observationTimestamp",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "5689:27:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 3568,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "5689:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3571,
                            "mutability": "mutable",
                            "name": "tickCumulative",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "5718:20:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            },
                            "typeName": {
                              "id": 3570,
                              "name": "int56",
                              "nodeType": "ElementaryTypeName",
                              "src": "5718:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3573,
                            "mutability": "mutable",
                            "name": "secondsPerLiquidityCumulativeX128",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "5740:41:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "typeName": {
                              "id": 3572,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "5740:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 3580,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3578,
                              "name": "observationIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3552,
                              "src": "5841:16:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3575,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3542,
                                  "src": "5813:4:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3574,
                                "name": "IAstraCLPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27,
                                "src": "5787:12:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "type(contract IAstraCLPool)"
                                }
                              },
                              "id": 3576,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5787:40:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 3577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "observations",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 460,
                            "src": "5787:53:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                              "typeString": "function (uint256) view external returns (uint32,int56,uint160,bool)"
                            }
                          },
                          "id": 3579,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5787:71:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                            "typeString": "tuple(uint32,int56,uint160,bool)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5688:170:33"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 3587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3581,
                            "name": "observationTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3569,
                            "src": "5872:20:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 3584,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "5903:5:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 3585,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "5903:15:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 3583,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5896:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint32_$",
                                "typeString": "type(uint32)"
                              },
                              "typeName": {
                                "id": 3582,
                                "name": "uint32",
                                "nodeType": "ElementaryTypeName",
                                "src": "5896:6:33",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5896:23:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "5872:47:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3597,
                        "nodeType": "IfStatement",
                        "src": "5868:123:33",
                        "trueBody": {
                          "id": 3596,
                          "nodeType": "Block",
                          "src": "5921:70:33",
                          "statements": [
                            {
                              "expression": {
                                "components": [
                                  {
                                    "id": 3588,
                                    "name": "tick",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3550,
                                    "src": "5943:4:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 3590,
                                            "name": "pool",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3542,
                                            "src": "5962:4:33",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 3589,
                                          "name": "IAstraCLPool",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 27,
                                          "src": "5949:12:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                            "typeString": "type(contract IAstraCLPool)"
                                          }
                                        },
                                        "id": 3591,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5949:18:33",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                          "typeString": "contract IAstraCLPool"
                                        }
                                      },
                                      "id": 3592,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "liquidity",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 400,
                                      "src": "5949:28:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint128_$",
                                        "typeString": "function () view external returns (uint128)"
                                      }
                                    },
                                    "id": 3593,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5949:30:33",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "id": 3594,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5942:38:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_int24_$_t_uint128_$",
                                  "typeString": "tuple(int24,uint128)"
                                }
                              },
                              "functionReturnParameters": 3548,
                              "id": 3595,
                              "nodeType": "Return",
                              "src": "5935:45:33"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          3599
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3599,
                            "mutability": "mutable",
                            "name": "prevIndex",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "6001:17:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3598,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6001:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3611,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3607,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3605,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 3602,
                                        "name": "observationIndex",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3552,
                                        "src": "6030:16:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint16",
                                          "typeString": "uint16"
                                        }
                                      ],
                                      "id": 3601,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "6022:7:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 3600,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6022:7:33",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 3603,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6022:25:33",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "id": 3604,
                                    "name": "observationCardinality",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3554,
                                    "src": "6050:22:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "src": "6022:50:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 3606,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6075:1:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "6022:54:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 3608,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "6021:56:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "id": 3609,
                            "name": "observationCardinality",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3554,
                            "src": "6080:22:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "6021:81:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6001:101:33"
                      },
                      {
                        "assignments": [
                          3613,
                          3615,
                          3617,
                          3619
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3613,
                            "mutability": "mutable",
                            "name": "prevObservationTimestamp",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "6126:31:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 3612,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "6126:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3615,
                            "mutability": "mutable",
                            "name": "prevTickCumulative",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "6171:24:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            },
                            "typeName": {
                              "id": 3614,
                              "name": "int56",
                              "nodeType": "ElementaryTypeName",
                              "src": "6171:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3617,
                            "mutability": "mutable",
                            "name": "prevSecondsPerLiquidityCumulativeX128",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "6209:45:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "typeName": {
                              "id": 3616,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "6209:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3619,
                            "mutability": "mutable",
                            "name": "prevInitialized",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "6268:20:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3618,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "6268:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3626,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3624,
                              "name": "prevIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3599,
                              "src": "6333:9:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3621,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3542,
                                  "src": "6314:4:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3620,
                                "name": "IAstraCLPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27,
                                "src": "6301:12:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "type(contract IAstraCLPool)"
                                }
                              },
                              "id": 3622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6301:18:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 3623,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "observations",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 460,
                            "src": "6301:31:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                              "typeString": "function (uint256) view external returns (uint32,int56,uint160,bool)"
                            }
                          },
                          "id": 3625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6301:42:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                            "typeString": "tuple(uint32,int56,uint160,bool)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6112:231:33"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3628,
                              "name": "prevInitialized",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3619,
                              "src": "6362:15:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4f4e49",
                              "id": 3629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6379:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_4375a34c158c497e1dec923d39179cd2bff1d358f7876b16ed4f850d3b707895",
                                "typeString": "literal_string \"ONI\""
                              },
                              "value": "ONI"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_4375a34c158c497e1dec923d39179cd2bff1d358f7876b16ed4f850d3b707895",
                                "typeString": "literal_string \"ONI\""
                              }
                            ],
                            "id": 3627,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6354:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6354:31:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3631,
                        "nodeType": "ExpressionStatement",
                        "src": "6354:31:33"
                      },
                      {
                        "assignments": [
                          3633
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3633,
                            "mutability": "mutable",
                            "name": "delta",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "6396:12:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 3632,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "6396:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3637,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 3636,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3634,
                            "name": "observationTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3569,
                            "src": "6411:20:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 3635,
                            "name": "prevObservationTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3613,
                            "src": "6434:24:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "6411:47:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6396:62:33"
                      },
                      {
                        "expression": {
                          "id": 3648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3638,
                            "name": "tick",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3550,
                            "src": "6468:4:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                },
                                "id": 3646,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      },
                                      "id": 3643,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 3641,
                                        "name": "tickCumulative",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3571,
                                        "src": "6482:14:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "id": 3642,
                                        "name": "prevTickCumulative",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3615,
                                        "src": "6499:18:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        }
                                      },
                                      "src": "6482:35:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      }
                                    }
                                  ],
                                  "id": 3644,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "6481:37:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "id": 3645,
                                  "name": "delta",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3633,
                                  "src": "6521:5:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "6481:45:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                }
                              ],
                              "id": 3640,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6475:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int24_$",
                                "typeString": "type(int24)"
                              },
                              "typeName": {
                                "id": 3639,
                                "name": "int24",
                                "nodeType": "ElementaryTypeName",
                                "src": "6475:5:33",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6475:52:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "6468:59:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "id": 3649,
                        "nodeType": "ExpressionStatement",
                        "src": "6468:59:33"
                      },
                      {
                        "assignments": [
                          3651
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3651,
                            "mutability": "mutable",
                            "name": "liquidity",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "6537:17:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            "typeName": {
                              "id": 3650,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "6537:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3676,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint192",
                                "typeString": "uint192"
                              },
                              "id": 3674,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint192",
                                      "typeString": "uint192"
                                    },
                                    "id": 3663,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 3656,
                                          "name": "delta",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3633,
                                          "src": "6587:5:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        ],
                                        "id": 3655,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "6579:7:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint192_$",
                                          "typeString": "type(uint192)"
                                        },
                                        "typeName": {
                                          "id": 3654,
                                          "name": "uint192",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "6579:7:33",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 3657,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6579:14:33",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint192",
                                        "typeString": "uint192"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 3660,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "6601:7:33",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_uint160_$",
                                              "typeString": "type(uint160)"
                                            },
                                            "typeName": {
                                              "id": 3659,
                                              "name": "uint160",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "6601:7:33",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_type$_t_uint160_$",
                                              "typeString": "type(uint160)"
                                            }
                                          ],
                                          "id": 3658,
                                          "name": "type",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -27,
                                          "src": "6596:4:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                            "typeString": "function () pure"
                                          }
                                        },
                                        "id": 3661,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6596:13:33",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_meta_type_t_uint160",
                                          "typeString": "type(uint160)"
                                        }
                                      },
                                      "id": 3662,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "max",
                                      "nodeType": "MemberAccess",
                                      "src": "6596:17:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "src": "6579:34:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint192",
                                      "typeString": "uint192"
                                    }
                                  }
                                ],
                                "id": 3664,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "6578:36:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint192",
                                  "typeString": "uint192"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint192",
                                      "typeString": "uint192"
                                    },
                                    "id": 3672,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint160",
                                            "typeString": "uint160"
                                          },
                                          "id": 3669,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 3667,
                                            "name": "secondsPerLiquidityCumulativeX128",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3573,
                                            "src": "6642:33:33",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "id": 3668,
                                            "name": "prevSecondsPerLiquidityCumulativeX128",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3617,
                                            "src": "6678:37:33",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            }
                                          },
                                          "src": "6642:73:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint160",
                                            "typeString": "uint160"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint160",
                                            "typeString": "uint160"
                                          }
                                        ],
                                        "id": 3666,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "6634:7:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint192_$",
                                          "typeString": "type(uint192)"
                                        },
                                        "typeName": {
                                          "id": 3665,
                                          "name": "uint192",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "6634:7:33",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 3670,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6634:82:33",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint192",
                                        "typeString": "uint192"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "3332",
                                      "id": 3671,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6720:2:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "6634:88:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint192",
                                      "typeString": "uint192"
                                    }
                                  }
                                ],
                                "id": 3673,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "6633:90:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint192",
                                  "typeString": "uint192"
                                }
                              },
                              "src": "6578:145:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint192",
                                "typeString": "uint192"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint192",
                                "typeString": "uint192"
                              }
                            ],
                            "id": 3653,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6557:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint128_$",
                              "typeString": "type(uint128)"
                            },
                            "typeName": {
                              "id": 3652,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "6557:7:33",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3675,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6557:176:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6537:196:33"
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "id": 3677,
                              "name": "tick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3550,
                              "src": "6751:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            {
                              "id": 3678,
                              "name": "liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3651,
                              "src": "6757:9:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "id": 3679,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6750:17:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int24_$_t_uint128_$",
                            "typeString": "tuple(int24,uint128)"
                          }
                        },
                        "functionReturnParameters": 3548,
                        "id": 3680,
                        "nodeType": "Return",
                        "src": "6743:24:33"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3540,
                    "nodeType": "StructuredDocumentation",
                    "src": "4804:216:33",
                    "text": "@notice Given a pool, it returns the tick value as of the start of the current block\n @param pool Address of AstraDEX CL pool\n @return The tick that the pool was in at the start of the current block"
                  },
                  "id": 3682,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getBlockStartingTickAndLiquidity",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3543,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3542,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 3682,
                        "src": "5067:12:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3541,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5067:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5066:14:33"
                  },
                  "returnParameters": {
                    "id": 3548,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3545,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3682,
                        "src": "5104:5:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 3544,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "5104:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3547,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3682,
                        "src": "5111:7:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 3546,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5111:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5103:16:33"
                  },
                  "scope": 3829,
                  "src": "5025:1749:33",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "canonicalName": "OracleLibrary.WeightedTickData",
                  "id": 3687,
                  "members": [
                    {
                      "constant": false,
                      "id": 3684,
                      "mutability": "mutable",
                      "name": "tick",
                      "nodeType": "VariableDeclaration",
                      "scope": 3687,
                      "src": "6890:10:33",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      },
                      "typeName": {
                        "id": 3683,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "6890:5:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3686,
                      "mutability": "mutable",
                      "name": "weight",
                      "nodeType": "VariableDeclaration",
                      "scope": 3687,
                      "src": "6910:14:33",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 3685,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "6910:7:33",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "WeightedTickData",
                  "nodeType": "StructDefinition",
                  "scope": 3829,
                  "src": "6856:75:33",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3765,
                    "nodeType": "Block",
                    "src": "7674:725:33",
                    "statements": [
                      {
                        "assignments": [
                          3697
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3697,
                            "mutability": "mutable",
                            "name": "numerator",
                            "nodeType": "VariableDeclaration",
                            "scope": 3765,
                            "src": "7760:16:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 3696,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7760:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3698,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7760:16:33"
                      },
                      {
                        "assignments": [
                          3700
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3700,
                            "mutability": "mutable",
                            "name": "denominator",
                            "nodeType": "VariableDeclaration",
                            "scope": 3765,
                            "src": "7833:19:33",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3699,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7833:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3701,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7833:19:33"
                      },
                      {
                        "body": {
                          "id": 3734,
                          "nodeType": "Block",
                          "src": "8017:154:33",
                          "statements": [
                            {
                              "expression": {
                                "id": 3725,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3712,
                                  "name": "numerator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3697,
                                  "src": "8031:9:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 3724,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 3713,
                                        "name": "weightedTickData",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3691,
                                        "src": "8044:16:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                                        }
                                      },
                                      "id": 3715,
                                      "indexExpression": {
                                        "id": 3714,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3703,
                                        "src": "8061:1:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "8044:19:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_WeightedTickData_$3687_memory_ptr",
                                        "typeString": "struct OracleLibrary.WeightedTickData memory"
                                      }
                                    },
                                    "id": 3716,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "tick",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3684,
                                    "src": "8044:24:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 3719,
                                            "name": "weightedTickData",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3691,
                                            "src": "8078:16:33",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                              "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                                            }
                                          },
                                          "id": 3721,
                                          "indexExpression": {
                                            "id": 3720,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3703,
                                            "src": "8095:1:33",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "8078:19:33",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_WeightedTickData_$3687_memory_ptr",
                                            "typeString": "struct OracleLibrary.WeightedTickData memory"
                                          }
                                        },
                                        "id": 3722,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "weight",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3686,
                                        "src": "8078:26:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      ],
                                      "id": 3718,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "8071:6:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_int256_$",
                                        "typeString": "type(int256)"
                                      },
                                      "typeName": {
                                        "id": 3717,
                                        "name": "int256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8071:6:33",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 3723,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8071:34:33",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "src": "8044:61:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "8031:74:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 3726,
                              "nodeType": "ExpressionStatement",
                              "src": "8031:74:33"
                            },
                            {
                              "expression": {
                                "id": 3732,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3727,
                                  "name": "denominator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3700,
                                  "src": "8119:11:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 3728,
                                      "name": "weightedTickData",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3691,
                                      "src": "8134:16:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                                      }
                                    },
                                    "id": 3730,
                                    "indexExpression": {
                                      "id": 3729,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3703,
                                      "src": "8151:1:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "8134:19:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_WeightedTickData_$3687_memory_ptr",
                                      "typeString": "struct OracleLibrary.WeightedTickData memory"
                                    }
                                  },
                                  "id": 3731,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "weight",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3686,
                                  "src": "8134:26:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "src": "8119:41:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3733,
                              "nodeType": "ExpressionStatement",
                              "src": "8119:41:33"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3705,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3703,
                            "src": "7983:1:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 3706,
                              "name": "weightedTickData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3691,
                              "src": "7987:16:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                              }
                            },
                            "id": 3707,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "7987:23:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7983:27:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3735,
                        "initializationExpression": {
                          "assignments": [
                            3703
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3703,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 3735,
                              "src": "7972:9:33",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3702,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "7972:7:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 3704,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "7972:9:33"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 3710,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "8012:3:33",
                            "subExpression": {
                              "id": 3709,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3703,
                              "src": "8012:1:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3711,
                          "nodeType": "ExpressionStatement",
                          "src": "8012:3:33"
                        },
                        "nodeType": "ForStatement",
                        "src": "7967:204:33"
                      },
                      {
                        "expression": {
                          "id": 3746,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3736,
                            "name": "weightedArithmeticMeanTick",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3694,
                            "src": "8181:26:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 3744,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3739,
                                  "name": "numerator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3697,
                                  "src": "8216:9:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "id": 3742,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3700,
                                      "src": "8235:11:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 3741,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8228:6:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 3740,
                                      "name": "int256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "8228:6:33",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 3743,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8228:19:33",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "8216:31:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 3738,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8210:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int24_$",
                                "typeString": "type(int24)"
                              },
                              "typeName": {
                                "id": 3737,
                                "name": "int24",
                                "nodeType": "ElementaryTypeName",
                                "src": "8210:5:33",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3745,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8210:38:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "8181:67:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "id": 3747,
                        "nodeType": "ExpressionStatement",
                        "src": "8181:67:33"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3760,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "id": 3750,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3748,
                              "name": "numerator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3697,
                              "src": "8307:9:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 3749,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8319:1:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "8307:13:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 3758,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 3756,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3751,
                                    "name": "numerator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3697,
                                    "src": "8325:9:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "arguments": [
                                      {
                                        "id": 3754,
                                        "name": "denominator",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3700,
                                        "src": "8344:11:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 3753,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "8337:6:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_int256_$",
                                        "typeString": "type(int256)"
                                      },
                                      "typeName": {
                                        "id": 3752,
                                        "name": "int256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8337:6:33",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 3755,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8337:19:33",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "src": "8325:31:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 3757,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8360:1:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "8325:36:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 3759,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "8324:38:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "8307:55:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3764,
                        "nodeType": "IfStatement",
                        "src": "8303:89:33",
                        "trueBody": {
                          "expression": {
                            "id": 3762,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": false,
                            "src": "8364:28:33",
                            "subExpression": {
                              "id": 3761,
                              "name": "weightedArithmeticMeanTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3694,
                              "src": "8364:26:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "id": 3763,
                          "nodeType": "ExpressionStatement",
                          "src": "8364:28:33"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3688,
                    "nodeType": "StructuredDocumentation",
                    "src": "6937:578:33",
                    "text": "@notice Given an array of ticks and weights, calculates the weighted arithmetic mean tick\n @param weightedTickData An array of ticks and weights\n @return weightedArithmeticMeanTick The weighted arithmetic mean tick\n @dev Each entry of `weightedTickData` should represents ticks from pools with the same underlying pool tokens. If they do not,\n extreme care must be taken to ensure that ticks are comparable (including decimal differences).\n @dev Note that the weighted arithmetic mean tick corresponds to the weighted geometric mean price."
                  },
                  "id": 3766,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getWeightedArithmeticMeanTick",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3692,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3691,
                        "mutability": "mutable",
                        "name": "weightedTickData",
                        "nodeType": "VariableDeclaration",
                        "scope": 3766,
                        "src": "7568:42:33",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct OracleLibrary.WeightedTickData[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3689,
                            "name": "WeightedTickData",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3687,
                            "src": "7568:16:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_WeightedTickData_$3687_storage_ptr",
                              "typeString": "struct OracleLibrary.WeightedTickData"
                            }
                          },
                          "id": 3690,
                          "nodeType": "ArrayTypeName",
                          "src": "7568:18:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_storage_$dyn_storage_ptr",
                            "typeString": "struct OracleLibrary.WeightedTickData[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7558:58:33"
                  },
                  "returnParameters": {
                    "id": 3695,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3694,
                        "mutability": "mutable",
                        "name": "weightedArithmeticMeanTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 3766,
                        "src": "7640:32:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 3693,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "7640:5:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7639:34:33"
                  },
                  "scope": 3829,
                  "src": "7520:879:33",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3827,
                    "nodeType": "Block",
                    "src": "9058:409:33",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3785,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3782,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 3779,
                                    "name": "tokens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3770,
                                    "src": "9076:6:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 3780,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "9076:13:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 3781,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9092:1:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "9076:17:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "id": 3783,
                                  "name": "ticks",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3773,
                                  "src": "9097:5:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_int24_$dyn_memory_ptr",
                                    "typeString": "int24[] memory"
                                  }
                                },
                                "id": 3784,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "9097:12:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9076:33:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "444c",
                              "id": 3786,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9111:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f6c9155cb7d5666d109a64d0e580ecac0cec91dae3b0325b400a4ad4d41fbcb9",
                                "typeString": "literal_string \"DL\""
                              },
                              "value": "DL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f6c9155cb7d5666d109a64d0e580ecac0cec91dae3b0325b400a4ad4d41fbcb9",
                                "typeString": "literal_string \"DL\""
                              }
                            ],
                            "id": 3778,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9068:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9068:48:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3788,
                        "nodeType": "ExpressionStatement",
                        "src": "9068:48:33"
                      },
                      {
                        "body": {
                          "id": 3825,
                          "nodeType": "Block",
                          "src": "9170:291:33",
                          "statements": [
                            {
                              "expression": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 3808,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "baseExpression": {
                                      "id": 3800,
                                      "name": "tokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3770,
                                      "src": "9361:6:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 3804,
                                    "indexExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 3803,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 3801,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3790,
                                        "src": "9368:1:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 3802,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "9372:1:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "9368:5:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "9361:13:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "baseExpression": {
                                      "id": 3805,
                                      "name": "tokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3770,
                                      "src": "9377:6:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 3807,
                                    "indexExpression": {
                                      "id": 3806,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3790,
                                      "src": "9384:1:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "9377:9:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "9361:25:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "id": 3822,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 3816,
                                    "name": "syntheticTick",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3776,
                                    "src": "9421:13:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "-=",
                                  "rightHandSide": {
                                    "baseExpression": {
                                      "id": 3817,
                                      "name": "ticks",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3773,
                                      "src": "9438:5:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_int24_$dyn_memory_ptr",
                                        "typeString": "int24[] memory"
                                      }
                                    },
                                    "id": 3821,
                                    "indexExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 3820,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 3818,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3790,
                                        "src": "9444:1:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 3819,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "9448:1:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "9444:5:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "9438:12:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  "src": "9421:29:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "id": 3823,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "9361:89:33",
                                "trueExpression": {
                                  "id": 3815,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 3809,
                                    "name": "syntheticTick",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3776,
                                    "src": "9389:13:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "+=",
                                  "rightHandSide": {
                                    "baseExpression": {
                                      "id": 3810,
                                      "name": "ticks",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3773,
                                      "src": "9406:5:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_int24_$dyn_memory_ptr",
                                        "typeString": "int24[] memory"
                                      }
                                    },
                                    "id": 3814,
                                    "indexExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 3813,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 3811,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3790,
                                        "src": "9412:1:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 3812,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "9416:1:33",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "9412:5:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "9406:12:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  "src": "9389:29:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 3824,
                              "nodeType": "ExpressionStatement",
                              "src": "9361:89:33"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3796,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3793,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3790,
                            "src": "9146:1:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "expression": {
                              "id": 3794,
                              "name": "ticks",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3773,
                              "src": "9151:5:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_int24_$dyn_memory_ptr",
                                "typeString": "int24[] memory"
                              }
                            },
                            "id": 3795,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "9151:12:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9146:17:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3826,
                        "initializationExpression": {
                          "assignments": [
                            3790
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3790,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 3826,
                              "src": "9131:9:33",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3789,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "9131:7:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 3792,
                          "initialValue": {
                            "hexValue": "31",
                            "id": 3791,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9143:1:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "9131:13:33"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 3798,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "9165:3:33",
                            "subExpression": {
                              "id": 3797,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3790,
                              "src": "9165:1:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3799,
                          "nodeType": "ExpressionStatement",
                          "src": "9165:3:33"
                        },
                        "nodeType": "ForStatement",
                        "src": "9126:335:33"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3767,
                    "nodeType": "StructuredDocumentation",
                    "src": "8405:509:33",
                    "text": "@notice Returns the \"synthetic\" tick which represents the price of the first entry in `tokens` in terms of the last\n @dev Useful for calculating relative prices along routes.\n @dev There must be one tick for each pairwise set of tokens.\n @param tokens The token contract addresses\n @param ticks The ticks, representing the price of each token pair in `tokens`\n @return syntheticTick The synthetic tick, representing the relative price of the outermost tokens in `tokens`"
                  },
                  "id": 3828,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getChainedPrice",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3774,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3770,
                        "mutability": "mutable",
                        "name": "tokens",
                        "nodeType": "VariableDeclaration",
                        "scope": 3828,
                        "src": "8953:23:33",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3768,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8953:7:33",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3769,
                          "nodeType": "ArrayTypeName",
                          "src": "8953:9:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3773,
                        "mutability": "mutable",
                        "name": "ticks",
                        "nodeType": "VariableDeclaration",
                        "scope": 3828,
                        "src": "8986:20:33",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int24_$dyn_memory_ptr",
                          "typeString": "int24[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3771,
                            "name": "int24",
                            "nodeType": "ElementaryTypeName",
                            "src": "8986:5:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "id": 3772,
                          "nodeType": "ArrayTypeName",
                          "src": "8986:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_int24_$dyn_storage_ptr",
                            "typeString": "int24[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8943:69:33"
                  },
                  "returnParameters": {
                    "id": 3777,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3776,
                        "mutability": "mutable",
                        "name": "syntheticTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 3828,
                        "src": "9036:20:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3775,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9036:6:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9035:22:33"
                  },
                  "scope": 3829,
                  "src": "8919:548:33",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 3830,
              "src": "528:8941:33"
            }
          ],
          "src": "45:9425:33"
        },
        "id": 33
      },
      "@airdao/astra-cl-periphery/contracts/libraries/Path.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/Path.sol",
          "exportedSymbols": {
            "BytesLib": [
              3178
            ],
            "Path": [
              3962
            ]
          },
          "id": 3963,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3831,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:34"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/BytesLib.sol",
              "file": "./BytesLib.sol",
              "id": 3832,
              "nodeType": "ImportDirective",
              "scope": 3963,
              "sourceUnit": 3179,
              "src": "71:24:34",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3833,
                "nodeType": "StructuredDocumentation",
                "src": "97:67:34",
                "text": "@title Functions for manipulating path data for multihop swaps"
              },
              "fullyImplemented": true,
              "id": 3962,
              "linearizedBaseContracts": [
                3962
              ],
              "name": "Path",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 3836,
                  "libraryName": {
                    "id": 3834,
                    "name": "BytesLib",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3178,
                    "src": "189:8:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BytesLib_$3178",
                      "typeString": "library BytesLib"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "183:25:34",
                  "typeName": {
                    "id": 3835,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "202:5:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  }
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 3837,
                    "nodeType": "StructuredDocumentation",
                    "src": "214:48:34",
                    "text": "@dev The length of the bytes encoded address"
                  },
                  "id": 3840,
                  "mutability": "constant",
                  "name": "ADDR_SIZE",
                  "nodeType": "VariableDeclaration",
                  "scope": 3962,
                  "src": "267:39:34",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3838,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "267:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "3230",
                    "id": 3839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "304:2:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_20_by_1",
                      "typeString": "int_const 20"
                    },
                    "value": "20"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 3841,
                    "nodeType": "StructuredDocumentation",
                    "src": "312:44:34",
                    "text": "@dev The length of the bytes encoded fee"
                  },
                  "id": 3844,
                  "mutability": "constant",
                  "name": "FEE_SIZE",
                  "nodeType": "VariableDeclaration",
                  "scope": 3962,
                  "src": "361:37:34",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3842,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "361:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "33",
                    "id": 3843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "397:1:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3_by_1",
                      "typeString": "int_const 3"
                    },
                    "value": "3"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 3845,
                    "nodeType": "StructuredDocumentation",
                    "src": "405:58:34",
                    "text": "@dev The offset of a single token address and pool fee"
                  },
                  "id": 3850,
                  "mutability": "constant",
                  "name": "NEXT_OFFSET",
                  "nodeType": "VariableDeclaration",
                  "scope": 3962,
                  "src": "468:59:34",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3846,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "468:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3847,
                      "name": "ADDR_SIZE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3840,
                      "src": "507:9:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 3848,
                      "name": "FEE_SIZE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3844,
                      "src": "519:8:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "507:20:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 3851,
                    "nodeType": "StructuredDocumentation",
                    "src": "533:42:34",
                    "text": "@dev The offset of an encoded pool key"
                  },
                  "id": 3856,
                  "mutability": "constant",
                  "name": "POP_OFFSET",
                  "nodeType": "VariableDeclaration",
                  "scope": 3962,
                  "src": "580:61:34",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3852,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "580:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3853,
                      "name": "NEXT_OFFSET",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3850,
                      "src": "618:11:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 3854,
                      "name": "ADDR_SIZE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3840,
                      "src": "632:9:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "618:23:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 3857,
                    "nodeType": "StructuredDocumentation",
                    "src": "647:72:34",
                    "text": "@dev The minimum length of an encoding that contains 2 or more pools"
                  },
                  "id": 3862,
                  "mutability": "constant",
                  "name": "MULTIPLE_POOLS_MIN_LENGTH",
                  "nodeType": "VariableDeclaration",
                  "scope": 3962,
                  "src": "724:77:34",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3858,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "724:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3861,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3859,
                      "name": "POP_OFFSET",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3856,
                      "src": "777:10:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 3860,
                      "name": "NEXT_OFFSET",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3850,
                      "src": "790:11:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "777:24:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3875,
                    "nodeType": "Block",
                    "src": "1066:64:34",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3873,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 3870,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3865,
                              "src": "1083:4:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3871,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "1083:11:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "id": 3872,
                            "name": "MULTIPLE_POOLS_MIN_LENGTH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3862,
                            "src": "1098:25:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1083:40:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 3869,
                        "id": 3874,
                        "nodeType": "Return",
                        "src": "1076:47:34"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3863,
                    "nodeType": "StructuredDocumentation",
                    "src": "808:179:34",
                    "text": "@notice Returns true iff the path contains two or more pools\n @param path The encoded swap path\n @return True if path contains two or more pools, otherwise false"
                  },
                  "id": 3876,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "hasMultiplePools",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3866,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3865,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 3876,
                        "src": "1018:17:34",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3864,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1018:5:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1017:19:34"
                  },
                  "returnParameters": {
                    "id": 3869,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3868,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3876,
                        "src": "1060:4:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3867,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1060:4:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1059:6:34"
                  },
                  "scope": 3962,
                  "src": "992:138:34",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3893,
                    "nodeType": "Block",
                    "src": "1351:166:34",
                    "statements": [
                      {
                        "expression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3890,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3887,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 3884,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3879,
                                        "src": "1471:4:34",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 3885,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "src": "1471:11:34",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 3886,
                                      "name": "ADDR_SIZE",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3840,
                                      "src": "1485:9:34",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1471:23:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 3888,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1470:25:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "id": 3889,
                                "name": "NEXT_OFFSET",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3850,
                                "src": "1498:11:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1470:39:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 3891,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1469:41:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3883,
                        "id": 3892,
                        "nodeType": "Return",
                        "src": "1462:48:34"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3877,
                    "nodeType": "StructuredDocumentation",
                    "src": "1136:141:34",
                    "text": "@notice Returns the number of pools in the path\n @param path The encoded swap path\n @return The number of pools in the path"
                  },
                  "id": 3894,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "numPools",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3880,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3879,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "1300:17:34",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3878,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1300:5:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1299:19:34"
                  },
                  "returnParameters": {
                    "id": 3883,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3882,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "1342:7:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3881,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1342:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1341:9:34"
                  },
                  "scope": 3962,
                  "src": "1282:235:34",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3927,
                    "nodeType": "Block",
                    "src": "1890:129:34",
                    "statements": [
                      {
                        "expression": {
                          "id": 3911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3906,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3900,
                            "src": "1900:6:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3909,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1924:1:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "expression": {
                                "id": 3907,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3897,
                                "src": "1909:4:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3908,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3142,
                              "src": "1909:14:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256) pure returns (address)"
                              }
                            },
                            "id": 3910,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1909:17:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1900:26:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3912,
                        "nodeType": "ExpressionStatement",
                        "src": "1900:26:34"
                      },
                      {
                        "expression": {
                          "id": 3918,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3913,
                            "name": "fee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3904,
                            "src": "1936:3:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3916,
                                "name": "ADDR_SIZE",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3840,
                                "src": "1956:9:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 3914,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3897,
                                "src": "1942:4:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3915,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint24",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3177,
                              "src": "1942:13:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256) pure returns (uint24)"
                              }
                            },
                            "id": 3917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1942:24:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            }
                          },
                          "src": "1936:30:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "id": 3919,
                        "nodeType": "ExpressionStatement",
                        "src": "1936:30:34"
                      },
                      {
                        "expression": {
                          "id": 3925,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3920,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3902,
                            "src": "1976:6:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3923,
                                "name": "NEXT_OFFSET",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3850,
                                "src": "2000:11:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 3921,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3897,
                                "src": "1985:4:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3922,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3142,
                              "src": "1985:14:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256) pure returns (address)"
                              }
                            },
                            "id": 3924,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1985:27:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1976:36:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3926,
                        "nodeType": "ExpressionStatement",
                        "src": "1976:36:34"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3895,
                    "nodeType": "StructuredDocumentation",
                    "src": "1523:251:34",
                    "text": "@notice Decodes the first pool in path\n @param path The bytes encoded swap path\n @return tokenA The first token of the given pool\n @return tokenB The second token of the given pool\n @return fee The fee level of the pool"
                  },
                  "id": 3928,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decodeFirstPool",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3898,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3897,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 3928,
                        "src": "1804:17:34",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3896,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1804:5:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1803:19:34"
                  },
                  "returnParameters": {
                    "id": 3905,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3900,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 3928,
                        "src": "1846:14:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3899,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1846:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3902,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 3928,
                        "src": "1862:14:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3901,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1862:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3904,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 3928,
                        "src": "1878:10:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 3903,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1878:6:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1845:44:34"
                  },
                  "scope": 3962,
                  "src": "1779:240:34",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3942,
                    "nodeType": "Block",
                    "src": "2323:49:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 3938,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2351:1:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "id": 3939,
                              "name": "POP_OFFSET",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3856,
                              "src": "2354:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 3936,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3931,
                              "src": "2340:4:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3937,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "slice",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3107,
                            "src": "2340:10:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                            }
                          },
                          "id": 3940,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2340:25:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3935,
                        "id": 3941,
                        "nodeType": "Return",
                        "src": "2333:32:34"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3929,
                    "nodeType": "StructuredDocumentation",
                    "src": "2025:215:34",
                    "text": "@notice Gets the segment corresponding to the first pool in the path\n @param path The bytes encoded swap path\n @return The segment containing all data necessary to target the first pool in the path"
                  },
                  "id": 3943,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getFirstPool",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3932,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3931,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 3943,
                        "src": "2267:17:34",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3930,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2267:5:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2266:19:34"
                  },
                  "returnParameters": {
                    "id": 3935,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3934,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3943,
                        "src": "2309:12:34",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3933,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2309:5:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2308:14:34"
                  },
                  "scope": 3962,
                  "src": "2245:127:34",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3960,
                    "nodeType": "Block",
                    "src": "2636:74:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3953,
                              "name": "NEXT_OFFSET",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3850,
                              "src": "2664:11:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3957,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 3954,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3946,
                                  "src": "2677:4:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 3955,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "2677:11:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "id": 3956,
                                "name": "NEXT_OFFSET",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3850,
                                "src": "2691:11:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2677:25:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 3951,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3946,
                              "src": "2653:4:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3952,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "slice",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3107,
                            "src": "2653:10:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                            }
                          },
                          "id": 3958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2653:50:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3950,
                        "id": 3959,
                        "nodeType": "Return",
                        "src": "2646:57:34"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3944,
                    "nodeType": "StructuredDocumentation",
                    "src": "2378:178:34",
                    "text": "@notice Skips a token + fee element from the buffer and returns the remainder\n @param path The swap path\n @return The remaining token + fee elements in the path"
                  },
                  "id": 3961,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "skipToken",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3947,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3946,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 3961,
                        "src": "2580:17:34",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3945,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2580:5:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2579:19:34"
                  },
                  "returnParameters": {
                    "id": 3950,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3949,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 3961,
                        "src": "2622:12:34",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3948,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2622:5:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2621:14:34"
                  },
                  "scope": 3962,
                  "src": "2561:149:34",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 3963,
              "src": "164:2548:34"
            }
          ],
          "src": "45:2668:34"
        },
        "id": 34
      },
      "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
          "exportedSymbols": {
            "PoolAddress": [
              4054
            ]
          },
          "id": 4055,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3964,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:35"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3965,
                "nodeType": "StructuredDocumentation",
                "src": "71:96:35",
                "text": "@title Provides functions for deriving a pool address from the factory, tokens, and the fee"
              },
              "fullyImplemented": true,
              "id": 4054,
              "linearizedBaseContracts": [
                4054
              ],
              "name": "PoolAddress",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 3968,
                  "mutability": "constant",
                  "name": "POOL_INIT_CODE_HASH",
                  "nodeType": "VariableDeclaration",
                  "scope": 4054,
                  "src": "193:114:35",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3966,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "193:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "hexValue": "307832303363386563363439623233623766616639623733636361646662316136376166353261303937313139633832383031663439343765633564656236633034",
                    "id": 3967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "241:66:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_14581007372363029699053742918615039622153709847727207857928092248886097964036_by_1",
                      "typeString": "int_const 1458...(69 digits omitted)...4036"
                    },
                    "value": "0x203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c04"
                  },
                  "visibility": "internal"
                },
                {
                  "canonicalName": "PoolAddress.PoolKey",
                  "id": 3975,
                  "members": [
                    {
                      "constant": false,
                      "id": 3970,
                      "mutability": "mutable",
                      "name": "token0",
                      "nodeType": "VariableDeclaration",
                      "scope": 3975,
                      "src": "387:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3969,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "387:7:35",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3972,
                      "mutability": "mutable",
                      "name": "token1",
                      "nodeType": "VariableDeclaration",
                      "scope": 3975,
                      "src": "411:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3971,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "411:7:35",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3974,
                      "mutability": "mutable",
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "scope": 3975,
                      "src": "435:10:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint24",
                        "typeString": "uint24"
                      },
                      "typeName": {
                        "id": 3973,
                        "name": "uint24",
                        "nodeType": "ElementaryTypeName",
                        "src": "435:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "PoolKey",
                  "nodeType": "StructDefinition",
                  "scope": 4054,
                  "src": "362:90:35",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4005,
                    "nodeType": "Block",
                    "src": "887:141:35",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3989,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3987,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3978,
                            "src": "901:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 3988,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3980,
                            "src": "910:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "901:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3998,
                        "nodeType": "IfStatement",
                        "src": "897:56:35",
                        "trueBody": {
                          "expression": {
                            "id": 3996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 3990,
                                  "name": "tokenA",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3978,
                                  "src": "919:6:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 3991,
                                  "name": "tokenB",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3980,
                                  "src": "927:6:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "id": 3992,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "918:16:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                "typeString": "tuple(address,address)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 3993,
                                  "name": "tokenB",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3980,
                                  "src": "938:6:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 3994,
                                  "name": "tokenA",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3978,
                                  "src": "946:6:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "id": 3995,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "937:16:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                "typeString": "tuple(address,address)"
                              }
                            },
                            "src": "918:35:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3997,
                          "nodeType": "ExpressionStatement",
                          "src": "918:35:35"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4000,
                              "name": "tokenA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3978,
                              "src": "987:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4001,
                              "name": "tokenB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3980,
                              "src": "1003:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4002,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3982,
                              "src": "1016:3:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            ],
                            "id": 3999,
                            "name": "PoolKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3975,
                            "src": "970:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_PoolKey_$3975_storage_ptr_$",
                              "typeString": "type(struct PoolAddress.PoolKey storage pointer)"
                            }
                          },
                          "id": 4003,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [
                            "token0",
                            "token1",
                            "fee"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "970:51:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                            "typeString": "struct PoolAddress.PoolKey memory"
                          }
                        },
                        "functionReturnParameters": 3986,
                        "id": 4004,
                        "nodeType": "Return",
                        "src": "963:58:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3976,
                    "nodeType": "StructuredDocumentation",
                    "src": "458:321:35",
                    "text": "@notice Returns PoolKey: the ordered tokens with the matched fee levels\n @param tokenA The first token of a pool, unsorted\n @param tokenB The second token of a pool, unsorted\n @param fee The fee level of the pool\n @return Poolkey The pool details with ordered token0 and token1 assignments"
                  },
                  "id": 4006,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolKey",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3983,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3978,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 4006,
                        "src": "804:14:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3977,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "804:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3980,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 4006,
                        "src": "820:14:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3979,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "820:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3982,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 4006,
                        "src": "836:10:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 3981,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "836:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "803:44:35"
                  },
                  "returnParameters": {
                    "id": 3986,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3985,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4006,
                        "src": "871:14:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                          "typeString": "struct PoolAddress.PoolKey"
                        },
                        "typeName": {
                          "id": 3984,
                          "name": "PoolKey",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3975,
                          "src": "871:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PoolKey_$3975_storage_ptr",
                            "typeString": "struct PoolAddress.PoolKey"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "870:16:35"
                  },
                  "scope": 4054,
                  "src": "784:244:35",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4052,
                    "nodeType": "Block",
                    "src": "1374:414:35",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 4021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 4017,
                                  "name": "key",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4011,
                                  "src": "1392:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                },
                                "id": 4018,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token0",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3970,
                                "src": "1392:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "expression": {
                                  "id": 4019,
                                  "name": "key",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4011,
                                  "src": "1405:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                },
                                "id": 4020,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token1",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3972,
                                "src": "1405:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1392:23:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 4016,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1384:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 4022,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1384:32:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4023,
                        "nodeType": "ExpressionStatement",
                        "src": "1384:32:35"
                      },
                      {
                        "expression": {
                          "id": 4050,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4024,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4014,
                            "src": "1426:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "hexValue": "ff",
                                            "id": 4032,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "hexString",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1552:7:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                              "typeString": "literal_string hex\"ff\""
                                            }
                                          },
                                          {
                                            "id": 4033,
                                            "name": "factory",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4009,
                                            "src": "1585:7:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "expression": {
                                                      "id": 4037,
                                                      "name": "key",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 4011,
                                                      "src": "1639:3:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                                        "typeString": "struct PoolAddress.PoolKey memory"
                                                      }
                                                    },
                                                    "id": 4038,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "token0",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3970,
                                                    "src": "1639:10:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  {
                                                    "expression": {
                                                      "id": 4039,
                                                      "name": "key",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 4011,
                                                      "src": "1651:3:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                                        "typeString": "struct PoolAddress.PoolKey memory"
                                                      }
                                                    },
                                                    "id": 4040,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "token1",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3972,
                                                    "src": "1651:10:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  {
                                                    "expression": {
                                                      "id": 4041,
                                                      "name": "key",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 4011,
                                                      "src": "1663:3:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                                        "typeString": "struct PoolAddress.PoolKey memory"
                                                      }
                                                    },
                                                    "id": 4042,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "fee",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3974,
                                                    "src": "1663:7:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint24",
                                                      "typeString": "uint24"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_uint24",
                                                      "typeString": "uint24"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 4035,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -1,
                                                    "src": "1628:3:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_magic_abi",
                                                      "typeString": "abi"
                                                    }
                                                  },
                                                  "id": 4036,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "memberName": "encode",
                                                  "nodeType": "MemberAccess",
                                                  "src": "1628:10:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                    "typeString": "function () pure returns (bytes memory)"
                                                  }
                                                },
                                                "id": 4043,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1628:43:35",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              ],
                                              "id": 4034,
                                              "name": "keccak256",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -8,
                                              "src": "1618:9:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                              }
                                            },
                                            "id": 4044,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1618:54:35",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          },
                                          {
                                            "id": 4045,
                                            "name": "POOL_INIT_CODE_HASH",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3968,
                                            "src": "1698:19:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                              "typeString": "literal_string hex\"ff\""
                                            },
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          ],
                                          "expression": {
                                            "id": 4030,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -1,
                                            "src": "1510:3:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 4031,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "src": "1510:16:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 4046,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1510:229:35",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 4029,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -8,
                                      "src": "1479:9:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 4047,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1479:278:35",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 4028,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1454:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 4027,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1454:7:35",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 4048,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1454:317:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4026,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1433:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4025,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1433:7:35",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4049,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1433:348:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "1426:355:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4051,
                        "nodeType": "ExpressionStatement",
                        "src": "1426:355:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4007,
                    "nodeType": "StructuredDocumentation",
                    "src": "1034:237:35",
                    "text": "@notice Deterministically computes the pool address given the factory and PoolKey\n @param factory The AstraDEX CL factory contract address\n @param key The PoolKey\n @return pool The contract address of the CL pool"
                  },
                  "id": 4053,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "computeAddress",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4012,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4009,
                        "mutability": "mutable",
                        "name": "factory",
                        "nodeType": "VariableDeclaration",
                        "scope": 4053,
                        "src": "1300:15:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4008,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1300:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4011,
                        "mutability": "mutable",
                        "name": "key",
                        "nodeType": "VariableDeclaration",
                        "scope": 4053,
                        "src": "1317:18:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                          "typeString": "struct PoolAddress.PoolKey"
                        },
                        "typeName": {
                          "id": 4010,
                          "name": "PoolKey",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3975,
                          "src": "1317:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PoolKey_$3975_storage_ptr",
                            "typeString": "struct PoolAddress.PoolKey"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1299:37:35"
                  },
                  "returnParameters": {
                    "id": 4015,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4014,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 4053,
                        "src": "1360:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4013,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1360:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1359:14:35"
                  },
                  "scope": 4054,
                  "src": "1276:512:35",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4055,
              "src": "167:1623:35"
            }
          ],
          "src": "45:1746:35"
        },
        "id": 35
      },
      "@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol",
          "exportedSymbols": {
            "IERC20": [
              5876
            ],
            "TransferHelper": [
              4225
            ]
          },
          "id": 4226,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4056,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:36"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 4057,
              "nodeType": "ImportDirective",
              "scope": 4226,
              "sourceUnit": 5877,
              "src": "71:56:36",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "fullyImplemented": true,
              "id": 4225,
              "linearizedBaseContracts": [
                4225
              ],
              "name": "TransferHelper",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4105,
                    "nodeType": "Block",
                    "src": "652:239:36",
                    "statements": [
                      {
                        "assignments": [
                          4070,
                          4072
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4070,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 4105,
                            "src": "663:12:36",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4069,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "663:4:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 4072,
                            "mutability": "mutable",
                            "name": "data",
                            "nodeType": "VariableDeclaration",
                            "scope": 4105,
                            "src": "677:17:36",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4071,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "677:5:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4085,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 4077,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5876,
                                      "src": "745:6:36",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 4078,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "transferFrom",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5857,
                                    "src": "745:19:36",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function IERC20.transferFrom(address,address,uint256) returns (bool)"
                                    }
                                  },
                                  "id": 4079,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "745:28:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "id": 4080,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4062,
                                  "src": "775:4:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4081,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4064,
                                  "src": "781:2:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4082,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4066,
                                  "src": "785:5:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 4075,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "722:3:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4076,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "722:22:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4083,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "722:69:36",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 4073,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4060,
                              "src": "698:5:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4074,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "src": "698:10:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "698:103:36",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "662:139:36"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4087,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4070,
                                "src": "819:7:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 4099,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 4091,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 4088,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4072,
                                          "src": "831:4:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 4089,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "src": "831:11:36",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "hexValue": "30",
                                        "id": 4090,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "846:1:36",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "831:16:36",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "||",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "id": 4094,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4072,
                                          "src": "862:4:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        {
                                          "components": [
                                            {
                                              "id": 4096,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "869:4:36",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_bool_$",
                                                "typeString": "type(bool)"
                                              },
                                              "typeName": {
                                                "id": 4095,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "869:4:36",
                                                "typeDescriptions": {}
                                              }
                                            }
                                          ],
                                          "id": 4097,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "868:6:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_bool_$",
                                            "typeString": "type(bool)"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          },
                                          {
                                            "typeIdentifier": "t_type$_t_bool_$",
                                            "typeString": "type(bool)"
                                          }
                                        ],
                                        "expression": {
                                          "id": 4092,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -1,
                                          "src": "851:3:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 4093,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "decode",
                                        "nodeType": "MemberAccess",
                                        "src": "851:10:36",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 4098,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "851:24:36",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "831:44:36",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 4100,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "830:46:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "819:57:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "535446",
                              "id": 4102,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "878:5:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a1c4b1d67db284650e7cfb49cb11ce76848206ad466478425bd3418f8bbb9a86",
                                "typeString": "literal_string \"STF\""
                              },
                              "value": "STF"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a1c4b1d67db284650e7cfb49cb11ce76848206ad466478425bd3418f8bbb9a86",
                                "typeString": "literal_string \"STF\""
                              }
                            ],
                            "id": 4086,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "811:7:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "811:73:36",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4104,
                        "nodeType": "ExpressionStatement",
                        "src": "811:73:36"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4058,
                    "nodeType": "StructuredDocumentation",
                    "src": "158:398:36",
                    "text": "@notice Transfers tokens from the targeted address to the given destination\n @notice Errors with 'STF' if transfer fails\n @param token The contract address of the token to be transferred\n @param from The originating address from which the tokens will be transferred\n @param to The destination address of the transfer\n @param value The amount to be transferred"
                  },
                  "id": 4106,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4067,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4060,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 4106,
                        "src": "587:13:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4059,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "587:7:36",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4062,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 4106,
                        "src": "602:12:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4061,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "602:7:36",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4064,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4106,
                        "src": "616:10:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4063,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "616:7:36",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4066,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4106,
                        "src": "628:13:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4065,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "628:7:36",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "586:56:36"
                  },
                  "returnParameters": {
                    "id": 4068,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "652:0:36"
                  },
                  "scope": 4225,
                  "src": "561:330:36",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4151,
                    "nodeType": "Block",
                    "src": "1256:206:36",
                    "statements": [
                      {
                        "assignments": [
                          4117,
                          4119
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4117,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 4151,
                            "src": "1267:12:36",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4116,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "1267:4:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 4119,
                            "mutability": "mutable",
                            "name": "data",
                            "nodeType": "VariableDeclaration",
                            "scope": 4151,
                            "src": "1281:17:36",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4118,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "1281:5:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4131,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 4124,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5876,
                                      "src": "1336:6:36",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 4125,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "transfer",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5825,
                                    "src": "1336:15:36",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function IERC20.transfer(address,uint256) returns (bool)"
                                    }
                                  },
                                  "id": 4126,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "1336:24:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "id": 4127,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4111,
                                  "src": "1362:2:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4128,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4113,
                                  "src": "1366:5:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 4122,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1313:3:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4123,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "1313:22:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1313:59:36",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 4120,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4109,
                              "src": "1302:5:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4121,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "src": "1302:10:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1302:71:36",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1266:107:36"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4147,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4133,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4117,
                                "src": "1391:7:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 4145,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 4137,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 4134,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4119,
                                          "src": "1403:4:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 4135,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "src": "1403:11:36",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "hexValue": "30",
                                        "id": 4136,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1418:1:36",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "1403:16:36",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "||",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "id": 4140,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4119,
                                          "src": "1434:4:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        {
                                          "components": [
                                            {
                                              "id": 4142,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "1441:4:36",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_bool_$",
                                                "typeString": "type(bool)"
                                              },
                                              "typeName": {
                                                "id": 4141,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1441:4:36",
                                                "typeDescriptions": {}
                                              }
                                            }
                                          ],
                                          "id": 4143,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "1440:6:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_bool_$",
                                            "typeString": "type(bool)"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          },
                                          {
                                            "typeIdentifier": "t_type$_t_bool_$",
                                            "typeString": "type(bool)"
                                          }
                                        ],
                                        "expression": {
                                          "id": 4138,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -1,
                                          "src": "1423:3:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 4139,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "decode",
                                        "nodeType": "MemberAccess",
                                        "src": "1423:10:36",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 4144,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1423:24:36",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "1403:44:36",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 4146,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1402:46:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1391:57:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5354",
                              "id": 4148,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1450:4:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8e992d6a09e3feb7936717fa482f3a7086f18407e19b697f3153d17fd25870ca",
                                "typeString": "literal_string \"ST\""
                              },
                              "value": "ST"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8e992d6a09e3feb7936717fa482f3a7086f18407e19b697f3153d17fd25870ca",
                                "typeString": "literal_string \"ST\""
                              }
                            ],
                            "id": 4132,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1383:7:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1383:72:36",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4150,
                        "nodeType": "ExpressionStatement",
                        "src": "1383:72:36"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4107,
                    "nodeType": "StructuredDocumentation",
                    "src": "897:281:36",
                    "text": "@notice Transfers tokens from msg.sender to a recipient\n @dev Errors with ST if transfer fails\n @param token The contract address of the token which will be transferred\n @param to The recipient of the transfer\n @param value The value of the transfer"
                  },
                  "id": 4152,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4114,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4109,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 4152,
                        "src": "1205:13:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4108,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1205:7:36",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4111,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4152,
                        "src": "1220:10:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1220:7:36",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4113,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4152,
                        "src": "1232:13:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4112,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1232:7:36",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1204:42:36"
                  },
                  "returnParameters": {
                    "id": 4115,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1256:0:36"
                  },
                  "scope": 4225,
                  "src": "1183:279:36",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4197,
                    "nodeType": "Block",
                    "src": "1887:205:36",
                    "statements": [
                      {
                        "assignments": [
                          4163,
                          4165
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4163,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 4197,
                            "src": "1898:12:36",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4162,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "1898:4:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 4165,
                            "mutability": "mutable",
                            "name": "data",
                            "nodeType": "VariableDeclaration",
                            "scope": 4197,
                            "src": "1912:17:36",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4164,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "1912:5:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4177,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 4170,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5876,
                                      "src": "1967:6:36",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 4171,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5845,
                                    "src": "1967:14:36",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function IERC20.approve(address,uint256) returns (bool)"
                                    }
                                  },
                                  "id": 4172,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "1967:23:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "id": 4173,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4157,
                                  "src": "1992:2:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4174,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4159,
                                  "src": "1996:5:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 4168,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1944:3:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4169,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "1944:22:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4175,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1944:58:36",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 4166,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4155,
                              "src": "1933:5:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "src": "1933:10:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1933:70:36",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1897:106:36"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4193,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4179,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4163,
                                "src": "2021:7:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 4191,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 4183,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 4180,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4165,
                                          "src": "2033:4:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 4181,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "src": "2033:11:36",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "hexValue": "30",
                                        "id": 4182,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2048:1:36",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "2033:16:36",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "||",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "id": 4186,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4165,
                                          "src": "2064:4:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        {
                                          "components": [
                                            {
                                              "id": 4188,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "2071:4:36",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_bool_$",
                                                "typeString": "type(bool)"
                                              },
                                              "typeName": {
                                                "id": 4187,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2071:4:36",
                                                "typeDescriptions": {}
                                              }
                                            }
                                          ],
                                          "id": 4189,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "2070:6:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_bool_$",
                                            "typeString": "type(bool)"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          },
                                          {
                                            "typeIdentifier": "t_type$_t_bool_$",
                                            "typeString": "type(bool)"
                                          }
                                        ],
                                        "expression": {
                                          "id": 4184,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -1,
                                          "src": "2053:3:36",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 4185,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "decode",
                                        "nodeType": "MemberAccess",
                                        "src": "2053:10:36",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 4190,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2053:24:36",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "2033:44:36",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 4192,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2032:46:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2021:57:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5341",
                              "id": 4194,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2080:4:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0c382912095e7706ed01a66755a50c713445aceaf5a9168954498b03dd381faa",
                                "typeString": "literal_string \"SA\""
                              },
                              "value": "SA"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0c382912095e7706ed01a66755a50c713445aceaf5a9168954498b03dd381faa",
                                "typeString": "literal_string \"SA\""
                              }
                            ],
                            "id": 4178,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2013:7:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2013:72:36",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4196,
                        "nodeType": "ExpressionStatement",
                        "src": "2013:72:36"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4153,
                    "nodeType": "StructuredDocumentation",
                    "src": "1468:342:36",
                    "text": "@notice Approves the stipulated contract to spend the given allowance in the given token\n @dev Errors with 'SA' if transfer fails\n @param token The contract address of the token to be approved\n @param to The target of the approval\n @param value The amount of the given token the target will be allowed to spend"
                  },
                  "id": 4198,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeApprove",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4160,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4155,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 4198,
                        "src": "1836:13:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4154,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1836:7:36",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4157,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4198,
                        "src": "1851:10:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4156,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1851:7:36",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4159,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4198,
                        "src": "1863:13:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4158,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1863:7:36",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1835:42:36"
                  },
                  "returnParameters": {
                    "id": 4161,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1887:0:36"
                  },
                  "scope": 4225,
                  "src": "1815:277:36",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4223,
                    "nodeType": "Block",
                    "src": "2343:104:36",
                    "statements": [
                      {
                        "assignments": [
                          4207,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4207,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 4223,
                            "src": "2354:12:36",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4206,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2354:4:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 4217,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 4214,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2404:1:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 4213,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "NewExpression",
                                "src": "2394:9:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (bytes memory)"
                                },
                                "typeName": {
                                  "id": 4212,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2398:5:36",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                  }
                                }
                              },
                              "id": 4215,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2394:12:36",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "id": 4208,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4201,
                                "src": "2372:2:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 4209,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "2372:7:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 4211,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 4210,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4203,
                                "src": "2387:5:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "2372:21:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2372:35:36",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2353:54:36"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4219,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4207,
                              "src": "2425:7:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "535445",
                              "id": 4220,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2434:5:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_48541fce89df928ec30caa1aed6c0cd94b8e2ef76b3c68b10b9a184ceadb93d4",
                                "typeString": "literal_string \"STE\""
                              },
                              "value": "STE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_48541fce89df928ec30caa1aed6c0cd94b8e2ef76b3c68b10b9a184ceadb93d4",
                                "typeString": "literal_string \"STE\""
                              }
                            ],
                            "id": 4218,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2417:7:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4221,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2417:23:36",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4222,
                        "nodeType": "ExpressionStatement",
                        "src": "2417:23:36"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4199,
                    "nodeType": "StructuredDocumentation",
                    "src": "2098:179:36",
                    "text": "@notice Transfers AMB to the recipient address\n @dev Fails with `STE`\n @param to The destination of the transfer\n @param value The value to be transferred"
                  },
                  "id": 4224,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferAMB",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4204,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4201,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4224,
                        "src": "2307:10:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4200,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2307:7:36",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4203,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4224,
                        "src": "2319:13:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4202,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2319:7:36",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2306:27:36"
                  },
                  "returnParameters": {
                    "id": 4205,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2343:0:36"
                  },
                  "scope": 4225,
                  "src": "2282:165:36",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4226,
              "src": "129:2320:36"
            }
          ],
          "src": "45:2405:36"
        },
        "id": 36
      },
      "@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol",
          "exportedSymbols": {
            "IAstraCallee": [
              4239
            ]
          },
          "id": 4240,
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4227,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "0:24:37"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 4239,
              "linearizedBaseContracts": [
                4239
              ],
              "name": "IAstraCallee",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "functionSelector": "ee906f6b",
                  "id": 4238,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "astraCall",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4236,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4229,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4238,
                        "src": "74:14:37",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4228,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "74:7:37",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4231,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 4238,
                        "src": "90:12:37",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4230,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "90:4:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4233,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4238,
                        "src": "104:12:37",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4232,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "104:4:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4235,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 4238,
                        "src": "118:19:37",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4234,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "118:5:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "73:65:37"
                  },
                  "returnParameters": {
                    "id": 4237,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "147:0:37"
                  },
                  "scope": 4239,
                  "src": "55:93:37",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 4240,
              "src": "26:124:37"
            }
          ],
          "src": "0:151:37"
        },
        "id": 37
      },
      "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol": {
        "ast": {
          "absolutePath": "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol",
          "exportedSymbols": {
            "IAstraPair": [
              4481
            ]
          },
          "id": 4482,
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4241,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "0:24:38"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 4481,
              "linearizedBaseContracts": [
                4481
              ],
              "name": "IAstraPair",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "id": 4249,
                  "name": "Approval",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4248,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4243,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 4249,
                        "src": "68:21:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4242,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "68:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4245,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4249,
                        "src": "91:23:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4244,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "91:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4247,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4249,
                        "src": "116:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4246,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "116:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "67:60:38"
                  },
                  "src": "53:75:38"
                },
                {
                  "anonymous": false,
                  "id": 4257,
                  "name": "Transfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4256,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4251,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 4257,
                        "src": "148:20:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4250,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "148:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4253,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4257,
                        "src": "170:18:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4252,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "170:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4255,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4257,
                        "src": "190:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4254,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "190:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "147:54:38"
                  },
                  "src": "133:69:38"
                },
                {
                  "functionSelector": "06fdde03",
                  "id": 4262,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4258,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "221:2:38"
                  },
                  "returnParameters": {
                    "id": 4261,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4260,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4262,
                        "src": "247:13:38",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4259,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "247:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "246:15:38"
                  },
                  "scope": 4481,
                  "src": "208:54:38",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "95d89b41",
                  "id": 4267,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4263,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "282:2:38"
                  },
                  "returnParameters": {
                    "id": 4266,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4265,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4267,
                        "src": "308:13:38",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4264,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "308:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "307:15:38"
                  },
                  "scope": 4481,
                  "src": "267:56:38",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "313ce567",
                  "id": 4272,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decimals",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4268,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "345:2:38"
                  },
                  "returnParameters": {
                    "id": 4271,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4270,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4272,
                        "src": "371:5:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4269,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "371:5:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "370:7:38"
                  },
                  "scope": 4481,
                  "src": "328:50:38",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "18160ddd",
                  "id": 4277,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4273,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "403:2:38"
                  },
                  "returnParameters": {
                    "id": 4276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4275,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4277,
                        "src": "429:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4274,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "429:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "428:6:38"
                  },
                  "scope": 4481,
                  "src": "383:52:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "70a08231",
                  "id": 4284,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4280,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4279,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 4284,
                        "src": "459:13:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4278,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "459:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "458:15:38"
                  },
                  "returnParameters": {
                    "id": 4283,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4282,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4284,
                        "src": "497:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4281,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "497:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "496:6:38"
                  },
                  "scope": 4481,
                  "src": "440:63:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "dd62ed3e",
                  "id": 4293,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4289,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4286,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 4293,
                        "src": "527:13:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4285,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "527:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4288,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4293,
                        "src": "542:15:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4287,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "542:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "526:32:38"
                  },
                  "returnParameters": {
                    "id": 4292,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4291,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4293,
                        "src": "582:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4290,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "582:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "581:6:38"
                  },
                  "scope": 4481,
                  "src": "508:80:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "095ea7b3",
                  "id": 4302,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4298,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4295,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4302,
                        "src": "611:15:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4294,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "611:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4297,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4302,
                        "src": "628:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4296,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "628:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "610:29:38"
                  },
                  "returnParameters": {
                    "id": 4301,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4300,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4302,
                        "src": "658:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4299,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "658:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "657:6:38"
                  },
                  "scope": 4481,
                  "src": "594:70:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "a9059cbb",
                  "id": 4311,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4307,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4304,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4311,
                        "src": "687:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4303,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "687:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4306,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4311,
                        "src": "699:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4305,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "699:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "686:24:38"
                  },
                  "returnParameters": {
                    "id": 4310,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4309,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4311,
                        "src": "729:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4308,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "729:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "728:6:38"
                  },
                  "scope": 4481,
                  "src": "669:66:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "23b872dd",
                  "id": 4322,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4318,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4313,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 4322,
                        "src": "762:12:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4312,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "762:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4315,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4322,
                        "src": "776:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4314,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "776:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4317,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4322,
                        "src": "788:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4316,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "788:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "761:38:38"
                  },
                  "returnParameters": {
                    "id": 4321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4320,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4322,
                        "src": "818:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4319,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "818:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "817:6:38"
                  },
                  "scope": 4481,
                  "src": "740:84:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "3644e515",
                  "id": 4327,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "DOMAIN_SEPARATOR",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4323,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "855:2:38"
                  },
                  "returnParameters": {
                    "id": 4326,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4325,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4327,
                        "src": "881:7:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4324,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "881:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "880:9:38"
                  },
                  "scope": 4481,
                  "src": "830:60:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "30adf81f",
                  "id": 4332,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "PERMIT_TYPEHASH",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4328,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "919:2:38"
                  },
                  "returnParameters": {
                    "id": 4331,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4330,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4332,
                        "src": "945:7:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4329,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "945:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "944:9:38"
                  },
                  "scope": 4481,
                  "src": "895:59:38",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "7ecebe00",
                  "id": 4339,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "nonces",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4335,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4334,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 4339,
                        "src": "975:13:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4333,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "975:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "974:15:38"
                  },
                  "returnParameters": {
                    "id": 4338,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4337,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4339,
                        "src": "1013:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4336,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1013:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1012:6:38"
                  },
                  "scope": 4481,
                  "src": "959:60:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "d505accf",
                  "id": 4356,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "permit",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4354,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4341,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 4356,
                        "src": "1041:13:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4340,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1041:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4343,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4356,
                        "src": "1056:15:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4342,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1056:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4345,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4356,
                        "src": "1073:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4344,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1073:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4347,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nodeType": "VariableDeclaration",
                        "scope": 4356,
                        "src": "1085:13:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4346,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1085:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4349,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 4356,
                        "src": "1100:7:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4348,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1100:5:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4351,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 4356,
                        "src": "1109:9:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4350,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1109:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4353,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 4356,
                        "src": "1120:9:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4352,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1120:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1040:90:38"
                  },
                  "returnParameters": {
                    "id": 4355,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1139:0:38"
                  },
                  "scope": 4481,
                  "src": "1025:115:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "id": 4364,
                  "name": "Mint",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4363,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4358,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4364,
                        "src": "1157:22:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4357,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1157:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4360,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 4364,
                        "src": "1181:12:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4359,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1181:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4362,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4364,
                        "src": "1195:12:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4361,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1195:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1156:52:38"
                  },
                  "src": "1146:63:38"
                },
                {
                  "anonymous": false,
                  "id": 4374,
                  "name": "Burn",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4373,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4366,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4374,
                        "src": "1225:22:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4365,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1225:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4368,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 4374,
                        "src": "1249:12:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4367,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1249:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4370,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4374,
                        "src": "1263:12:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4369,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1263:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4372,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4374,
                        "src": "1277:18:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4371,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1277:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1224:72:38"
                  },
                  "src": "1214:83:38"
                },
                {
                  "anonymous": false,
                  "id": 4388,
                  "name": "Swap",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4387,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4376,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4388,
                        "src": "1322:22:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4375,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1322:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4378,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0In",
                        "nodeType": "VariableDeclaration",
                        "scope": 4388,
                        "src": "1354:14:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4377,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1354:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4380,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1In",
                        "nodeType": "VariableDeclaration",
                        "scope": 4388,
                        "src": "1378:14:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4379,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1378:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4382,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0Out",
                        "nodeType": "VariableDeclaration",
                        "scope": 4388,
                        "src": "1402:15:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4381,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1402:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4384,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1Out",
                        "nodeType": "VariableDeclaration",
                        "scope": 4388,
                        "src": "1427:15:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4383,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1427:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4386,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4388,
                        "src": "1452:18:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4385,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1452:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1312:164:38"
                  },
                  "src": "1302:175:38"
                },
                {
                  "anonymous": false,
                  "id": 4394,
                  "name": "Sync",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4393,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4390,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "reserve0",
                        "nodeType": "VariableDeclaration",
                        "scope": 4394,
                        "src": "1493:16:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "typeName": {
                          "id": 4389,
                          "name": "uint112",
                          "nodeType": "ElementaryTypeName",
                          "src": "1493:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4392,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "reserve1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4394,
                        "src": "1511:16:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "typeName": {
                          "id": 4391,
                          "name": "uint112",
                          "nodeType": "ElementaryTypeName",
                          "src": "1511:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1492:36:38"
                  },
                  "src": "1482:47:38"
                },
                {
                  "functionSelector": "ba9a7a56",
                  "id": 4399,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "MINIMUM_LIQUIDITY",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4395,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1561:2:38"
                  },
                  "returnParameters": {
                    "id": 4398,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4397,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4399,
                        "src": "1587:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4396,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1587:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1586:6:38"
                  },
                  "scope": 4481,
                  "src": "1535:58:38",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "c45a0155",
                  "id": 4404,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factory",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4400,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1614:2:38"
                  },
                  "returnParameters": {
                    "id": 4403,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4402,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4404,
                        "src": "1640:7:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4401,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1640:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1639:9:38"
                  },
                  "scope": 4481,
                  "src": "1598:51:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "0dfe1681",
                  "id": 4409,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "token0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4405,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1669:2:38"
                  },
                  "returnParameters": {
                    "id": 4408,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4407,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4409,
                        "src": "1695:7:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4406,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1695:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1694:9:38"
                  },
                  "scope": 4481,
                  "src": "1654:50:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "d21220a7",
                  "id": 4414,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "token1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4410,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1724:2:38"
                  },
                  "returnParameters": {
                    "id": 4413,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4412,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4414,
                        "src": "1750:7:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4411,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1750:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1749:9:38"
                  },
                  "scope": 4481,
                  "src": "1709:50:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "0902f1ac",
                  "id": 4423,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getReserves",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4415,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1784:2:38"
                  },
                  "returnParameters": {
                    "id": 4422,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4417,
                        "mutability": "mutable",
                        "name": "reserve0",
                        "nodeType": "VariableDeclaration",
                        "scope": 4423,
                        "src": "1810:16:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "typeName": {
                          "id": 4416,
                          "name": "uint112",
                          "nodeType": "ElementaryTypeName",
                          "src": "1810:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4419,
                        "mutability": "mutable",
                        "name": "reserve1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4423,
                        "src": "1828:16:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "typeName": {
                          "id": 4418,
                          "name": "uint112",
                          "nodeType": "ElementaryTypeName",
                          "src": "1828:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4421,
                        "mutability": "mutable",
                        "name": "blockTimestampLast",
                        "nodeType": "VariableDeclaration",
                        "scope": 4423,
                        "src": "1846:25:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 4420,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1846:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1809:63:38"
                  },
                  "scope": 4481,
                  "src": "1764:109:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "5909c0d5",
                  "id": 4428,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "price0CumulativeLast",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4424,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1907:2:38"
                  },
                  "returnParameters": {
                    "id": 4427,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4426,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4428,
                        "src": "1933:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4425,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1933:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1932:6:38"
                  },
                  "scope": 4481,
                  "src": "1878:61:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "5a3d5493",
                  "id": 4433,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "price1CumulativeLast",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4429,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1973:2:38"
                  },
                  "returnParameters": {
                    "id": 4432,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4431,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4433,
                        "src": "1999:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4430,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1999:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1998:6:38"
                  },
                  "scope": 4481,
                  "src": "1944:61:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "7464fc3d",
                  "id": 4438,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "kLast",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4434,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2024:2:38"
                  },
                  "returnParameters": {
                    "id": 4437,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4436,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4438,
                        "src": "2050:4:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4435,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2050:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2049:6:38"
                  },
                  "scope": 4481,
                  "src": "2010:46:38",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "6a627842",
                  "id": 4445,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4441,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4440,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4445,
                        "src": "2076:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4439,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2076:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2075:12:38"
                  },
                  "returnParameters": {
                    "id": 4444,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4443,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nodeType": "VariableDeclaration",
                        "scope": 4445,
                        "src": "2106:14:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4442,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2106:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2105:16:38"
                  },
                  "scope": 4481,
                  "src": "2062:60:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "89afcb44",
                  "id": 4454,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4448,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4447,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4454,
                        "src": "2141:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4446,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2141:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2140:12:38"
                  },
                  "returnParameters": {
                    "id": 4453,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4450,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 4454,
                        "src": "2171:12:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4449,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2171:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4452,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4454,
                        "src": "2185:12:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4451,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2185:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2170:28:38"
                  },
                  "scope": 4481,
                  "src": "2127:72:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "022c0d9f",
                  "id": 4465,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swap",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4463,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4456,
                        "mutability": "mutable",
                        "name": "amount0Out",
                        "nodeType": "VariableDeclaration",
                        "scope": 4465,
                        "src": "2218:15:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4455,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2218:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4458,
                        "mutability": "mutable",
                        "name": "amount1Out",
                        "nodeType": "VariableDeclaration",
                        "scope": 4465,
                        "src": "2235:15:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4457,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2235:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4460,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4465,
                        "src": "2252:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4459,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2252:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4462,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 4465,
                        "src": "2264:19:38",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4461,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2264:5:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2217:67:38"
                  },
                  "returnParameters": {
                    "id": 4464,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2293:0:38"
                  },
                  "scope": 4481,
                  "src": "2204:90:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "bc25cf77",
                  "id": 4470,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "skim",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4468,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4467,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 4470,
                        "src": "2313:10:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4466,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2313:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2312:12:38"
                  },
                  "returnParameters": {
                    "id": 4469,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2333:0:38"
                  },
                  "scope": 4481,
                  "src": "2299:35:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "fff6cae9",
                  "id": 4473,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sync",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4471,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2352:2:38"
                  },
                  "returnParameters": {
                    "id": 4472,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2363:0:38"
                  },
                  "scope": 4481,
                  "src": "2339:25:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "485cc955",
                  "id": 4480,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "initialize",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4478,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4475,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4480,
                        "src": "2390:7:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4474,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2390:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4477,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4480,
                        "src": "2399:7:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4476,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2399:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2389:18:38"
                  },
                  "returnParameters": {
                    "id": 4479,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2416:0:38"
                  },
                  "scope": 4481,
                  "src": "2370:47:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 4482,
              "src": "26:2393:38"
            }
          ],
          "src": "0:2420:38"
        },
        "id": 38
      },
      "@openzeppelin/contracts/cryptography/ECDSA.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/cryptography/ECDSA.sol",
          "exportedSymbols": {
            "ECDSA": [
              4597
            ]
          },
          "id": 4598,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4483,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:39"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4484,
                "nodeType": "StructuredDocumentation",
                "src": "58:205:39",
                "text": " @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n These functions can be used to verify that a message was signed by the holder\n of the private keys of a given address."
              },
              "fullyImplemented": true,
              "id": 4597,
              "linearizedBaseContracts": [
                4597
              ],
              "name": "ECDSA",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4521,
                    "nodeType": "Block",
                    "src": "1151:653:39",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4497,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4494,
                              "name": "signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4489,
                              "src": "1203:9:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 4495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "1203:16:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "3635",
                            "id": 4496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1223:2:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_65_by_1",
                              "typeString": "int_const 65"
                            },
                            "value": "65"
                          },
                          "src": "1203:22:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4503,
                        "nodeType": "IfStatement",
                        "src": "1199:94:39",
                        "trueBody": {
                          "id": 4502,
                          "nodeType": "Block",
                          "src": "1227:66:39",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "45434453413a20696e76616c6964207369676e6174757265206c656e677468",
                                    "id": 4499,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1248:33:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77",
                                      "typeString": "literal_string \"ECDSA: invalid signature length\""
                                    },
                                    "value": "ECDSA: invalid signature length"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77",
                                      "typeString": "literal_string \"ECDSA: invalid signature length\""
                                    }
                                  ],
                                  "id": 4498,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "1241:6:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 4500,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1241:41:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4501,
                              "nodeType": "ExpressionStatement",
                              "src": "1241:41:39"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          4505
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4505,
                            "mutability": "mutable",
                            "name": "r",
                            "nodeType": "VariableDeclaration",
                            "scope": 4521,
                            "src": "1359:9:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4504,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1359:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4506,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1359:9:39"
                      },
                      {
                        "assignments": [
                          4508
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4508,
                            "mutability": "mutable",
                            "name": "s",
                            "nodeType": "VariableDeclaration",
                            "scope": 4521,
                            "src": "1378:9:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4507,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1378:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4509,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1378:9:39"
                      },
                      {
                        "assignments": [
                          4511
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4511,
                            "mutability": "mutable",
                            "name": "v",
                            "nodeType": "VariableDeclaration",
                            "scope": 4521,
                            "src": "1397:7:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 4510,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "1397:5:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4512,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1397:7:39"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1603:155:39",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1617:32:39",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "signature",
                                        "nodeType": "YulIdentifier",
                                        "src": "1632:9:39"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1643:4:39",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1628:3:39"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1628:20:39"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1622:5:39"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1622:27:39"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "1617:1:39"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1662:32:39",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "signature",
                                        "nodeType": "YulIdentifier",
                                        "src": "1677:9:39"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1688:4:39",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1673:3:39"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1673:20:39"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1667:5:39"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1667:27:39"
                              },
                              "variableNames": [
                                {
                                  "name": "s",
                                  "nodeType": "YulIdentifier",
                                  "src": "1662:1:39"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1707:41:39",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1717:1:39",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "signature",
                                            "nodeType": "YulIdentifier",
                                            "src": "1730:9:39"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1741:4:39",
                                            "type": "",
                                            "value": "0x60"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1726:3:39"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1726:20:39"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "1720:5:39"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1720:27:39"
                                  }
                                ],
                                "functionName": {
                                  "name": "byte",
                                  "nodeType": "YulIdentifier",
                                  "src": "1712:4:39"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1712:36:39"
                              },
                              "variableNames": [
                                {
                                  "name": "v",
                                  "nodeType": "YulIdentifier",
                                  "src": "1707:1:39"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 4505,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1617:1:39",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4508,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1662:1:39",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4489,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1632:9:39",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4489,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1677:9:39",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4489,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1730:9:39",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4511,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1707:1:39",
                            "valueSize": 1
                          }
                        ],
                        "id": 4513,
                        "nodeType": "InlineAssembly",
                        "src": "1594:164:39"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4515,
                              "name": "hash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4487,
                              "src": "1783:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 4516,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4511,
                              "src": "1789:1:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 4517,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4505,
                              "src": "1792:1:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 4518,
                              "name": "s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4508,
                              "src": "1795:1:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 4514,
                            "name": "recover",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4522,
                              4579
                            ],
                            "referencedDeclaration": 4579,
                            "src": "1775:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                            }
                          },
                          "id": 4519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1775:22:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 4493,
                        "id": 4520,
                        "nodeType": "Return",
                        "src": "1768:29:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4485,
                    "nodeType": "StructuredDocumentation",
                    "src": "284:775:39",
                    "text": " @dev Returns the address that signed a hashed message (`hash`) with\n `signature`. This address can then be used for verification purposes.\n The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {toEthSignedMessageHash} on it."
                  },
                  "id": 4522,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recover",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4490,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4487,
                        "mutability": "mutable",
                        "name": "hash",
                        "nodeType": "VariableDeclaration",
                        "scope": 4522,
                        "src": "1081:12:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4486,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1081:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4489,
                        "mutability": "mutable",
                        "name": "signature",
                        "nodeType": "VariableDeclaration",
                        "scope": 4522,
                        "src": "1095:22:39",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4488,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1095:5:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1080:38:39"
                  },
                  "returnParameters": {
                    "id": 4493,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4492,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4522,
                        "src": "1142:7:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4491,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1142:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1141:9:39"
                  },
                  "scope": 4597,
                  "src": "1064:740:39",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4578,
                    "nodeType": "Block",
                    "src": "2046:1320:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4542,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 4539,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4531,
                                    "src": "2946:1:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 4538,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2938:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 4537,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2938:7:39",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 4540,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2938:10:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "hexValue": "307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130",
                                "id": 4541,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2952:66:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1",
                                  "typeString": "int_const 5789...(69 digits omitted)...7168"
                                },
                                "value": "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"
                              },
                              "src": "2938:80:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45434453413a20696e76616c6964207369676e6174757265202773272076616c7565",
                              "id": 4543,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3020:36:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd",
                                "typeString": "literal_string \"ECDSA: invalid signature 's' value\""
                              },
                              "value": "ECDSA: invalid signature 's' value"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd",
                                "typeString": "literal_string \"ECDSA: invalid signature 's' value\""
                              }
                            ],
                            "id": 4536,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2930:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2930:127:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4545,
                        "nodeType": "ExpressionStatement",
                        "src": "2930:127:39"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4553,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 4549,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 4547,
                                  "name": "v",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4527,
                                  "src": "3075:1:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "3237",
                                  "id": 4548,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3080:2:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_27_by_1",
                                    "typeString": "int_const 27"
                                  },
                                  "value": "27"
                                },
                                "src": "3075:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 4552,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 4550,
                                  "name": "v",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4527,
                                  "src": "3086:1:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "3238",
                                  "id": 4551,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3091:2:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_28_by_1",
                                    "typeString": "int_const 28"
                                  },
                                  "value": "28"
                                },
                                "src": "3086:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "3075:18:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45434453413a20696e76616c6964207369676e6174757265202776272076616c7565",
                              "id": 4554,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3095:36:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4",
                                "typeString": "literal_string \"ECDSA: invalid signature 'v' value\""
                              },
                              "value": "ECDSA: invalid signature 'v' value"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4",
                                "typeString": "literal_string \"ECDSA: invalid signature 'v' value\""
                              }
                            ],
                            "id": 4546,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3067:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3067:65:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4556,
                        "nodeType": "ExpressionStatement",
                        "src": "3067:65:39"
                      },
                      {
                        "assignments": [
                          4558
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4558,
                            "mutability": "mutable",
                            "name": "signer",
                            "nodeType": "VariableDeclaration",
                            "scope": 4578,
                            "src": "3227:14:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 4557,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3227:7:39",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4565,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4560,
                              "name": "hash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4525,
                              "src": "3254:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 4561,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4527,
                              "src": "3260:1:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 4562,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4529,
                              "src": "3263:1:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 4563,
                              "name": "s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4531,
                              "src": "3266:1:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 4559,
                            "name": "ecrecover",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -6,
                            "src": "3244:9:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                            }
                          },
                          "id": 4564,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3244:24:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3227:41:39"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 4572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4567,
                                "name": "signer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4558,
                                "src": "3286:6:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 4570,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3304:1:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 4569,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3296:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 4568,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3296:7:39",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 4571,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3296:10:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "3286:20:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45434453413a20696e76616c6964207369676e6174757265",
                              "id": 4573,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3308:26:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be",
                                "typeString": "literal_string \"ECDSA: invalid signature\""
                              },
                              "value": "ECDSA: invalid signature"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be",
                                "typeString": "literal_string \"ECDSA: invalid signature\""
                              }
                            ],
                            "id": 4566,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3278:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4574,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3278:57:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4575,
                        "nodeType": "ExpressionStatement",
                        "src": "3278:57:39"
                      },
                      {
                        "expression": {
                          "id": 4576,
                          "name": "signer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4558,
                          "src": "3353:6:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 4535,
                        "id": 4577,
                        "nodeType": "Return",
                        "src": "3346:13:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4523,
                    "nodeType": "StructuredDocumentation",
                    "src": "1810:137:39",
                    "text": " @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n `r` and `s` signature fields separately."
                  },
                  "id": 4579,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recover",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4532,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4525,
                        "mutability": "mutable",
                        "name": "hash",
                        "nodeType": "VariableDeclaration",
                        "scope": 4579,
                        "src": "1969:12:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4524,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1969:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4527,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 4579,
                        "src": "1983:7:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4526,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1983:5:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4529,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 4579,
                        "src": "1992:9:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4528,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1992:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4531,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 4579,
                        "src": "2003:9:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4530,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2003:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1968:45:39"
                  },
                  "returnParameters": {
                    "id": 4535,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4534,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4579,
                        "src": "2037:7:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4533,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2037:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2036:9:39"
                  },
                  "scope": 4597,
                  "src": "1952:1414:39",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4595,
                    "nodeType": "Block",
                    "src": "3708:187:39",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332",
                                  "id": 4590,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3846:34:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                                    "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a3332\""
                                  },
                                  "value": "\u0019Ethereum Signed Message:\n32"
                                },
                                {
                                  "id": 4591,
                                  "name": "hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4582,
                                  "src": "3882:4:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                                    "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a3332\""
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 4588,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "3829:3:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4589,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "3829:16:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 4592,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3829:58:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4587,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "3819:9:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3819:69:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 4586,
                        "id": 4594,
                        "nodeType": "Return",
                        "src": "3812:76:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4580,
                    "nodeType": "StructuredDocumentation",
                    "src": "3372:253:39",
                    "text": " @dev Returns an Ethereum Signed Message, created from a `hash`. This\n replicates the behavior of the\n https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n JSON-RPC method.\n See {recover}."
                  },
                  "id": 4596,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toEthSignedMessageHash",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4583,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4582,
                        "mutability": "mutable",
                        "name": "hash",
                        "nodeType": "VariableDeclaration",
                        "scope": 4596,
                        "src": "3662:12:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4581,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3662:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3661:14:39"
                  },
                  "returnParameters": {
                    "id": 4586,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4585,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4596,
                        "src": "3699:7:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4584,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3699:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3698:9:39"
                  },
                  "scope": 4597,
                  "src": "3630:265:39",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4598,
              "src": "264:3633:39"
            }
          ],
          "src": "33:3865:39"
        },
        "id": 39
      },
      "@openzeppelin/contracts/drafts/EIP712.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/drafts/EIP712.sol",
          "exportedSymbols": {
            "EIP712": [
              4746
            ]
          },
          "id": 4747,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4599,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".0",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:31:40"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 4600,
                "nodeType": "StructuredDocumentation",
                "src": "66:1142:40",
                "text": " @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n they need in their contracts using a combination of `abi.encode` and `keccak256`.\n This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n ({_hashTypedDataV4}).\n The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n the chain id to protect against replay attacks on an eventual fork of the chain.\n NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n _Available since v3.4._"
              },
              "fullyImplemented": true,
              "id": 4746,
              "linearizedBaseContracts": [
                4746
              ],
              "name": "EIP712",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 4602,
                  "mutability": "immutable",
                  "name": "_CACHED_DOMAIN_SEPARATOR",
                  "nodeType": "VariableDeclaration",
                  "scope": 4746,
                  "src": "1477:50:40",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4601,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1477:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 4604,
                  "mutability": "immutable",
                  "name": "_CACHED_CHAIN_ID",
                  "nodeType": "VariableDeclaration",
                  "scope": 4746,
                  "src": "1533:42:40",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4603,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1533:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 4606,
                  "mutability": "immutable",
                  "name": "_HASHED_NAME",
                  "nodeType": "VariableDeclaration",
                  "scope": 4746,
                  "src": "1582:38:40",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4605,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1582:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 4608,
                  "mutability": "immutable",
                  "name": "_HASHED_VERSION",
                  "nodeType": "VariableDeclaration",
                  "scope": 4746,
                  "src": "1626:41:40",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4607,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1626:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 4610,
                  "mutability": "immutable",
                  "name": "_TYPE_HASH",
                  "nodeType": "VariableDeclaration",
                  "scope": 4746,
                  "src": "1673:36:40",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4609,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1673:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 4667,
                    "nodeType": "Block",
                    "src": "2379:487:40",
                    "statements": [
                      {
                        "assignments": [
                          4619
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4619,
                            "mutability": "mutable",
                            "name": "hashedName",
                            "nodeType": "VariableDeclaration",
                            "scope": 4667,
                            "src": "2389:18:40",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4618,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "2389:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4626,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4623,
                                  "name": "name",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4613,
                                  "src": "2426:4:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 4622,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2420:5:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 4621,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2420:5:40",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4624,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2420:11:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4620,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "2410:9:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2410:22:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2389:43:40"
                      },
                      {
                        "assignments": [
                          4628
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4628,
                            "mutability": "mutable",
                            "name": "hashedVersion",
                            "nodeType": "VariableDeclaration",
                            "scope": 4667,
                            "src": "2442:21:40",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4627,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "2442:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4635,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4632,
                                  "name": "version",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4615,
                                  "src": "2482:7:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 4631,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2476:5:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 4630,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2476:5:40",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2476:14:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4629,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "2466:9:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2466:25:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2442:49:40"
                      },
                      {
                        "assignments": [
                          4637
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4637,
                            "mutability": "mutable",
                            "name": "typeHash",
                            "nodeType": "VariableDeclaration",
                            "scope": 4667,
                            "src": "2501:16:40",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4636,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "2501:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4641,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
                              "id": 4639,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2530:84:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
                                "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""
                              },
                              "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
                                "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""
                              }
                            ],
                            "id": 4638,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "2520:9:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4640,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2520:95:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2501:114:40"
                      },
                      {
                        "expression": {
                          "id": 4644,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4642,
                            "name": "_HASHED_NAME",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4606,
                            "src": "2625:12:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4643,
                            "name": "hashedName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4619,
                            "src": "2640:10:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2625:25:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 4645,
                        "nodeType": "ExpressionStatement",
                        "src": "2625:25:40"
                      },
                      {
                        "expression": {
                          "id": 4648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4646,
                            "name": "_HASHED_VERSION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4608,
                            "src": "2660:15:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4647,
                            "name": "hashedVersion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4628,
                            "src": "2678:13:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2660:31:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 4649,
                        "nodeType": "ExpressionStatement",
                        "src": "2660:31:40"
                      },
                      {
                        "expression": {
                          "id": 4653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4650,
                            "name": "_CACHED_CHAIN_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4604,
                            "src": "2701:16:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4651,
                              "name": "_getChainId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4745,
                              "src": "2720:11:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 4652,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2720:13:40",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2701:32:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4654,
                        "nodeType": "ExpressionStatement",
                        "src": "2701:32:40"
                      },
                      {
                        "expression": {
                          "id": 4661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4655,
                            "name": "_CACHED_DOMAIN_SEPARATOR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4602,
                            "src": "2743:24:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 4657,
                                "name": "typeHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4637,
                                "src": "2792:8:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 4658,
                                "name": "hashedName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4619,
                                "src": "2802:10:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 4659,
                                "name": "hashedVersion",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4628,
                                "src": "2814:13:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 4656,
                              "name": "_buildDomainSeparator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4717,
                              "src": "2770:21:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32,bytes32,bytes32) view returns (bytes32)"
                              }
                            },
                            "id": 4660,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2770:58:40",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2743:85:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 4662,
                        "nodeType": "ExpressionStatement",
                        "src": "2743:85:40"
                      },
                      {
                        "expression": {
                          "id": 4665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4663,
                            "name": "_TYPE_HASH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4610,
                            "src": "2838:10:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4664,
                            "name": "typeHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4637,
                            "src": "2851:8:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2838:21:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 4666,
                        "nodeType": "ExpressionStatement",
                        "src": "2838:21:40"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4611,
                    "nodeType": "StructuredDocumentation",
                    "src": "1760:559:40",
                    "text": " @dev Initializes the domain separator and parameter caches.\n The meaning of `name` and `version` is specified in\n https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n - `version`: the current major version of the signing domain.\n NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n contract upgrade]."
                  },
                  "id": 4668,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4616,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4613,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 4668,
                        "src": "2336:18:40",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4612,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2336:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4615,
                        "mutability": "mutable",
                        "name": "version",
                        "nodeType": "VariableDeclaration",
                        "scope": 4668,
                        "src": "2356:21:40",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4614,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2356:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2335:43:40"
                  },
                  "returnParameters": {
                    "id": 4617,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2379:0:40"
                  },
                  "scope": 4746,
                  "src": "2324:542:40",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4689,
                    "nodeType": "Block",
                    "src": "3022:213:40",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4677,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4674,
                              "name": "_getChainId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4745,
                              "src": "3036:11:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 4675,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3036:13:40",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4676,
                            "name": "_CACHED_CHAIN_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4604,
                            "src": "3053:16:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3036:33:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 4687,
                          "nodeType": "Block",
                          "src": "3133:96:40",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 4682,
                                    "name": "_TYPE_HASH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4610,
                                    "src": "3176:10:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "id": 4683,
                                    "name": "_HASHED_NAME",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4606,
                                    "src": "3188:12:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "id": 4684,
                                    "name": "_HASHED_VERSION",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4608,
                                    "src": "3202:15:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 4681,
                                  "name": "_buildDomainSeparator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4717,
                                  "src": "3154:21:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes32,bytes32,bytes32) view returns (bytes32)"
                                  }
                                },
                                "id": 4685,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3154:64:40",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "functionReturnParameters": 4673,
                              "id": 4686,
                              "nodeType": "Return",
                              "src": "3147:71:40"
                            }
                          ]
                        },
                        "id": 4688,
                        "nodeType": "IfStatement",
                        "src": "3032:197:40",
                        "trueBody": {
                          "id": 4680,
                          "nodeType": "Block",
                          "src": "3071:56:40",
                          "statements": [
                            {
                              "expression": {
                                "id": 4678,
                                "name": "_CACHED_DOMAIN_SEPARATOR",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4602,
                                "src": "3092:24:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "functionReturnParameters": 4673,
                              "id": 4679,
                              "nodeType": "Return",
                              "src": "3085:31:40"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4669,
                    "nodeType": "StructuredDocumentation",
                    "src": "2872:75:40",
                    "text": " @dev Returns the domain separator for the current chain."
                  },
                  "id": 4690,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_domainSeparatorV4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4670,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2979:2:40"
                  },
                  "returnParameters": {
                    "id": 4673,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4672,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4690,
                        "src": "3013:7:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4671,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3013:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3012:9:40"
                  },
                  "scope": 4746,
                  "src": "2952:283:40",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4716,
                    "nodeType": "Block",
                    "src": "3352:216:40",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4704,
                                  "name": "typeHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4692,
                                  "src": "3420:8:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 4705,
                                  "name": "name",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4694,
                                  "src": "3446:4:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 4706,
                                  "name": "version",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4696,
                                  "src": "3468:7:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 4707,
                                    "name": "_getChainId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4745,
                                    "src": "3493:11:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view returns (uint256)"
                                    }
                                  },
                                  "id": 4708,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3493:13:40",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 4711,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "3532:4:40",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_EIP712_$4746",
                                        "typeString": "contract EIP712"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_EIP712_$4746",
                                        "typeString": "contract EIP712"
                                      }
                                    ],
                                    "id": 4710,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3524:7:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4709,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3524:7:40",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 4712,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3524:13:40",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 4702,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "3392:3:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4703,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "3392:10:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 4713,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3392:159:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4701,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "3369:9:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4714,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3369:192:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 4700,
                        "id": 4715,
                        "nodeType": "Return",
                        "src": "3362:199:40"
                      }
                    ]
                  },
                  "id": 4717,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_buildDomainSeparator",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4697,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4692,
                        "mutability": "mutable",
                        "name": "typeHash",
                        "nodeType": "VariableDeclaration",
                        "scope": 4717,
                        "src": "3272:16:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4691,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3272:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4694,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 4717,
                        "src": "3290:12:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4693,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3290:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4696,
                        "mutability": "mutable",
                        "name": "version",
                        "nodeType": "VariableDeclaration",
                        "scope": 4717,
                        "src": "3304:15:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4695,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3304:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3271:49:40"
                  },
                  "returnParameters": {
                    "id": 4700,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4699,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4717,
                        "src": "3343:7:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4698,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3343:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3342:9:40"
                  },
                  "scope": 4746,
                  "src": "3241:327:40",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 4735,
                    "nodeType": "Block",
                    "src": "4279:97:40",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "1901",
                                  "id": 4728,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4323:10:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                    "typeString": "literal_string hex\"1901\""
                                  },
                                  "value": "\u0019\u0001"
                                },
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 4729,
                                    "name": "_domainSeparatorV4",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4690,
                                    "src": "4335:18:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                                      "typeString": "function () view returns (bytes32)"
                                    }
                                  },
                                  "id": 4730,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4335:20:40",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 4731,
                                  "name": "structHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4720,
                                  "src": "4357:10:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                    "typeString": "literal_string hex\"1901\""
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 4726,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "4306:3:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4727,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "4306:16:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 4732,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4306:62:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4725,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "4296:9:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4296:73:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 4724,
                        "id": 4734,
                        "nodeType": "Return",
                        "src": "4289:80:40"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4718,
                    "nodeType": "StructuredDocumentation",
                    "src": "3574:614:40",
                    "text": " @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n function returns the hash of the fully encoded EIP712 message for this domain.\n This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n ```solidity\n bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n     keccak256(\"Mail(address to,string contents)\"),\n     mailTo,\n     keccak256(bytes(mailContents))\n )));\n address signer = ECDSA.recover(digest, signature);\n ```"
                  },
                  "id": 4736,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_hashTypedDataV4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4721,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4720,
                        "mutability": "mutable",
                        "name": "structHash",
                        "nodeType": "VariableDeclaration",
                        "scope": 4736,
                        "src": "4219:18:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4719,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4219:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4218:20:40"
                  },
                  "returnParameters": {
                    "id": 4724,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4723,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4736,
                        "src": "4270:7:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4722,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4270:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4269:9:40"
                  },
                  "scope": 4746,
                  "src": "4193:183:40",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4744,
                    "nodeType": "Block",
                    "src": "4444:258:40",
                    "statements": [
                      {
                        "expression": {
                          "id": 4741,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "4454:4:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_EIP712_$4746",
                            "typeString": "contract EIP712"
                          }
                        },
                        "id": 4742,
                        "nodeType": "ExpressionStatement",
                        "src": "4454:4:40"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4652:44:40",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4666:20:40",
                              "value": {
                                "arguments": [],
                                "functionName": {
                                  "name": "chainid",
                                  "nodeType": "YulIdentifier",
                                  "src": "4677:7:40"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4677:9:40"
                              },
                              "variableNames": [
                                {
                                  "name": "chainId",
                                  "nodeType": "YulIdentifier",
                                  "src": "4666:7:40"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 4739,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4666:7:40",
                            "valueSize": 1
                          }
                        ],
                        "id": 4743,
                        "nodeType": "InlineAssembly",
                        "src": "4643:53:40"
                      }
                    ]
                  },
                  "id": 4745,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getChainId",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4737,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4402:2:40"
                  },
                  "returnParameters": {
                    "id": 4740,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4739,
                        "mutability": "mutable",
                        "name": "chainId",
                        "nodeType": "VariableDeclaration",
                        "scope": 4745,
                        "src": "4427:15:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4738,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4427:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4426:17:40"
                  },
                  "scope": 4746,
                  "src": "4382:320:40",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 4747,
              "src": "1209:3495:40"
            }
          ],
          "src": "33:4672:40"
        },
        "id": 40
      },
      "@openzeppelin/contracts/drafts/ERC20Permit.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/drafts/ERC20Permit.sol",
          "exportedSymbols": {
            "Context": [
              6073
            ],
            "Counters": [
              6123
            ],
            "ECDSA": [
              4597
            ],
            "EIP712": [
              4746
            ],
            "ERC20": [
              5798
            ],
            "ERC20Permit": [
              4892
            ],
            "IERC20": [
              5876
            ],
            "IERC20Permit": [
              4928
            ],
            "SafeMath": [
              5295
            ]
          },
          "id": 4893,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4748,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".5",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:31:41"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "file": "../token/ERC20/ERC20.sol",
              "id": 4749,
              "nodeType": "ImportDirective",
              "scope": 4893,
              "sourceUnit": 5799,
              "src": "66:34:41",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/drafts/IERC20Permit.sol",
              "file": "./IERC20Permit.sol",
              "id": 4750,
              "nodeType": "ImportDirective",
              "scope": 4893,
              "sourceUnit": 4929,
              "src": "101:28:41",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/cryptography/ECDSA.sol",
              "file": "../cryptography/ECDSA.sol",
              "id": 4751,
              "nodeType": "ImportDirective",
              "scope": 4893,
              "sourceUnit": 4598,
              "src": "130:35:41",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
              "file": "../utils/Counters.sol",
              "id": 4752,
              "nodeType": "ImportDirective",
              "scope": 4893,
              "sourceUnit": 6124,
              "src": "166:31:41",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/drafts/EIP712.sol",
              "file": "./EIP712.sol",
              "id": 4753,
              "nodeType": "ImportDirective",
              "scope": 4893,
              "sourceUnit": 4747,
              "src": "198:22:41",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 4755,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5798,
                    "src": "773:5:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$5798",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 4756,
                  "nodeType": "InheritanceSpecifier",
                  "src": "773:5:41"
                },
                {
                  "baseName": {
                    "id": 4757,
                    "name": "IERC20Permit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4928,
                    "src": "780:12:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Permit_$4928",
                      "typeString": "contract IERC20Permit"
                    }
                  },
                  "id": 4758,
                  "nodeType": "InheritanceSpecifier",
                  "src": "780:12:41"
                },
                {
                  "baseName": {
                    "id": 4759,
                    "name": "EIP712",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4746,
                    "src": "794:6:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EIP712_$4746",
                      "typeString": "contract EIP712"
                    }
                  },
                  "id": 4760,
                  "nodeType": "InheritanceSpecifier",
                  "src": "794:6:41"
                }
              ],
              "contractDependencies": [
                4746,
                4928,
                5798,
                5876,
                6073
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 4754,
                "nodeType": "StructuredDocumentation",
                "src": "222:517:41",
                "text": " @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n _Available since v3.4._"
              },
              "fullyImplemented": false,
              "id": 4892,
              "linearizedBaseContracts": [
                4892,
                4746,
                4928,
                5798,
                5876,
                6073
              ],
              "name": "ERC20Permit",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 4763,
                  "libraryName": {
                    "id": 4761,
                    "name": "Counters",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6123,
                    "src": "813:8:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Counters_$6123",
                      "typeString": "library Counters"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "807:36:41",
                  "typeName": {
                    "id": 4762,
                    "name": "Counters.Counter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6083,
                    "src": "826:16:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                      "typeString": "struct Counters.Counter"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 4767,
                  "mutability": "mutable",
                  "name": "_nonces",
                  "nodeType": "VariableDeclaration",
                  "scope": 4892,
                  "src": "849:53:41",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Counter_$6083_storage_$",
                    "typeString": "mapping(address => struct Counters.Counter)"
                  },
                  "typeName": {
                    "id": 4766,
                    "keyType": {
                      "id": 4764,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "858:7:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "849:37:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Counter_$6083_storage_$",
                      "typeString": "mapping(address => struct Counters.Counter)"
                    },
                    "valueType": {
                      "id": 4765,
                      "name": "Counters.Counter",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 6083,
                      "src": "869:16:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                        "typeString": "struct Counters.Counter"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 4772,
                  "mutability": "immutable",
                  "name": "_PERMIT_TYPEHASH",
                  "nodeType": "VariableDeclaration",
                  "scope": 4892,
                  "src": "961:140:41",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4768,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "961:7:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "arguments": [
                      {
                        "hexValue": "5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529",
                        "id": 4770,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1016:84:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9",
                          "typeString": "literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""
                        },
                        "value": "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9",
                          "typeString": "literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""
                        }
                      ],
                      "id": 4769,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "1006:9:41",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 4771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1006:95:41",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 4782,
                    "nodeType": "Block",
                    "src": "1383:7:41",
                    "statements": []
                  },
                  "documentation": {
                    "id": 4773,
                    "nodeType": "StructuredDocumentation",
                    "src": "1108:220:41",
                    "text": " @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\"1\"`.\n It's a good idea to use the same `name` that is defined as the ERC20 token name."
                  },
                  "id": 4783,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 4778,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4775,
                          "src": "1372:4:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "hexValue": "31",
                          "id": 4779,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1378:3:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6",
                            "typeString": "literal_string \"1\""
                          },
                          "value": "1"
                        }
                      ],
                      "id": 4780,
                      "modifierName": {
                        "id": 4777,
                        "name": "EIP712",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4746,
                        "src": "1365:6:41",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_EIP712_$4746_$",
                          "typeString": "type(contract EIP712)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1365:17:41"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4776,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4775,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 4783,
                        "src": "1345:18:41",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4774,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1345:6:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1344:20:41"
                  },
                  "returnParameters": {
                    "id": 4781,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1383:0:41"
                  },
                  "scope": 4892,
                  "src": "1333:57:41",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    4913
                  ],
                  "body": {
                    "id": 4863,
                    "nodeType": "Block",
                    "src": "1587:658:41",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4806,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 4803,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "1659:5:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 4804,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "1659:15:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 4805,
                                "name": "deadline",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4792,
                                "src": "1678:8:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1659:27:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332305065726d69743a206578706972656420646561646c696e65",
                              "id": 4807,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1688:31:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd",
                                "typeString": "literal_string \"ERC20Permit: expired deadline\""
                              },
                              "value": "ERC20Permit: expired deadline"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd",
                                "typeString": "literal_string \"ERC20Permit: expired deadline\""
                              }
                            ],
                            "id": 4802,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1651:7:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4808,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1651:69:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4809,
                        "nodeType": "ExpressionStatement",
                        "src": "1651:69:41"
                      },
                      {
                        "assignments": [
                          4811
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4811,
                            "mutability": "mutable",
                            "name": "structHash",
                            "nodeType": "VariableDeclaration",
                            "scope": 4863,
                            "src": "1731:18:41",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4810,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1731:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4827,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4815,
                                  "name": "_PERMIT_TYPEHASH",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4772,
                                  "src": "1803:16:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 4816,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4786,
                                  "src": "1837:5:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4817,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4788,
                                  "src": "1860:7:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4818,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4790,
                                  "src": "1885:5:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "baseExpression": {
                                        "id": 4819,
                                        "name": "_nonces",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4767,
                                        "src": "1908:7:41",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Counter_$6083_storage_$",
                                          "typeString": "mapping(address => struct Counters.Counter storage ref)"
                                        }
                                      },
                                      "id": 4821,
                                      "indexExpression": {
                                        "id": 4820,
                                        "name": "owner",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4786,
                                        "src": "1916:5:41",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "1908:14:41",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Counter_$6083_storage",
                                        "typeString": "struct Counters.Counter storage ref"
                                      }
                                    },
                                    "id": 4822,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "current",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6094,
                                    "src": "1908:22:41",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$6083_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$6083_storage_ptr_$",
                                      "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                                    }
                                  },
                                  "id": 4823,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1908:24:41",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 4824,
                                  "name": "deadline",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4792,
                                  "src": "1950:8:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 4813,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1775:3:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4814,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "1775:10:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 4825,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1775:197:41",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4812,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "1752:9:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4826,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1752:230:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1731:251:41"
                      },
                      {
                        "assignments": [
                          4829
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4829,
                            "mutability": "mutable",
                            "name": "hash",
                            "nodeType": "VariableDeclaration",
                            "scope": 4863,
                            "src": "1993:12:41",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4828,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1993:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4833,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4831,
                              "name": "structHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4811,
                              "src": "2025:10:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 4830,
                            "name": "_hashTypedDataV4",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4736,
                            "src": "2008:16:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32) view returns (bytes32)"
                            }
                          },
                          "id": 4832,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2008:28:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1993:43:41"
                      },
                      {
                        "assignments": [
                          4835
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4835,
                            "mutability": "mutable",
                            "name": "signer",
                            "nodeType": "VariableDeclaration",
                            "scope": 4863,
                            "src": "2047:14:41",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 4834,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2047:7:41",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4843,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4838,
                              "name": "hash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4829,
                              "src": "2078:4:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 4839,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4794,
                              "src": "2084:1:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 4840,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4796,
                              "src": "2087:1:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 4841,
                              "name": "s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4798,
                              "src": "2090:1:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 4836,
                              "name": "ECDSA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4597,
                              "src": "2064:5:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ECDSA_$4597_$",
                                "typeString": "type(library ECDSA)"
                              }
                            },
                            "id": 4837,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recover",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4579,
                            "src": "2064:13:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                            }
                          },
                          "id": 4842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2064:28:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2047:45:41"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 4847,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4845,
                                "name": "signer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4835,
                                "src": "2110:6:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 4846,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4786,
                                "src": "2120:5:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2110:15:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332305065726d69743a20696e76616c6964207369676e6174757265",
                              "id": 4848,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2127:32:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124",
                                "typeString": "literal_string \"ERC20Permit: invalid signature\""
                              },
                              "value": "ERC20Permit: invalid signature"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124",
                                "typeString": "literal_string \"ERC20Permit: invalid signature\""
                              }
                            ],
                            "id": 4844,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2102:7:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2102:58:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4850,
                        "nodeType": "ExpressionStatement",
                        "src": "2102:58:41"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "baseExpression": {
                                "id": 4851,
                                "name": "_nonces",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4767,
                                "src": "2171:7:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Counter_$6083_storage_$",
                                  "typeString": "mapping(address => struct Counters.Counter storage ref)"
                                }
                              },
                              "id": 4853,
                              "indexExpression": {
                                "id": 4852,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4786,
                                "src": "2179:5:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2171:14:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Counter_$6083_storage",
                                "typeString": "struct Counters.Counter storage ref"
                              }
                            },
                            "id": 4854,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "increment",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6106,
                            "src": "2171:24:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$6083_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$6083_storage_ptr_$",
                              "typeString": "function (struct Counters.Counter storage pointer)"
                            }
                          },
                          "id": 4855,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2171:26:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4856,
                        "nodeType": "ExpressionStatement",
                        "src": "2171:26:41"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4858,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4786,
                              "src": "2216:5:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4859,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4788,
                              "src": "2223:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4860,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4790,
                              "src": "2232:5:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4857,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5775,
                            "src": "2207:8:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 4861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2207:31:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4862,
                        "nodeType": "ExpressionStatement",
                        "src": "2207:31:41"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4784,
                    "nodeType": "StructuredDocumentation",
                    "src": "1396:50:41",
                    "text": " @dev See {IERC20Permit-permit}."
                  },
                  "functionSelector": "d505accf",
                  "id": 4864,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "permit",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4800,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1578:8:41"
                  },
                  "parameters": {
                    "id": 4799,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4786,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 4864,
                        "src": "1467:13:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4785,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1467:7:41",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4788,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4864,
                        "src": "1482:15:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4787,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1482:7:41",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4790,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4864,
                        "src": "1499:13:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4789,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1499:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4792,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nodeType": "VariableDeclaration",
                        "scope": 4864,
                        "src": "1514:16:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4791,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1514:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4794,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 4864,
                        "src": "1532:7:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4793,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1532:5:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4796,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 4864,
                        "src": "1541:9:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4795,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1541:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4798,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 4864,
                        "src": "1552:9:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4797,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1552:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1466:96:41"
                  },
                  "returnParameters": {
                    "id": 4801,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1587:0:41"
                  },
                  "scope": 4892,
                  "src": "1451:794:41",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    4921
                  ],
                  "body": {
                    "id": 4879,
                    "nodeType": "Block",
                    "src": "2376:48:41",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "baseExpression": {
                                "id": 4873,
                                "name": "_nonces",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4767,
                                "src": "2393:7:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Counter_$6083_storage_$",
                                  "typeString": "mapping(address => struct Counters.Counter storage ref)"
                                }
                              },
                              "id": 4875,
                              "indexExpression": {
                                "id": 4874,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4867,
                                "src": "2401:5:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2393:14:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Counter_$6083_storage",
                                "typeString": "struct Counters.Counter storage ref"
                              }
                            },
                            "id": 4876,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "current",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6094,
                            "src": "2393:22:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$6083_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$6083_storage_ptr_$",
                              "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 4877,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2393:24:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4872,
                        "id": 4878,
                        "nodeType": "Return",
                        "src": "2386:31:41"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4865,
                    "nodeType": "StructuredDocumentation",
                    "src": "2251:50:41",
                    "text": " @dev See {IERC20Permit-nonces}."
                  },
                  "functionSelector": "7ecebe00",
                  "id": 4880,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "nonces",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4869,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2349:8:41"
                  },
                  "parameters": {
                    "id": 4868,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4867,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 4880,
                        "src": "2322:13:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4866,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2322:7:41",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2321:15:41"
                  },
                  "returnParameters": {
                    "id": 4872,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4871,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4880,
                        "src": "2367:7:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4870,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2367:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2366:9:41"
                  },
                  "scope": 4892,
                  "src": "2306:118:41",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    4927
                  ],
                  "body": {
                    "id": 4890,
                    "nodeType": "Block",
                    "src": "2617:44:41",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4887,
                            "name": "_domainSeparatorV4",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4690,
                            "src": "2634:18:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                              "typeString": "function () view returns (bytes32)"
                            }
                          },
                          "id": 4888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2634:20:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 4886,
                        "id": 4889,
                        "nodeType": "Return",
                        "src": "2627:27:41"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4881,
                    "nodeType": "StructuredDocumentation",
                    "src": "2430:60:41",
                    "text": " @dev See {IERC20Permit-DOMAIN_SEPARATOR}."
                  },
                  "functionSelector": "3644e515",
                  "id": 4891,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "DOMAIN_SEPARATOR",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4883,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2590:8:41"
                  },
                  "parameters": {
                    "id": 4882,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2573:2:41"
                  },
                  "returnParameters": {
                    "id": 4886,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4885,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4891,
                        "src": "2608:7:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4884,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2608:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2607:9:41"
                  },
                  "scope": 4892,
                  "src": "2548:113:41",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 4893,
              "src": "740:1923:41"
            }
          ],
          "src": "33:2631:41"
        },
        "id": 41
      },
      "@openzeppelin/contracts/drafts/IERC20Permit.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/drafts/IERC20Permit.sol",
          "exportedSymbols": {
            "IERC20Permit": [
              4928
            ]
          },
          "id": 4929,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4894,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".0",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:31:42"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 4895,
                "nodeType": "StructuredDocumentation",
                "src": "66:482:42",
                "text": " @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all."
              },
              "fullyImplemented": false,
              "id": 4928,
              "linearizedBaseContracts": [
                4928
              ],
              "name": "IERC20Permit",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 4896,
                    "nodeType": "StructuredDocumentation",
                    "src": "578:788:42",
                    "text": " @dev Sets `value` as the allowance of `spender` over `owner`'s tokens,\n given `owner`'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section]."
                  },
                  "functionSelector": "d505accf",
                  "id": 4913,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "permit",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4911,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4898,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 4913,
                        "src": "1387:13:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4897,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1387:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4900,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 4913,
                        "src": "1402:15:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4899,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1402:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4902,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 4913,
                        "src": "1419:13:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4901,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1419:7:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4904,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nodeType": "VariableDeclaration",
                        "scope": 4913,
                        "src": "1434:16:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4903,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1434:7:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4906,
                        "mutability": "mutable",
                        "name": "v",
                        "nodeType": "VariableDeclaration",
                        "scope": 4913,
                        "src": "1452:7:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4905,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1452:5:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4908,
                        "mutability": "mutable",
                        "name": "r",
                        "nodeType": "VariableDeclaration",
                        "scope": 4913,
                        "src": "1461:9:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4907,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1461:7:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4910,
                        "mutability": "mutable",
                        "name": "s",
                        "nodeType": "VariableDeclaration",
                        "scope": 4913,
                        "src": "1472:9:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4909,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1472:7:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1386:96:42"
                  },
                  "returnParameters": {
                    "id": 4912,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1491:0:42"
                  },
                  "scope": 4928,
                  "src": "1371:121:42",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 4914,
                    "nodeType": "StructuredDocumentation",
                    "src": "1498:294:42",
                    "text": " @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."
                  },
                  "functionSelector": "7ecebe00",
                  "id": 4921,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "nonces",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4917,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4916,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 4921,
                        "src": "1813:13:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4915,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1813:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1812:15:42"
                  },
                  "returnParameters": {
                    "id": 4920,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4919,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4921,
                        "src": "1851:7:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4918,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1851:7:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1850:9:42"
                  },
                  "scope": 4928,
                  "src": "1797:63:42",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 4922,
                    "nodeType": "StructuredDocumentation",
                    "src": "1866:128:42",
                    "text": " @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}."
                  },
                  "functionSelector": "3644e515",
                  "id": 4927,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "DOMAIN_SEPARATOR",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4923,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2077:2:42"
                  },
                  "returnParameters": {
                    "id": 4926,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4925,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4927,
                        "src": "2103:7:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4924,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2103:7:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2102:9:42"
                  },
                  "scope": 4928,
                  "src": "2052:60:42",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 4929,
              "src": "549:1565:42"
            }
          ],
          "src": "33:2082:42"
        },
        "id": 42
      },
      "@openzeppelin/contracts/introspection/IERC165.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/introspection/IERC165.sol",
          "exportedSymbols": {
            "IERC165": [
              4940
            ]
          },
          "id": 4941,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4930,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:43"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 4931,
                "nodeType": "StructuredDocumentation",
                "src": "58:279:43",
                "text": " @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[EIP].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."
              },
              "fullyImplemented": false,
              "id": 4940,
              "linearizedBaseContracts": [
                4940
              ],
              "name": "IERC165",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 4932,
                    "nodeType": "StructuredDocumentation",
                    "src": "362:340:43",
                    "text": " @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 4939,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4935,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4934,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nodeType": "VariableDeclaration",
                        "scope": 4939,
                        "src": "734:18:43",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 4933,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "734:6:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "733:20:43"
                  },
                  "returnParameters": {
                    "id": 4938,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4937,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4939,
                        "src": "777:4:43",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4936,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "777:4:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "776:6:43"
                  },
                  "scope": 4940,
                  "src": "707:76:43",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 4941,
              "src": "338:447:43"
            }
          ],
          "src": "33:753:43"
        },
        "id": 43
      },
      "@openzeppelin/contracts/math/SafeMath.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
          "exportedSymbols": {
            "SafeMath": [
              5295
            ]
          },
          "id": 5296,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4942,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:44"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4943,
                "nodeType": "StructuredDocumentation",
                "src": "58:563:44",
                "text": " @dev Wrappers over Solidity's arithmetic operations with added overflow\n checks.\n Arithmetic operations in Solidity wrap on overflow. This can easily result\n in bugs, because programmers usually assume that an overflow raises an\n error, which is the standard behavior in high level programming languages.\n `SafeMath` restores this intuition by reverting the transaction when an\n operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."
              },
              "fullyImplemented": true,
              "id": 5295,
              "linearizedBaseContracts": [
                5295
              ],
              "name": "SafeMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4973,
                    "nodeType": "Block",
                    "src": "857:98:44",
                    "statements": [
                      {
                        "assignments": [
                          4956
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4956,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 4973,
                            "src": "867:9:44",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4955,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "867:7:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4960,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4957,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4946,
                            "src": "879:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 4958,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4948,
                            "src": "883:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "879:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "867:17:44"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4963,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4961,
                            "name": "c",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4956,
                            "src": "898:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4962,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4946,
                            "src": "902:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "898:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4968,
                        "nodeType": "IfStatement",
                        "src": "894:28:44",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 4964,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "913:5:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 4965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "920:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 4966,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "912:10:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 4954,
                          "id": 4967,
                          "nodeType": "Return",
                          "src": "905:17:44"
                        }
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "hexValue": "74727565",
                              "id": 4969,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "940:4:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "id": 4970,
                              "name": "c",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4956,
                              "src": "946:1:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4971,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "939:9:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 4954,
                        "id": 4972,
                        "nodeType": "Return",
                        "src": "932:16:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4944,
                    "nodeType": "StructuredDocumentation",
                    "src": "645:131:44",
                    "text": " @dev Returns the addition of two unsigned integers, with an overflow flag.\n _Available since v3.4._"
                  },
                  "id": 4974,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryAdd",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4949,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4946,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 4974,
                        "src": "797:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4945,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "797:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4948,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 4974,
                        "src": "808:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4947,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "808:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "796:22:44"
                  },
                  "returnParameters": {
                    "id": 4954,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4951,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4974,
                        "src": "842:4:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4950,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "842:4:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4953,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 4974,
                        "src": "848:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4952,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "848:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "841:15:44"
                  },
                  "scope": 5295,
                  "src": "781:174:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5000,
                    "nodeType": "Block",
                    "src": "1177:75:44",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4986,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4979,
                            "src": "1191:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 4987,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4977,
                            "src": "1195:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1191:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4993,
                        "nodeType": "IfStatement",
                        "src": "1187:28:44",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 4989,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1206:5:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 4990,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1213:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 4991,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1205:10:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 4985,
                          "id": 4992,
                          "nodeType": "Return",
                          "src": "1198:17:44"
                        }
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "hexValue": "74727565",
                              "id": 4994,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1233:4:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4997,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4995,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4977,
                                "src": "1239:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "id": 4996,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4979,
                                "src": "1243:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1239:5:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4998,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1232:13:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 4985,
                        "id": 4999,
                        "nodeType": "Return",
                        "src": "1225:20:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4975,
                    "nodeType": "StructuredDocumentation",
                    "src": "961:135:44",
                    "text": " @dev Returns the substraction of two unsigned integers, with an overflow flag.\n _Available since v3.4._"
                  },
                  "id": 5001,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "trySub",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4980,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4977,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5001,
                        "src": "1117:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4976,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1117:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4979,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5001,
                        "src": "1128:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4978,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1128:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1116:22:44"
                  },
                  "returnParameters": {
                    "id": 4985,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4982,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5001,
                        "src": "1162:4:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4981,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1162:4:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4984,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5001,
                        "src": "1168:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4983,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1168:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1161:15:44"
                  },
                  "scope": 5295,
                  "src": "1101:151:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5041,
                    "nodeType": "Block",
                    "src": "1476:359:44",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5013,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5004,
                            "src": "1708:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 5014,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1713:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1708:6:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5020,
                        "nodeType": "IfStatement",
                        "src": "1704:28:44",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "74727565",
                                "id": 5016,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1724:4:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              {
                                "hexValue": "30",
                                "id": 5017,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1730:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 5018,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1723:9:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 5012,
                          "id": 5019,
                          "nodeType": "Return",
                          "src": "1716:16:44"
                        }
                      },
                      {
                        "assignments": [
                          5022
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5022,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 5041,
                            "src": "1742:9:44",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5021,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1742:7:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5026,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5023,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5004,
                            "src": "1754:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 5024,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5006,
                            "src": "1758:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1754:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1742:17:44"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5029,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5027,
                              "name": "c",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5022,
                              "src": "1773:1:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "id": 5028,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5004,
                              "src": "1777:1:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1773:5:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 5030,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5006,
                            "src": "1782:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1773:10:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5036,
                        "nodeType": "IfStatement",
                        "src": "1769:33:44",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 5032,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1793:5:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 5033,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1800:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 5034,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1792:10:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 5012,
                          "id": 5035,
                          "nodeType": "Return",
                          "src": "1785:17:44"
                        }
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "hexValue": "74727565",
                              "id": 5037,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1820:4:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "id": 5038,
                              "name": "c",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5022,
                              "src": "1826:1:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 5039,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1819:9:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 5012,
                        "id": 5040,
                        "nodeType": "Return",
                        "src": "1812:16:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5002,
                    "nodeType": "StructuredDocumentation",
                    "src": "1258:137:44",
                    "text": " @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n _Available since v3.4._"
                  },
                  "id": 5042,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryMul",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5007,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5004,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5042,
                        "src": "1416:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5003,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1416:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5006,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5042,
                        "src": "1427:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5005,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1427:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1415:22:44"
                  },
                  "returnParameters": {
                    "id": 5012,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5009,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5042,
                        "src": "1461:4:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5008,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1461:4:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5011,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5042,
                        "src": "1467:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5010,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1467:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1460:15:44"
                  },
                  "scope": 5295,
                  "src": "1400:435:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5068,
                    "nodeType": "Block",
                    "src": "2060:76:44",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5056,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5054,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5047,
                            "src": "2074:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 5055,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2079:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2074:6:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5061,
                        "nodeType": "IfStatement",
                        "src": "2070:29:44",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 5057,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2090:5:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 5058,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2097:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 5059,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "2089:10:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 5053,
                          "id": 5060,
                          "nodeType": "Return",
                          "src": "2082:17:44"
                        }
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "hexValue": "74727565",
                              "id": 5062,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2117:4:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5065,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5063,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5045,
                                "src": "2123:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "id": 5064,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5047,
                                "src": "2127:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2123:5:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 5066,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2116:13:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 5053,
                        "id": 5067,
                        "nodeType": "Return",
                        "src": "2109:20:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5043,
                    "nodeType": "StructuredDocumentation",
                    "src": "1841:138:44",
                    "text": " @dev Returns the division of two unsigned integers, with a division by zero flag.\n _Available since v3.4._"
                  },
                  "id": 5069,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryDiv",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5048,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5045,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5069,
                        "src": "2000:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5044,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2000:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5047,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5069,
                        "src": "2011:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5046,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2011:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1999:22:44"
                  },
                  "returnParameters": {
                    "id": 5053,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5050,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5069,
                        "src": "2045:4:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5049,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2045:4:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5052,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5069,
                        "src": "2051:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5051,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2051:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2044:15:44"
                  },
                  "scope": 5295,
                  "src": "1984:152:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5095,
                    "nodeType": "Block",
                    "src": "2371:76:44",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5081,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5074,
                            "src": "2385:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 5082,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2390:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2385:6:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5088,
                        "nodeType": "IfStatement",
                        "src": "2381:29:44",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 5084,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2401:5:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 5085,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2408:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 5086,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "2400:10:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 5080,
                          "id": 5087,
                          "nodeType": "Return",
                          "src": "2393:17:44"
                        }
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "hexValue": "74727565",
                              "id": 5089,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2428:4:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5092,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5090,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5072,
                                "src": "2434:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "%",
                              "rightExpression": {
                                "id": 5091,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5074,
                                "src": "2438:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2434:5:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 5093,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2427:13:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 5080,
                        "id": 5094,
                        "nodeType": "Return",
                        "src": "2420:20:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5070,
                    "nodeType": "StructuredDocumentation",
                    "src": "2142:148:44",
                    "text": " @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n _Available since v3.4._"
                  },
                  "id": 5096,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryMod",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5075,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5072,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5096,
                        "src": "2311:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5071,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2311:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5074,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5096,
                        "src": "2322:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5073,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2322:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2310:22:44"
                  },
                  "returnParameters": {
                    "id": 5080,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5077,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5096,
                        "src": "2356:4:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5076,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2356:4:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5079,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5096,
                        "src": "2362:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5078,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2362:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2355:15:44"
                  },
                  "scope": 5295,
                  "src": "2295:152:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5121,
                    "nodeType": "Block",
                    "src": "2749:108:44",
                    "statements": [
                      {
                        "assignments": [
                          5107
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5107,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 5121,
                            "src": "2759:9:44",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5106,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2759:7:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5111,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5110,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5108,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5099,
                            "src": "2771:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 5109,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5101,
                            "src": "2775:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2771:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2759:17:44"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5113,
                                "name": "c",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5107,
                                "src": "2794:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 5114,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5099,
                                "src": "2799:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2794:6:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "536166654d6174683a206164646974696f6e206f766572666c6f77",
                              "id": 5116,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2802:29:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a",
                                "typeString": "literal_string \"SafeMath: addition overflow\""
                              },
                              "value": "SafeMath: addition overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a",
                                "typeString": "literal_string \"SafeMath: addition overflow\""
                              }
                            ],
                            "id": 5112,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2786:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5117,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2786:46:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5118,
                        "nodeType": "ExpressionStatement",
                        "src": "2786:46:44"
                      },
                      {
                        "expression": {
                          "id": 5119,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5107,
                          "src": "2849:1:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5105,
                        "id": 5120,
                        "nodeType": "Return",
                        "src": "2842:8:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5097,
                    "nodeType": "StructuredDocumentation",
                    "src": "2453:224:44",
                    "text": " @dev Returns the addition of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `+` operator.\n Requirements:\n - Addition cannot overflow."
                  },
                  "id": 5122,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5102,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5099,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5122,
                        "src": "2695:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5098,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2695:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5101,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5122,
                        "src": "2706:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5100,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2706:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2694:22:44"
                  },
                  "returnParameters": {
                    "id": 5105,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5104,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5122,
                        "src": "2740:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5103,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2740:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2739:9:44"
                  },
                  "scope": 5295,
                  "src": "2682:175:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5143,
                    "nodeType": "Block",
                    "src": "3195:88:44",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5135,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5133,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5127,
                                "src": "3213:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 5134,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5125,
                                "src": "3218:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3213:6:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "536166654d6174683a207375627472616374696f6e206f766572666c6f77",
                              "id": 5136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3221:32:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862",
                                "typeString": "literal_string \"SafeMath: subtraction overflow\""
                              },
                              "value": "SafeMath: subtraction overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862",
                                "typeString": "literal_string \"SafeMath: subtraction overflow\""
                              }
                            ],
                            "id": 5132,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3205:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3205:49:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5138,
                        "nodeType": "ExpressionStatement",
                        "src": "3205:49:44"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5141,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5139,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5125,
                            "src": "3271:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 5140,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5127,
                            "src": "3275:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3271:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5131,
                        "id": 5142,
                        "nodeType": "Return",
                        "src": "3264:12:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5123,
                    "nodeType": "StructuredDocumentation",
                    "src": "2863:260:44",
                    "text": " @dev Returns the subtraction of two unsigned integers, reverting on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."
                  },
                  "id": 5144,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5128,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5125,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5144,
                        "src": "3141:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5124,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3141:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5127,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5144,
                        "src": "3152:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5126,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3152:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3140:22:44"
                  },
                  "returnParameters": {
                    "id": 5131,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5130,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5144,
                        "src": "3186:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5129,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3186:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3185:9:44"
                  },
                  "scope": 5295,
                  "src": "3128:155:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5177,
                    "nodeType": "Block",
                    "src": "3597:148:44",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5154,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5147,
                            "src": "3611:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 5155,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3616:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3611:6:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5159,
                        "nodeType": "IfStatement",
                        "src": "3607:20:44",
                        "trueBody": {
                          "expression": {
                            "hexValue": "30",
                            "id": 5157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3626:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "functionReturnParameters": 5153,
                          "id": 5158,
                          "nodeType": "Return",
                          "src": "3619:8:44"
                        }
                      },
                      {
                        "assignments": [
                          5161
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5161,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 5177,
                            "src": "3637:9:44",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5160,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3637:7:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5165,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5164,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5162,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5147,
                            "src": "3649:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 5163,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5149,
                            "src": "3653:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3649:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3637:17:44"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5171,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5169,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5167,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5161,
                                  "src": "3672:1:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "id": 5168,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5147,
                                  "src": "3676:1:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3672:5:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 5170,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5149,
                                "src": "3681:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3672:10:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77",
                              "id": 5172,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3684:35:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3",
                                "typeString": "literal_string \"SafeMath: multiplication overflow\""
                              },
                              "value": "SafeMath: multiplication overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3",
                                "typeString": "literal_string \"SafeMath: multiplication overflow\""
                              }
                            ],
                            "id": 5166,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3664:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3664:56:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5174,
                        "nodeType": "ExpressionStatement",
                        "src": "3664:56:44"
                      },
                      {
                        "expression": {
                          "id": 5175,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5161,
                          "src": "3737:1:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5153,
                        "id": 5176,
                        "nodeType": "Return",
                        "src": "3730:8:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5145,
                    "nodeType": "StructuredDocumentation",
                    "src": "3289:236:44",
                    "text": " @dev Returns the multiplication of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `*` operator.\n Requirements:\n - Multiplication cannot overflow."
                  },
                  "id": 5178,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5150,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5147,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5178,
                        "src": "3543:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5146,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3543:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5149,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5178,
                        "src": "3554:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5148,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3554:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3542:22:44"
                  },
                  "returnParameters": {
                    "id": 5153,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5152,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5178,
                        "src": "3588:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5151,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3588:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3587:9:44"
                  },
                  "scope": 5295,
                  "src": "3530:215:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5199,
                    "nodeType": "Block",
                    "src": "4276:83:44",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5189,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5183,
                                "src": "4294:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 5190,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4298:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "4294:5:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "536166654d6174683a206469766973696f6e206279207a65726f",
                              "id": 5192,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4301:28:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f",
                                "typeString": "literal_string \"SafeMath: division by zero\""
                              },
                              "value": "SafeMath: division by zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f",
                                "typeString": "literal_string \"SafeMath: division by zero\""
                              }
                            ],
                            "id": 5188,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4286:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4286:44:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5194,
                        "nodeType": "ExpressionStatement",
                        "src": "4286:44:44"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5197,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5195,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5181,
                            "src": "4347:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "id": 5196,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5183,
                            "src": "4351:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4347:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5187,
                        "id": 5198,
                        "nodeType": "Return",
                        "src": "4340:12:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5179,
                    "nodeType": "StructuredDocumentation",
                    "src": "3751:453:44",
                    "text": " @dev Returns the integer division of two unsigned integers, reverting on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 5200,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5184,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5181,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5200,
                        "src": "4222:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5180,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4222:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5183,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5200,
                        "src": "4233:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5182,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4233:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4221:22:44"
                  },
                  "returnParameters": {
                    "id": 5187,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5186,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5200,
                        "src": "4267:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5185,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4267:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4266:9:44"
                  },
                  "scope": 5295,
                  "src": "4209:150:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5221,
                    "nodeType": "Block",
                    "src": "4879:81:44",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5213,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5211,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5205,
                                "src": "4897:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 5212,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4901:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "4897:5:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "536166654d6174683a206d6f64756c6f206279207a65726f",
                              "id": 5214,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4904:26:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832",
                                "typeString": "literal_string \"SafeMath: modulo by zero\""
                              },
                              "value": "SafeMath: modulo by zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832",
                                "typeString": "literal_string \"SafeMath: modulo by zero\""
                              }
                            ],
                            "id": 5210,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4889:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4889:42:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5216,
                        "nodeType": "ExpressionStatement",
                        "src": "4889:42:44"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5219,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5217,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5203,
                            "src": "4948:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "id": 5218,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5205,
                            "src": "4952:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4948:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5209,
                        "id": 5220,
                        "nodeType": "Return",
                        "src": "4941:12:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5201,
                    "nodeType": "StructuredDocumentation",
                    "src": "4365:442:44",
                    "text": " @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n reverting when dividing by zero.\n Counterpart to Solidity's `%` operator. This function uses a `revert`\n opcode (which leaves remaining gas untouched) while Solidity uses an\n invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 5222,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mod",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5206,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5203,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5222,
                        "src": "4825:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5202,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4825:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5205,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5222,
                        "src": "4836:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5204,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4836:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4824:22:44"
                  },
                  "returnParameters": {
                    "id": 5209,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5208,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5222,
                        "src": "4870:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5207,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4870:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4869:9:44"
                  },
                  "scope": 5295,
                  "src": "4812:148:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5245,
                    "nodeType": "Block",
                    "src": "5519:68:44",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5237,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5235,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5227,
                                "src": "5537:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 5236,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5225,
                                "src": "5542:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5537:6:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 5238,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5229,
                              "src": "5545:12:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 5234,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5529:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5529:29:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5240,
                        "nodeType": "ExpressionStatement",
                        "src": "5529:29:44"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5241,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5225,
                            "src": "5575:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 5242,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5227,
                            "src": "5579:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5575:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5233,
                        "id": 5244,
                        "nodeType": "Return",
                        "src": "5568:12:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5223,
                    "nodeType": "StructuredDocumentation",
                    "src": "4966:453:44",
                    "text": " @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n overflow (when the result is negative).\n CAUTION: This function is deprecated because it requires allocating memory for the error\n message unnecessarily. For custom revert reasons use {trySub}.\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."
                  },
                  "id": 5246,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5230,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5225,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5246,
                        "src": "5437:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5224,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5437:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5227,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5246,
                        "src": "5448:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5226,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5448:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5229,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "scope": 5246,
                        "src": "5459:26:44",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5228,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "5459:6:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5436:50:44"
                  },
                  "returnParameters": {
                    "id": 5233,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5232,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5246,
                        "src": "5510:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5231,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5510:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5509:9:44"
                  },
                  "scope": 5295,
                  "src": "5424:163:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5269,
                    "nodeType": "Block",
                    "src": "6339:67:44",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5261,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5259,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5251,
                                "src": "6357:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 5260,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6361:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "6357:5:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 5262,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5253,
                              "src": "6364:12:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 5258,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6349:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6349:28:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5264,
                        "nodeType": "ExpressionStatement",
                        "src": "6349:28:44"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5265,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5249,
                            "src": "6394:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "id": 5266,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5251,
                            "src": "6398:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6394:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5257,
                        "id": 5268,
                        "nodeType": "Return",
                        "src": "6387:12:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5247,
                    "nodeType": "StructuredDocumentation",
                    "src": "5593:646:44",
                    "text": " @dev Returns the integer division of two unsigned integers, reverting with custom message on\n division by zero. The result is rounded towards zero.\n CAUTION: This function is deprecated because it requires allocating memory for the error\n message unnecessarily. For custom revert reasons use {tryDiv}.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 5270,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5254,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5249,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5270,
                        "src": "6257:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5248,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6257:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5251,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5270,
                        "src": "6268:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5250,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6268:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5253,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "scope": 5270,
                        "src": "6279:26:44",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5252,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "6279:6:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6256:50:44"
                  },
                  "returnParameters": {
                    "id": 5257,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5256,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5270,
                        "src": "6330:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5255,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6330:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6329:9:44"
                  },
                  "scope": 5295,
                  "src": "6244:162:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5293,
                    "nodeType": "Block",
                    "src": "7147:67:44",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5283,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5275,
                                "src": "7165:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 5284,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7169:1:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "7165:5:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 5286,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5277,
                              "src": "7172:12:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 5282,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7157:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7157:28:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5288,
                        "nodeType": "ExpressionStatement",
                        "src": "7157:28:44"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5291,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5289,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5273,
                            "src": "7202:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "id": 5290,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5275,
                            "src": "7206:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7202:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5281,
                        "id": 5292,
                        "nodeType": "Return",
                        "src": "7195:12:44"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5271,
                    "nodeType": "StructuredDocumentation",
                    "src": "6412:635:44",
                    "text": " @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n reverting with custom message when dividing by zero.\n CAUTION: This function is deprecated because it requires allocating memory for the error\n message unnecessarily. For custom revert reasons use {tryMod}.\n Counterpart to Solidity's `%` operator. This function uses a `revert`\n opcode (which leaves remaining gas untouched) while Solidity uses an\n invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 5294,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mod",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5278,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5273,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 5294,
                        "src": "7065:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5272,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7065:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5275,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 5294,
                        "src": "7076:9:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5274,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7076:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5277,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "scope": 5294,
                        "src": "7087:26:44",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5276,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "7087:6:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7064:50:44"
                  },
                  "returnParameters": {
                    "id": 5281,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5280,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5294,
                        "src": "7138:7:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5279,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7138:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7137:9:44"
                  },
                  "scope": 5295,
                  "src": "7052:162:44",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 5296,
              "src": "622:6594:44"
            }
          ],
          "src": "33:7184:44"
        },
        "id": 44
      },
      "@openzeppelin/contracts/token/ERC20/ERC20.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
          "exportedSymbols": {
            "Context": [
              6073
            ],
            "ERC20": [
              5798
            ],
            "IERC20": [
              5876
            ],
            "SafeMath": [
              5295
            ]
          },
          "id": 5799,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5297,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:45"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
              "file": "../../utils/Context.sol",
              "id": 5298,
              "nodeType": "ImportDirective",
              "scope": 5799,
              "sourceUnit": 6074,
              "src": "58:33:45",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "./IERC20.sol",
              "id": 5299,
              "nodeType": "ImportDirective",
              "scope": 5799,
              "sourceUnit": 5877,
              "src": "92:22:45",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
              "file": "../../math/SafeMath.sol",
              "id": 5300,
              "nodeType": "ImportDirective",
              "scope": 5799,
              "sourceUnit": 5296,
              "src": "115:33:45",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5302,
                    "name": "Context",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6073,
                    "src": "1331:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Context_$6073",
                      "typeString": "contract Context"
                    }
                  },
                  "id": 5303,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1331:7:45"
                },
                {
                  "baseName": {
                    "id": 5304,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5876,
                    "src": "1340:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$5876",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 5305,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1340:6:45"
                }
              ],
              "contractDependencies": [
                5876,
                6073
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 5301,
                "nodeType": "StructuredDocumentation",
                "src": "150:1162:45",
                "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin guidelines: functions revert instead\n of returning `false` on failure. This behavior is nonetheless conventional\n and does not conflict with the expectations of ERC20 applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."
              },
              "fullyImplemented": true,
              "id": 5798,
              "linearizedBaseContracts": [
                5798,
                5876,
                6073
              ],
              "name": "ERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 5308,
                  "libraryName": {
                    "id": 5306,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5295,
                    "src": "1359:8:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$5295",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1353:27:45",
                  "typeName": {
                    "id": 5307,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1372:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 5312,
                  "mutability": "mutable",
                  "name": "_balances",
                  "nodeType": "VariableDeclaration",
                  "scope": 5798,
                  "src": "1386:46:45",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 5311,
                    "keyType": {
                      "id": 5309,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1395:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1386:28:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 5310,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1406:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 5318,
                  "mutability": "mutable",
                  "name": "_allowances",
                  "nodeType": "VariableDeclaration",
                  "scope": 5798,
                  "src": "1439:69:45",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 5317,
                    "keyType": {
                      "id": 5313,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1448:7:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1439:49:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 5316,
                      "keyType": {
                        "id": 5314,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1468:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "1459:28:45",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 5315,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1479:7:45",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 5320,
                  "mutability": "mutable",
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 5798,
                  "src": "1515:28:45",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5319,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1515:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 5322,
                  "mutability": "mutable",
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 5798,
                  "src": "1550:20:45",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5321,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1550:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 5324,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 5798,
                  "src": "1576:22:45",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5323,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1576:6:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 5326,
                  "mutability": "mutable",
                  "name": "_decimals",
                  "nodeType": "VariableDeclaration",
                  "scope": 5798,
                  "src": "1604:23:45",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 5325,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1604:5:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 5346,
                    "nodeType": "Block",
                    "src": "2007:81:45",
                    "statements": [
                      {
                        "expression": {
                          "id": 5336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5334,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5322,
                            "src": "2017:5:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5335,
                            "name": "name_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5329,
                            "src": "2025:5:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2017:13:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 5337,
                        "nodeType": "ExpressionStatement",
                        "src": "2017:13:45"
                      },
                      {
                        "expression": {
                          "id": 5340,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5338,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5324,
                            "src": "2040:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5339,
                            "name": "symbol_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5331,
                            "src": "2050:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2040:17:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 5341,
                        "nodeType": "ExpressionStatement",
                        "src": "2040:17:45"
                      },
                      {
                        "expression": {
                          "id": 5344,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5342,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5326,
                            "src": "2067:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "3138",
                            "id": 5343,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2079:2:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_18_by_1",
                              "typeString": "int_const 18"
                            },
                            "value": "18"
                          },
                          "src": "2067:14:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 5345,
                        "nodeType": "ExpressionStatement",
                        "src": "2067:14:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5327,
                    "nodeType": "StructuredDocumentation",
                    "src": "1634:311:45",
                    "text": " @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n a default value of 18.\n To select a different value for {decimals}, use {_setupDecimals}.\n All three of these values are immutable: they can only be set once during\n construction."
                  },
                  "id": 5347,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5332,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5329,
                        "mutability": "mutable",
                        "name": "name_",
                        "nodeType": "VariableDeclaration",
                        "scope": 5347,
                        "src": "1963:19:45",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5328,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1963:6:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5331,
                        "mutability": "mutable",
                        "name": "symbol_",
                        "nodeType": "VariableDeclaration",
                        "scope": 5347,
                        "src": "1984:21:45",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5330,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1984:6:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1962:44:45"
                  },
                  "returnParameters": {
                    "id": 5333,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2007:0:45"
                  },
                  "scope": 5798,
                  "src": "1950:138:45",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5355,
                    "nodeType": "Block",
                    "src": "2213:29:45",
                    "statements": [
                      {
                        "expression": {
                          "id": 5353,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5322,
                          "src": "2230:5:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 5352,
                        "id": 5354,
                        "nodeType": "Return",
                        "src": "2223:12:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5348,
                    "nodeType": "StructuredDocumentation",
                    "src": "2094:54:45",
                    "text": " @dev Returns the name of the token."
                  },
                  "functionSelector": "06fdde03",
                  "id": 5356,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5349,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2166:2:45"
                  },
                  "returnParameters": {
                    "id": 5352,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5351,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5356,
                        "src": "2198:13:45",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5350,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2198:6:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2197:15:45"
                  },
                  "scope": 5798,
                  "src": "2153:89:45",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5364,
                    "nodeType": "Block",
                    "src": "2417:31:45",
                    "statements": [
                      {
                        "expression": {
                          "id": 5362,
                          "name": "_symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5324,
                          "src": "2434:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 5361,
                        "id": 5363,
                        "nodeType": "Return",
                        "src": "2427:14:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5357,
                    "nodeType": "StructuredDocumentation",
                    "src": "2248:102:45",
                    "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
                  },
                  "functionSelector": "95d89b41",
                  "id": 5365,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5358,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2370:2:45"
                  },
                  "returnParameters": {
                    "id": 5361,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5360,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5365,
                        "src": "2402:13:45",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5359,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2402:6:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2401:15:45"
                  },
                  "scope": 5798,
                  "src": "2355:93:45",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5373,
                    "nodeType": "Block",
                    "src": "3127:33:45",
                    "statements": [
                      {
                        "expression": {
                          "id": 5371,
                          "name": "_decimals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5326,
                          "src": "3144:9:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "functionReturnParameters": 5370,
                        "id": 5372,
                        "nodeType": "Return",
                        "src": "3137:16:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5366,
                    "nodeType": "StructuredDocumentation",
                    "src": "2454:612:45",
                    "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5,05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n called.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."
                  },
                  "functionSelector": "313ce567",
                  "id": 5374,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decimals",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5367,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3088:2:45"
                  },
                  "returnParameters": {
                    "id": 5370,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5369,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5374,
                        "src": "3120:5:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 5368,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "3120:5:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3119:7:45"
                  },
                  "scope": 5798,
                  "src": "3071:89:45",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    5807
                  ],
                  "body": {
                    "id": 5383,
                    "nodeType": "Block",
                    "src": "3290:36:45",
                    "statements": [
                      {
                        "expression": {
                          "id": 5381,
                          "name": "_totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5320,
                          "src": "3307:12:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5380,
                        "id": 5382,
                        "nodeType": "Return",
                        "src": "3300:19:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5375,
                    "nodeType": "StructuredDocumentation",
                    "src": "3166:49:45",
                    "text": " @dev See {IERC20-totalSupply}."
                  },
                  "functionSelector": "18160ddd",
                  "id": 5384,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5377,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3263:8:45"
                  },
                  "parameters": {
                    "id": 5376,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3240:2:45"
                  },
                  "returnParameters": {
                    "id": 5380,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5379,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5384,
                        "src": "3281:7:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5378,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3281:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3280:9:45"
                  },
                  "scope": 5798,
                  "src": "3220:106:45",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    5815
                  ],
                  "body": {
                    "id": 5397,
                    "nodeType": "Block",
                    "src": "3467:42:45",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 5393,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5312,
                            "src": "3484:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 5395,
                          "indexExpression": {
                            "id": 5394,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5387,
                            "src": "3494:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3484:18:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5392,
                        "id": 5396,
                        "nodeType": "Return",
                        "src": "3477:25:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5385,
                    "nodeType": "StructuredDocumentation",
                    "src": "3332:47:45",
                    "text": " @dev See {IERC20-balanceOf}."
                  },
                  "functionSelector": "70a08231",
                  "id": 5398,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5389,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3440:8:45"
                  },
                  "parameters": {
                    "id": 5388,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5387,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5398,
                        "src": "3403:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5386,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3403:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3402:17:45"
                  },
                  "returnParameters": {
                    "id": 5392,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5391,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5398,
                        "src": "3458:7:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5390,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3458:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3457:9:45"
                  },
                  "scope": 5798,
                  "src": "3384:125:45",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    5825
                  ],
                  "body": {
                    "id": 5418,
                    "nodeType": "Block",
                    "src": "3804:80:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 5410,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6061,
                                "src": "3824:10:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 5411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3824:12:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5412,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5401,
                              "src": "3838:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5413,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5403,
                              "src": "3849:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5409,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5619,
                            "src": "3814:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3814:42:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5415,
                        "nodeType": "ExpressionStatement",
                        "src": "3814:42:45"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 5416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3873:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 5408,
                        "id": 5417,
                        "nodeType": "Return",
                        "src": "3866:11:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5399,
                    "nodeType": "StructuredDocumentation",
                    "src": "3515:192:45",
                    "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `recipient` cannot be the zero address.\n - the caller must have a balance of at least `amount`."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 5419,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5405,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3780:8:45"
                  },
                  "parameters": {
                    "id": 5404,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5401,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 5419,
                        "src": "3730:17:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5400,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3730:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5403,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5419,
                        "src": "3749:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5402,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3749:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3729:35:45"
                  },
                  "returnParameters": {
                    "id": 5408,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5407,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5419,
                        "src": "3798:4:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5406,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3798:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3797:6:45"
                  },
                  "scope": 5798,
                  "src": "3712:172:45",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    5835
                  ],
                  "body": {
                    "id": 5436,
                    "nodeType": "Block",
                    "src": "4040:51:45",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 5430,
                              "name": "_allowances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5318,
                              "src": "4057:11:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 5432,
                            "indexExpression": {
                              "id": 5431,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5422,
                              "src": "4069:5:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4057:18:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 5434,
                          "indexExpression": {
                            "id": 5433,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5424,
                            "src": "4076:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4057:27:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5429,
                        "id": 5435,
                        "nodeType": "Return",
                        "src": "4050:34:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5420,
                    "nodeType": "StructuredDocumentation",
                    "src": "3890:47:45",
                    "text": " @dev See {IERC20-allowance}."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 5437,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5426,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4013:8:45"
                  },
                  "parameters": {
                    "id": 5425,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5422,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5437,
                        "src": "3961:13:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5421,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3961:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5424,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5437,
                        "src": "3976:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5423,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3976:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3960:32:45"
                  },
                  "returnParameters": {
                    "id": 5429,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5428,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5437,
                        "src": "4031:7:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5427,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4031:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4030:9:45"
                  },
                  "scope": 5798,
                  "src": "3942:149:45",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    5845
                  ],
                  "body": {
                    "id": 5457,
                    "nodeType": "Block",
                    "src": "4318:77:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 5449,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6061,
                                "src": "4337:10:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 5450,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4337:12:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5451,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5440,
                              "src": "4351:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5452,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5442,
                              "src": "4360:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5448,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5775,
                            "src": "4328:8:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5453,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4328:39:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5454,
                        "nodeType": "ExpressionStatement",
                        "src": "4328:39:45"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 5455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4384:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 5447,
                        "id": 5456,
                        "nodeType": "Return",
                        "src": "4377:11:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5438,
                    "nodeType": "StructuredDocumentation",
                    "src": "4097:127:45",
                    "text": " @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 5458,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5444,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4294:8:45"
                  },
                  "parameters": {
                    "id": 5443,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5440,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5458,
                        "src": "4246:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5439,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4246:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5442,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5458,
                        "src": "4263:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5441,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4263:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4245:33:45"
                  },
                  "returnParameters": {
                    "id": 5447,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5446,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5458,
                        "src": "4312:4:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5445,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4312:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4311:6:45"
                  },
                  "scope": 5798,
                  "src": "4229:166:45",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    5857
                  ],
                  "body": {
                    "id": 5495,
                    "nodeType": "Block",
                    "src": "4974:205:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5472,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5461,
                              "src": "4994:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5473,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5463,
                              "src": "5002:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5474,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5465,
                              "src": "5013:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5471,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5619,
                            "src": "4984:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5475,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4984:36:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5476,
                        "nodeType": "ExpressionStatement",
                        "src": "4984:36:45"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5478,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5461,
                              "src": "5039:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 5479,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6061,
                                "src": "5047:10:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 5480,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5047:12:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 5488,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5465,
                                  "src": "5099:6:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "hexValue": "45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365",
                                  "id": 5489,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5107:42:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                    "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                  },
                                  "value": "ERC20: transfer amount exceeds allowance"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                    "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                  }
                                ],
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 5481,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5318,
                                      "src": "5061:11:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 5483,
                                    "indexExpression": {
                                      "id": 5482,
                                      "name": "sender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5461,
                                      "src": "5073:6:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5061:19:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 5486,
                                  "indexExpression": {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 5484,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6061,
                                      "src": "5081:10:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                        "typeString": "function () view returns (address payable)"
                                      }
                                    },
                                    "id": 5485,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5081:12:45",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5061:33:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5487,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5246,
                                "src": "5061:37:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                }
                              },
                              "id": 5490,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5061:89:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5477,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5775,
                            "src": "5030:8:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5491,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5030:121:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5492,
                        "nodeType": "ExpressionStatement",
                        "src": "5030:121:45"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 5493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5168:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 5470,
                        "id": 5494,
                        "nodeType": "Return",
                        "src": "5161:11:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5459,
                    "nodeType": "StructuredDocumentation",
                    "src": "4401:456:45",
                    "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n Requirements:\n - `sender` and `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`.\n - the caller must have allowance for ``sender``'s tokens of at least\n `amount`."
                  },
                  "functionSelector": "23b872dd",
                  "id": 5496,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5467,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4950:8:45"
                  },
                  "parameters": {
                    "id": 5466,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5461,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5496,
                        "src": "4884:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5460,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4884:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5463,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 5496,
                        "src": "4900:17:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5462,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4900:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5465,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5496,
                        "src": "4919:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5464,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4919:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4883:51:45"
                  },
                  "returnParameters": {
                    "id": 5470,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5469,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5496,
                        "src": "4968:4:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5468,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4968:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4967:6:45"
                  },
                  "scope": 5798,
                  "src": "4862:317:45",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5523,
                    "nodeType": "Block",
                    "src": "5668:121:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 5507,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6061,
                                "src": "5687:10:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 5508,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5687:12:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5509,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5499,
                              "src": "5701:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 5517,
                                  "name": "addedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5501,
                                  "src": "5749:10:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 5510,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5318,
                                      "src": "5710:11:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 5513,
                                    "indexExpression": {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 5511,
                                        "name": "_msgSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6061,
                                        "src": "5722:10:45",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                          "typeString": "function () view returns (address payable)"
                                        }
                                      },
                                      "id": 5512,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5722:12:45",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5710:25:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 5515,
                                  "indexExpression": {
                                    "id": 5514,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5499,
                                    "src": "5736:7:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5710:34:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5516,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5122,
                                "src": "5710:38:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5518,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5710:50:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5506,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5775,
                            "src": "5678:8:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5678:83:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5520,
                        "nodeType": "ExpressionStatement",
                        "src": "5678:83:45"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 5521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5778:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 5505,
                        "id": 5522,
                        "nodeType": "Return",
                        "src": "5771:11:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5497,
                    "nodeType": "StructuredDocumentation",
                    "src": "5185:384:45",
                    "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "39509351",
                  "id": 5524,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5502,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5499,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5524,
                        "src": "5601:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5498,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5601:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5501,
                        "mutability": "mutable",
                        "name": "addedValue",
                        "nodeType": "VariableDeclaration",
                        "scope": 5524,
                        "src": "5618:18:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5500,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5618:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5600:37:45"
                  },
                  "returnParameters": {
                    "id": 5505,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5504,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5524,
                        "src": "5662:4:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5503,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5662:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5661:6:45"
                  },
                  "scope": 5798,
                  "src": "5574:215:45",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5552,
                    "nodeType": "Block",
                    "src": "6375:167:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 5535,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6061,
                                "src": "6394:10:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 5536,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6394:12:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5537,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5527,
                              "src": "6408:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 5545,
                                  "name": "subtractedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5529,
                                  "src": "6456:15:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                                  "id": 5546,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6473:39:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                    "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                  },
                                  "value": "ERC20: decreased allowance below zero"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                    "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                  }
                                ],
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 5538,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5318,
                                      "src": "6417:11:45",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 5541,
                                    "indexExpression": {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 5539,
                                        "name": "_msgSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6061,
                                        "src": "6429:10:45",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                          "typeString": "function () view returns (address payable)"
                                        }
                                      },
                                      "id": 5540,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6429:12:45",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6417:25:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 5543,
                                  "indexExpression": {
                                    "id": 5542,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5527,
                                    "src": "6443:7:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "6417:34:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5544,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5246,
                                "src": "6417:38:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                }
                              },
                              "id": 5547,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6417:96:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5534,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5775,
                            "src": "6385:8:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6385:129:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5549,
                        "nodeType": "ExpressionStatement",
                        "src": "6385:129:45"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 5550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6531:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 5533,
                        "id": 5551,
                        "nodeType": "Return",
                        "src": "6524:11:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5525,
                    "nodeType": "StructuredDocumentation",
                    "src": "5795:476:45",
                    "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."
                  },
                  "functionSelector": "a457c2d7",
                  "id": 5553,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5530,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5527,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5553,
                        "src": "6303:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5526,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6303:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5529,
                        "mutability": "mutable",
                        "name": "subtractedValue",
                        "nodeType": "VariableDeclaration",
                        "scope": 5553,
                        "src": "6320:23:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5528,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6320:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6302:42:45"
                  },
                  "returnParameters": {
                    "id": 5533,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5532,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5553,
                        "src": "6369:4:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5531,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6369:4:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6368:6:45"
                  },
                  "scope": 5798,
                  "src": "6276:266:45",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5618,
                    "nodeType": "Block",
                    "src": "7103:443:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5569,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5564,
                                "name": "sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5556,
                                "src": "7121:6:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5567,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7139:1:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5566,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7131:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5565,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7131:7:45",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5568,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7131:10:45",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "7121:20:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                              "id": 5570,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7143:39:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              },
                              "value": "ERC20: transfer from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              }
                            ],
                            "id": 5563,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7113:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5571,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7113:70:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5572,
                        "nodeType": "ExpressionStatement",
                        "src": "7113:70:45"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5579,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5574,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5558,
                                "src": "7201:9:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5577,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7222:1:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5576,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7214:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5575,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7214:7:45",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5578,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7214:10:45",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "7201:23:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                              "id": 5580,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7226:37:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              },
                              "value": "ERC20: transfer to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              }
                            ],
                            "id": 5573,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7193:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7193:71:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5582,
                        "nodeType": "ExpressionStatement",
                        "src": "7193:71:45"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5584,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5556,
                              "src": "7296:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5585,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5558,
                              "src": "7304:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5586,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5560,
                              "src": "7315:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5583,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5797,
                            "src": "7275:20:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7275:47:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5588,
                        "nodeType": "ExpressionStatement",
                        "src": "7275:47:45"
                      },
                      {
                        "expression": {
                          "id": 5599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5589,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5312,
                              "src": "7333:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5591,
                            "indexExpression": {
                              "id": 5590,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5556,
                              "src": "7343:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7333:17:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5596,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5560,
                                "src": "7375:6:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                                "id": 5597,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7383:40:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                  "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                },
                                "value": "ERC20: transfer amount exceeds balance"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                  "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 5592,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5312,
                                  "src": "7353:9:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5594,
                                "indexExpression": {
                                  "id": 5593,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5556,
                                  "src": "7363:6:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7353:17:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5595,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5246,
                              "src": "7353:21:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                              }
                            },
                            "id": 5598,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7353:71:45",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7333:91:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5600,
                        "nodeType": "ExpressionStatement",
                        "src": "7333:91:45"
                      },
                      {
                        "expression": {
                          "id": 5610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5601,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5312,
                              "src": "7434:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5603,
                            "indexExpression": {
                              "id": 5602,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5558,
                              "src": "7444:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7434:20:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5608,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5560,
                                "src": "7482:6:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 5604,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5312,
                                  "src": "7457:9:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5606,
                                "indexExpression": {
                                  "id": 5605,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5558,
                                  "src": "7467:9:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7457:20:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5122,
                              "src": "7457:24:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5609,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7457:32:45",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7434:55:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5611,
                        "nodeType": "ExpressionStatement",
                        "src": "7434:55:45"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5613,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5556,
                              "src": "7513:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5614,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5558,
                              "src": "7521:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5615,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5560,
                              "src": "7532:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5612,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5866,
                            "src": "7504:8:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7504:35:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5617,
                        "nodeType": "EmitStatement",
                        "src": "7499:40:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5554,
                    "nodeType": "StructuredDocumentation",
                    "src": "6548:463:45",
                    "text": " @dev Moves tokens `amount` from `sender` to `recipient`.\n This is internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `sender` cannot be the zero address.\n - `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`."
                  },
                  "id": 5619,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5561,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5556,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5619,
                        "src": "7035:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5555,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7035:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5558,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 5619,
                        "src": "7051:17:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5557,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7051:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5560,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5619,
                        "src": "7070:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5559,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7070:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7034:51:45"
                  },
                  "returnParameters": {
                    "id": 5562,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7103:0:45"
                  },
                  "scope": 5798,
                  "src": "7016:530:45",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5673,
                    "nodeType": "Block",
                    "src": "7882:305:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5628,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5622,
                                "src": "7900:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5631,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7919:1:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5630,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7911:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5629,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7911:7:45",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5632,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7911:10:45",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "7900:21:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                              "id": 5634,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7923:33:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              },
                              "value": "ERC20: mint to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              }
                            ],
                            "id": 5627,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7892:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5635,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7892:65:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5636,
                        "nodeType": "ExpressionStatement",
                        "src": "7892:65:45"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 5640,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7997:1:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5639,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7989:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5638,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7989:7:45",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5641,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7989:10:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5642,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5622,
                              "src": "8001:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5643,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5624,
                              "src": "8010:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5637,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5797,
                            "src": "7968:20:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5644,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7968:49:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5645,
                        "nodeType": "ExpressionStatement",
                        "src": "7968:49:45"
                      },
                      {
                        "expression": {
                          "id": 5651,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5646,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5320,
                            "src": "8028:12:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5649,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5624,
                                "src": "8060:6:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 5647,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5320,
                                "src": "8043:12:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5648,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5122,
                              "src": "8043:16:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5650,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8043:24:45",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8028:39:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5652,
                        "nodeType": "ExpressionStatement",
                        "src": "8028:39:45"
                      },
                      {
                        "expression": {
                          "id": 5662,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5653,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5312,
                              "src": "8077:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5655,
                            "indexExpression": {
                              "id": 5654,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5622,
                              "src": "8087:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "8077:18:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5660,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5624,
                                "src": "8121:6:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 5656,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5312,
                                  "src": "8098:9:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5658,
                                "indexExpression": {
                                  "id": 5657,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5622,
                                  "src": "8108:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "8098:18:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5659,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5122,
                              "src": "8098:22:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5661,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8098:30:45",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8077:51:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5663,
                        "nodeType": "ExpressionStatement",
                        "src": "8077:51:45"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 5667,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8160:1:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5666,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8152:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5665,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8152:7:45",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5668,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8152:10:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5669,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5622,
                              "src": "8164:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5670,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5624,
                              "src": "8173:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5664,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5866,
                            "src": "8143:8:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8143:37:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5672,
                        "nodeType": "EmitStatement",
                        "src": "8138:42:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5620,
                    "nodeType": "StructuredDocumentation",
                    "src": "7552:260:45",
                    "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `to` cannot be the zero address."
                  },
                  "id": 5674,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5625,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5622,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5674,
                        "src": "7832:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5621,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7832:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5624,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5674,
                        "src": "7849:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5623,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7849:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7831:33:45"
                  },
                  "returnParameters": {
                    "id": 5626,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7882:0:45"
                  },
                  "scope": 5798,
                  "src": "7817:370:45",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5729,
                    "nodeType": "Block",
                    "src": "8572:345:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5688,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5683,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5677,
                                "src": "8590:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5686,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8609:1:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5685,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8601:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5684,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8601:7:45",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5687,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8601:10:45",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "8590:21:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                              "id": 5689,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8613:35:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              },
                              "value": "ERC20: burn from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              }
                            ],
                            "id": 5682,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8582:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8582:67:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5691,
                        "nodeType": "ExpressionStatement",
                        "src": "8582:67:45"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5693,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5677,
                              "src": "8681:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 5696,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8698:1:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5695,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8690:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5694,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8690:7:45",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8690:10:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5698,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5679,
                              "src": "8702:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5692,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5797,
                            "src": "8660:20:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8660:49:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5700,
                        "nodeType": "ExpressionStatement",
                        "src": "8660:49:45"
                      },
                      {
                        "expression": {
                          "id": 5711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5701,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5312,
                              "src": "8720:9:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5703,
                            "indexExpression": {
                              "id": 5702,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5677,
                              "src": "8730:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "8720:18:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5708,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5679,
                                "src": "8764:6:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365",
                                "id": 5709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8772:36:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                  "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                },
                                "value": "ERC20: burn amount exceeds balance"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                  "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 5704,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5312,
                                  "src": "8741:9:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5706,
                                "indexExpression": {
                                  "id": 5705,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5677,
                                  "src": "8751:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "8741:18:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5707,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5246,
                              "src": "8741:22:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                              }
                            },
                            "id": 5710,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8741:68:45",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8720:89:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5712,
                        "nodeType": "ExpressionStatement",
                        "src": "8720:89:45"
                      },
                      {
                        "expression": {
                          "id": 5718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5713,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5320,
                            "src": "8819:12:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5716,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5679,
                                "src": "8851:6:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 5714,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5320,
                                "src": "8834:12:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5715,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5144,
                              "src": "8834:16:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5717,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8834:24:45",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8819:39:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5719,
                        "nodeType": "ExpressionStatement",
                        "src": "8819:39:45"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5721,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5677,
                              "src": "8882:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 5724,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8899:1:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5723,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8891:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5722,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8891:7:45",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5725,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8891:10:45",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5726,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5679,
                              "src": "8903:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5720,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5866,
                            "src": "8873:8:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8873:37:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5728,
                        "nodeType": "EmitStatement",
                        "src": "8868:42:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5675,
                    "nodeType": "StructuredDocumentation",
                    "src": "8193:309:45",
                    "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."
                  },
                  "id": 5730,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5680,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5677,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5730,
                        "src": "8522:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5676,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8522:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5679,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5730,
                        "src": "8539:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5678,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8539:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8521:33:45"
                  },
                  "returnParameters": {
                    "id": 5681,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8572:0:45"
                  },
                  "scope": 5798,
                  "src": "8507:410:45",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5774,
                    "nodeType": "Block",
                    "src": "9423:257:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5746,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5741,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5733,
                                "src": "9441:5:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5744,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9458:1:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5743,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9450:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5742,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9450:7:45",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5745,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9450:10:45",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "9441:19:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                              "id": 5747,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9462:38:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              },
                              "value": "ERC20: approve from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              }
                            ],
                            "id": 5740,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9433:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9433:68:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5749,
                        "nodeType": "ExpressionStatement",
                        "src": "9433:68:45"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5751,
                                "name": "spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5735,
                                "src": "9519:7:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 5754,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9538:1:45",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5753,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9530:7:45",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5752,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9530:7:45",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9530:10:45",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "9519:21:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                              "id": 5757,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9542:36:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              },
                              "value": "ERC20: approve to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              }
                            ],
                            "id": 5750,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9511:7:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9511:68:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5759,
                        "nodeType": "ExpressionStatement",
                        "src": "9511:68:45"
                      },
                      {
                        "expression": {
                          "id": 5766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 5760,
                                "name": "_allowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5318,
                                "src": "9590:11:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 5763,
                              "indexExpression": {
                                "id": 5761,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5733,
                                "src": "9602:5:45",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9590:18:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5764,
                            "indexExpression": {
                              "id": 5762,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5735,
                              "src": "9609:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9590:27:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5765,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5737,
                            "src": "9620:6:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9590:36:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5767,
                        "nodeType": "ExpressionStatement",
                        "src": "9590:36:45"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5769,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5733,
                              "src": "9650:5:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5770,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5735,
                              "src": "9657:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5771,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5737,
                              "src": "9666:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5768,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5875,
                            "src": "9641:8:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5772,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9641:32:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5773,
                        "nodeType": "EmitStatement",
                        "src": "9636:37:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5731,
                    "nodeType": "StructuredDocumentation",
                    "src": "8923:412:45",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."
                  },
                  "id": 5775,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_approve",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5738,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5733,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5775,
                        "src": "9358:13:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5732,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9358:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5735,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5775,
                        "src": "9373:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5734,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9373:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5737,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5775,
                        "src": "9390:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5736,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9390:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9357:48:45"
                  },
                  "returnParameters": {
                    "id": 5739,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9423:0:45"
                  },
                  "scope": 5798,
                  "src": "9340:340:45",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5785,
                    "nodeType": "Block",
                    "src": "10061:38:45",
                    "statements": [
                      {
                        "expression": {
                          "id": 5783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5781,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5326,
                            "src": "10071:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5782,
                            "name": "decimals_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5778,
                            "src": "10083:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "10071:21:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 5784,
                        "nodeType": "ExpressionStatement",
                        "src": "10071:21:45"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5776,
                    "nodeType": "StructuredDocumentation",
                    "src": "9686:312:45",
                    "text": " @dev Sets {decimals} to a value other than the default one of 18.\n WARNING: This function should only be called from the constructor. Most\n applications that interact with token contracts will not expect\n {decimals} to ever change, and may work incorrectly if it does."
                  },
                  "id": 5786,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setupDecimals",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5779,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5778,
                        "mutability": "mutable",
                        "name": "decimals_",
                        "nodeType": "VariableDeclaration",
                        "scope": 5786,
                        "src": "10027:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 5777,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "10027:5:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10026:17:45"
                  },
                  "returnParameters": {
                    "id": 5780,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10061:0:45"
                  },
                  "scope": 5798,
                  "src": "10003:96:45",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5796,
                    "nodeType": "Block",
                    "src": "10775:3:45",
                    "statements": []
                  },
                  "documentation": {
                    "id": 5787,
                    "nodeType": "StructuredDocumentation",
                    "src": "10105:576:45",
                    "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be to transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                  },
                  "id": 5797,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_beforeTokenTransfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5794,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5789,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 5797,
                        "src": "10716:12:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5788,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10716:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5791,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 5797,
                        "src": "10730:10:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5790,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10730:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5793,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5797,
                        "src": "10742:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5792,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10742:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10715:42:45"
                  },
                  "returnParameters": {
                    "id": 5795,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10775:0:45"
                  },
                  "scope": 5798,
                  "src": "10686:92:45",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 5799,
              "src": "1313:9467:45"
            }
          ],
          "src": "33:10748:45"
        },
        "id": 45
      },
      "@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
          "exportedSymbols": {
            "IERC20": [
              5876
            ]
          },
          "id": 5877,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5800,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:46"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 5801,
                "nodeType": "StructuredDocumentation",
                "src": "58:70:46",
                "text": " @dev Interface of the ERC20 standard as defined in the EIP."
              },
              "fullyImplemented": false,
              "id": 5876,
              "linearizedBaseContracts": [
                5876
              ],
              "name": "IERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 5802,
                    "nodeType": "StructuredDocumentation",
                    "src": "152:66:46",
                    "text": " @dev Returns the amount of tokens in existence."
                  },
                  "functionSelector": "18160ddd",
                  "id": 5807,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5803,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "243:2:46"
                  },
                  "returnParameters": {
                    "id": 5806,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5805,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5807,
                        "src": "269:7:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5804,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "269:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "268:9:46"
                  },
                  "scope": 5876,
                  "src": "223:55:46",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5808,
                    "nodeType": "StructuredDocumentation",
                    "src": "284:72:46",
                    "text": " @dev Returns the amount of tokens owned by `account`."
                  },
                  "functionSelector": "70a08231",
                  "id": 5815,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5811,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5810,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "scope": 5815,
                        "src": "380:15:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5809,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "380:7:46",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "379:17:46"
                  },
                  "returnParameters": {
                    "id": 5814,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5813,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5815,
                        "src": "420:7:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5812,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "420:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "419:9:46"
                  },
                  "scope": 5876,
                  "src": "361:68:46",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5816,
                    "nodeType": "StructuredDocumentation",
                    "src": "435:209:46",
                    "text": " @dev Moves `amount` tokens from the caller's account to `recipient`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 5825,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5821,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5818,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 5825,
                        "src": "667:17:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5817,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "667:7:46",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5820,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5825,
                        "src": "686:14:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5819,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "686:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "666:35:46"
                  },
                  "returnParameters": {
                    "id": 5824,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5823,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5825,
                        "src": "720:4:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5822,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "720:4:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "719:6:46"
                  },
                  "scope": 5876,
                  "src": "649:77:46",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5826,
                    "nodeType": "StructuredDocumentation",
                    "src": "732:264:46",
                    "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 5835,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5831,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5828,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5835,
                        "src": "1020:13:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5827,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1020:7:46",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5830,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5835,
                        "src": "1035:15:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5829,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1035:7:46",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1019:32:46"
                  },
                  "returnParameters": {
                    "id": 5834,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5833,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5835,
                        "src": "1075:7:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5832,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1075:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1074:9:46"
                  },
                  "scope": 5876,
                  "src": "1001:83:46",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5836,
                    "nodeType": "StructuredDocumentation",
                    "src": "1090:642:46",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 5845,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5841,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5838,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5845,
                        "src": "1754:15:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5837,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1754:7:46",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5840,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5845,
                        "src": "1771:14:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5839,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1771:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1753:33:46"
                  },
                  "returnParameters": {
                    "id": 5844,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5843,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5845,
                        "src": "1805:4:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5842,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1805:4:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1804:6:46"
                  },
                  "scope": 5876,
                  "src": "1737:74:46",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5846,
                    "nodeType": "StructuredDocumentation",
                    "src": "1817:296:46",
                    "text": " @dev Moves `amount` tokens from `sender` to `recipient` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "23b872dd",
                  "id": 5857,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5853,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5848,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5857,
                        "src": "2140:14:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5847,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2140:7:46",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5850,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 5857,
                        "src": "2156:17:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5849,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2156:7:46",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5852,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 5857,
                        "src": "2175:14:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5851,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2175:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2139:51:46"
                  },
                  "returnParameters": {
                    "id": 5856,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5855,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5857,
                        "src": "2209:4:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5854,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2209:4:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2208:6:46"
                  },
                  "scope": 5876,
                  "src": "2118:97:46",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 5858,
                    "nodeType": "StructuredDocumentation",
                    "src": "2221:158:46",
                    "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."
                  },
                  "id": 5866,
                  "name": "Transfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 5865,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5860,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 5866,
                        "src": "2399:20:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5859,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2399:7:46",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5862,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 5866,
                        "src": "2421:18:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5861,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2421:7:46",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5864,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 5866,
                        "src": "2441:13:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5863,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2441:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2398:57:46"
                  },
                  "src": "2384:72:46"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 5867,
                    "nodeType": "StructuredDocumentation",
                    "src": "2462:148:46",
                    "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."
                  },
                  "id": 5875,
                  "name": "Approval",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 5874,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5869,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5875,
                        "src": "2630:21:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5868,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2630:7:46",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5871,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "scope": 5875,
                        "src": "2653:23:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5870,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2653:7:46",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5873,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 5875,
                        "src": "2678:13:46",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5872,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2678:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2629:63:46"
                  },
                  "src": "2615:78:46"
                }
              ],
              "scope": 5877,
              "src": "129:2566:46"
            }
          ],
          "src": "33:2663:46"
        },
        "id": 46
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
          "exportedSymbols": {
            "IERC165": [
              4940
            ],
            "IERC721": [
              5992
            ]
          },
          "id": 5993,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5878,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:47"
            },
            {
              "absolutePath": "@openzeppelin/contracts/introspection/IERC165.sol",
              "file": "../../introspection/IERC165.sol",
              "id": 5879,
              "nodeType": "ImportDirective",
              "scope": 5993,
              "sourceUnit": 4941,
              "src": "58:41:47",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5881,
                    "name": "IERC165",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4940,
                    "src": "190:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC165_$4940",
                      "typeString": "contract IERC165"
                    }
                  },
                  "id": 5882,
                  "nodeType": "InheritanceSpecifier",
                  "src": "190:7:47"
                }
              ],
              "contractDependencies": [
                4940
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 5880,
                "nodeType": "StructuredDocumentation",
                "src": "101:67:47",
                "text": " @dev Required interface of an ERC721 compliant contract."
              },
              "fullyImplemented": false,
              "id": 5992,
              "linearizedBaseContracts": [
                5992,
                4940
              ],
              "name": "IERC721",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 5883,
                    "nodeType": "StructuredDocumentation",
                    "src": "204:88:47",
                    "text": " @dev Emitted when `tokenId` token is transferred from `from` to `to`."
                  },
                  "id": 5891,
                  "name": "Transfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 5890,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5885,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 5891,
                        "src": "312:20:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5884,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "312:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5887,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 5891,
                        "src": "334:18:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5886,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "334:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5889,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 5891,
                        "src": "354:23:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5888,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "354:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "311:67:47"
                  },
                  "src": "297:82:47"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 5892,
                    "nodeType": "StructuredDocumentation",
                    "src": "385:94:47",
                    "text": " @dev Emitted when `owner` enables `approved` to manage the `tokenId` token."
                  },
                  "id": 5900,
                  "name": "Approval",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 5899,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5894,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5900,
                        "src": "499:21:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5893,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "499:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5896,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "approved",
                        "nodeType": "VariableDeclaration",
                        "scope": 5900,
                        "src": "522:24:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5895,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "522:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5898,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 5900,
                        "src": "548:23:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5897,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "548:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "498:74:47"
                  },
                  "src": "484:89:47"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 5901,
                    "nodeType": "StructuredDocumentation",
                    "src": "579:117:47",
                    "text": " @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
                  },
                  "id": 5909,
                  "name": "ApprovalForAll",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 5908,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5903,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5909,
                        "src": "722:21:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5902,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "722:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5905,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "operator",
                        "nodeType": "VariableDeclaration",
                        "scope": 5909,
                        "src": "745:24:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5904,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "745:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5907,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "approved",
                        "nodeType": "VariableDeclaration",
                        "scope": 5909,
                        "src": "771:13:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5906,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "771:4:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "721:64:47"
                  },
                  "src": "701:85:47"
                },
                {
                  "documentation": {
                    "id": 5910,
                    "nodeType": "StructuredDocumentation",
                    "src": "792:76:47",
                    "text": " @dev Returns the number of tokens in ``owner``'s account."
                  },
                  "functionSelector": "70a08231",
                  "id": 5917,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5913,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5912,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5917,
                        "src": "892:13:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5911,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "892:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "891:15:47"
                  },
                  "returnParameters": {
                    "id": 5916,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5915,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "scope": 5917,
                        "src": "930:15:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5914,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "930:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "929:17:47"
                  },
                  "scope": 5992,
                  "src": "873:74:47",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5918,
                    "nodeType": "StructuredDocumentation",
                    "src": "953:131:47",
                    "text": " @dev Returns the owner of the `tokenId` token.\n Requirements:\n - `tokenId` must exist."
                  },
                  "functionSelector": "6352211e",
                  "id": 5925,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ownerOf",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5921,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5920,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 5925,
                        "src": "1106:15:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5919,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1106:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1105:17:47"
                  },
                  "returnParameters": {
                    "id": 5924,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5923,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5925,
                        "src": "1146:13:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5922,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1146:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1145:15:47"
                  },
                  "scope": 5992,
                  "src": "1089:72:47",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5926,
                    "nodeType": "StructuredDocumentation",
                    "src": "1167:690:47",
                    "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "42842e0e",
                  "id": 5935,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5933,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5928,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 5935,
                        "src": "1888:12:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5927,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1888:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5930,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 5935,
                        "src": "1902:10:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5929,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1902:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5932,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 5935,
                        "src": "1914:15:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5931,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1914:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1887:43:47"
                  },
                  "returnParameters": {
                    "id": 5934,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1939:0:47"
                  },
                  "scope": 5992,
                  "src": "1862:78:47",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5936,
                    "nodeType": "StructuredDocumentation",
                    "src": "1946:504:47",
                    "text": " @dev Transfers `tokenId` token from `from` to `to`.\n WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "23b872dd",
                  "id": 5945,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5943,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5938,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 5945,
                        "src": "2477:12:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5937,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2477:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5940,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 5945,
                        "src": "2491:10:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5939,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2491:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5942,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 5945,
                        "src": "2503:15:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5941,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2503:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2476:43:47"
                  },
                  "returnParameters": {
                    "id": 5944,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2528:0:47"
                  },
                  "scope": 5992,
                  "src": "2455:74:47",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5946,
                    "nodeType": "StructuredDocumentation",
                    "src": "2535:452:47",
                    "text": " @dev Gives permission to `to` to transfer `tokenId` token to another account.\n The approval is cleared when the token is transferred.\n Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n Requirements:\n - The caller must own the token or be an approved operator.\n - `tokenId` must exist.\n Emits an {Approval} event."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 5953,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5951,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5948,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 5953,
                        "src": "3009:10:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5947,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3009:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5950,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 5953,
                        "src": "3021:15:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5949,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3021:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3008:29:47"
                  },
                  "returnParameters": {
                    "id": 5952,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3046:0:47"
                  },
                  "scope": 5992,
                  "src": "2992:55:47",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5954,
                    "nodeType": "StructuredDocumentation",
                    "src": "3053:139:47",
                    "text": " @dev Returns the account approved for `tokenId` token.\n Requirements:\n - `tokenId` must exist."
                  },
                  "functionSelector": "081812fc",
                  "id": 5961,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getApproved",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5957,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5956,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 5961,
                        "src": "3218:15:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5955,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3218:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3217:17:47"
                  },
                  "returnParameters": {
                    "id": 5960,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5959,
                        "mutability": "mutable",
                        "name": "operator",
                        "nodeType": "VariableDeclaration",
                        "scope": 5961,
                        "src": "3258:16:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5958,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3258:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3257:18:47"
                  },
                  "scope": 5992,
                  "src": "3197:79:47",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5962,
                    "nodeType": "StructuredDocumentation",
                    "src": "3282:309:47",
                    "text": " @dev Approve or remove `operator` as an operator for the caller.\n Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n Requirements:\n - The `operator` cannot be the caller.\n Emits an {ApprovalForAll} event."
                  },
                  "functionSelector": "a22cb465",
                  "id": 5969,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovalForAll",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5967,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5964,
                        "mutability": "mutable",
                        "name": "operator",
                        "nodeType": "VariableDeclaration",
                        "scope": 5969,
                        "src": "3623:16:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5963,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3623:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5966,
                        "mutability": "mutable",
                        "name": "_approved",
                        "nodeType": "VariableDeclaration",
                        "scope": 5969,
                        "src": "3641:14:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5965,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3641:4:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3622:34:47"
                  },
                  "returnParameters": {
                    "id": 5968,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3665:0:47"
                  },
                  "scope": 5992,
                  "src": "3596:70:47",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5970,
                    "nodeType": "StructuredDocumentation",
                    "src": "3672:138:47",
                    "text": " @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n See {setApprovalForAll}"
                  },
                  "functionSelector": "e985e9c5",
                  "id": 5979,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isApprovedForAll",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5975,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5972,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 5979,
                        "src": "3841:13:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5971,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3841:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5974,
                        "mutability": "mutable",
                        "name": "operator",
                        "nodeType": "VariableDeclaration",
                        "scope": 5979,
                        "src": "3856:16:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5973,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3856:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3840:33:47"
                  },
                  "returnParameters": {
                    "id": 5978,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5977,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 5979,
                        "src": "3897:4:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5976,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3897:4:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3896:6:47"
                  },
                  "scope": 5992,
                  "src": "3815:88:47",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 5980,
                    "nodeType": "StructuredDocumentation",
                    "src": "3909:568:47",
                    "text": " @dev Safely transfers `tokenId` token from `from` to `to`.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "b88d4fde",
                  "id": 5991,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5989,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5982,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "scope": 5991,
                        "src": "4508:12:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5981,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4508:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5984,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 5991,
                        "src": "4522:10:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5983,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4522:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5986,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 5991,
                        "src": "4534:15:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5985,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4534:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5988,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 5991,
                        "src": "4551:19:47",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 5987,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4551:5:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4507:64:47"
                  },
                  "returnParameters": {
                    "id": 5990,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4580:0:47"
                  },
                  "scope": 5992,
                  "src": "4482:99:47",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5993,
              "src": "169:4414:47"
            }
          ],
          "src": "33:4551:47"
        },
        "id": 47
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol",
          "exportedSymbols": {
            "IERC165": [
              4940
            ],
            "IERC721": [
              5992
            ],
            "IERC721Enumerable": [
              6023
            ]
          },
          "id": 6024,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5994,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:48"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "./IERC721.sol",
              "id": 5995,
              "nodeType": "ImportDirective",
              "scope": 6024,
              "sourceUnit": 5993,
              "src": "58:23:48",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5997,
                    "name": "IERC721",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5992,
                    "src": "251:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC721_$5992",
                      "typeString": "contract IERC721"
                    }
                  },
                  "id": 5998,
                  "nodeType": "InheritanceSpecifier",
                  "src": "251:7:48"
                }
              ],
              "contractDependencies": [
                4940,
                5992
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 5996,
                "nodeType": "StructuredDocumentation",
                "src": "83:136:48",
                "text": " @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n @dev See https://eips.ethereum.org/EIPS/eip-721"
              },
              "fullyImplemented": false,
              "id": 6023,
              "linearizedBaseContracts": [
                6023,
                5992,
                4940
              ],
              "name": "IERC721Enumerable",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 5999,
                    "nodeType": "StructuredDocumentation",
                    "src": "266:82:48",
                    "text": " @dev Returns the total amount of tokens stored by the contract."
                  },
                  "functionSelector": "18160ddd",
                  "id": 6004,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6000,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "373:2:48"
                  },
                  "returnParameters": {
                    "id": 6003,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6002,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6004,
                        "src": "399:7:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6001,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "399:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "398:9:48"
                  },
                  "scope": 6023,
                  "src": "353:55:48",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 6005,
                    "nodeType": "StructuredDocumentation",
                    "src": "414:171:48",
                    "text": " @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n Use along with {balanceOf} to enumerate all of ``owner``'s tokens."
                  },
                  "functionSelector": "2f745c59",
                  "id": 6014,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenOfOwnerByIndex",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6010,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6007,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "scope": 6014,
                        "src": "619:13:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6006,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "619:7:48",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6009,
                        "mutability": "mutable",
                        "name": "index",
                        "nodeType": "VariableDeclaration",
                        "scope": 6014,
                        "src": "634:13:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6008,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "634:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "618:30:48"
                  },
                  "returnParameters": {
                    "id": 6013,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6012,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 6014,
                        "src": "672:15:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6011,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "672:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "671:17:48"
                  },
                  "scope": 6023,
                  "src": "590:99:48",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 6015,
                    "nodeType": "StructuredDocumentation",
                    "src": "695:164:48",
                    "text": " @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n Use along with {totalSupply} to enumerate all tokens."
                  },
                  "functionSelector": "4f6ccce7",
                  "id": 6022,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenByIndex",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6018,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6017,
                        "mutability": "mutable",
                        "name": "index",
                        "nodeType": "VariableDeclaration",
                        "scope": 6022,
                        "src": "886:13:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6016,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "886:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "885:15:48"
                  },
                  "returnParameters": {
                    "id": 6021,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6020,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6022,
                        "src": "924:7:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6019,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "924:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "923:9:48"
                  },
                  "scope": 6023,
                  "src": "864:69:48",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 6024,
              "src": "220:715:48"
            }
          ],
          "src": "33:903:48"
        },
        "id": 48
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol",
          "exportedSymbols": {
            "IERC165": [
              4940
            ],
            "IERC721": [
              5992
            ],
            "IERC721Metadata": [
              6050
            ]
          },
          "id": 6051,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6025,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:49"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "./IERC721.sol",
              "id": 6026,
              "nodeType": "ImportDirective",
              "scope": 6051,
              "sourceUnit": 5993,
              "src": "58:23:49",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 6028,
                    "name": "IERC721",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5992,
                    "src": "246:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC721_$5992",
                      "typeString": "contract IERC721"
                    }
                  },
                  "id": 6029,
                  "nodeType": "InheritanceSpecifier",
                  "src": "246:7:49"
                }
              ],
              "contractDependencies": [
                4940,
                5992
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 6027,
                "nodeType": "StructuredDocumentation",
                "src": "83:133:49",
                "text": " @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n @dev See https://eips.ethereum.org/EIPS/eip-721"
              },
              "fullyImplemented": false,
              "id": 6050,
              "linearizedBaseContracts": [
                6050,
                5992,
                4940
              ],
              "name": "IERC721Metadata",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 6030,
                    "nodeType": "StructuredDocumentation",
                    "src": "261:58:49",
                    "text": " @dev Returns the token collection name."
                  },
                  "functionSelector": "06fdde03",
                  "id": 6035,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6031,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "337:2:49"
                  },
                  "returnParameters": {
                    "id": 6034,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6033,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6035,
                        "src": "363:13:49",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 6032,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "363:6:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "362:15:49"
                  },
                  "scope": 6050,
                  "src": "324:54:49",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 6036,
                    "nodeType": "StructuredDocumentation",
                    "src": "384:60:49",
                    "text": " @dev Returns the token collection symbol."
                  },
                  "functionSelector": "95d89b41",
                  "id": 6041,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6037,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "464:2:49"
                  },
                  "returnParameters": {
                    "id": 6040,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6039,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6041,
                        "src": "490:13:49",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 6038,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "490:6:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "489:15:49"
                  },
                  "scope": 6050,
                  "src": "449:56:49",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 6042,
                    "nodeType": "StructuredDocumentation",
                    "src": "511:90:49",
                    "text": " @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token."
                  },
                  "functionSelector": "c87b56dd",
                  "id": 6049,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenURI",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6045,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6044,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nodeType": "VariableDeclaration",
                        "scope": 6049,
                        "src": "624:15:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6043,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "624:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "623:17:49"
                  },
                  "returnParameters": {
                    "id": 6048,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6047,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6049,
                        "src": "664:13:49",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 6046,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "664:6:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "663:15:49"
                  },
                  "scope": 6050,
                  "src": "606:73:49",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 6051,
              "src": "217:464:49"
            }
          ],
          "src": "33:649:49"
        },
        "id": 49
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
          "exportedSymbols": {
            "Context": [
              6073
            ]
          },
          "id": 6074,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6052,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".0",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:31:50"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 6073,
              "linearizedBaseContracts": [
                6073
              ],
              "name": "Context",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 6060,
                    "nodeType": "Block",
                    "src": "668:34:50",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 6057,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "685:3:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "685:10:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "functionReturnParameters": 6056,
                        "id": 6059,
                        "nodeType": "Return",
                        "src": "678:17:50"
                      }
                    ]
                  },
                  "id": 6061,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgSender",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6053,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "617:2:50"
                  },
                  "returnParameters": {
                    "id": 6056,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6055,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6061,
                        "src": "651:15:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 6054,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "651:15:50",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "650:17:50"
                  },
                  "scope": 6073,
                  "src": "598:104:50",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6071,
                    "nodeType": "Block",
                    "src": "773:165:50",
                    "statements": [
                      {
                        "expression": {
                          "id": 6066,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "783:4:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Context_$6073",
                            "typeString": "contract Context"
                          }
                        },
                        "id": 6067,
                        "nodeType": "ExpressionStatement",
                        "src": "783:4:50"
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 6068,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "923:3:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6069,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "src": "923:8:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "functionReturnParameters": 6065,
                        "id": 6070,
                        "nodeType": "Return",
                        "src": "916:15:50"
                      }
                    ]
                  },
                  "id": 6072,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgData",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6062,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "725:2:50"
                  },
                  "returnParameters": {
                    "id": 6065,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6064,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6072,
                        "src": "759:12:50",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 6063,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "759:5:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "758:14:50"
                  },
                  "scope": 6073,
                  "src": "708:230:50",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 6074,
              "src": "566:374:50"
            }
          ],
          "src": "33:908:50"
        },
        "id": 50
      },
      "@openzeppelin/contracts/utils/Counters.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
          "exportedSymbols": {
            "Counters": [
              6123
            ],
            "SafeMath": [
              5295
            ]
          },
          "id": 6124,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6075,
              "literals": [
                "solidity",
                "^",
                "0.7",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:51"
            },
            {
              "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
              "file": "../math/SafeMath.sol",
              "id": 6076,
              "nodeType": "ImportDirective",
              "scope": 6124,
              "sourceUnit": 5296,
              "src": "58:30:51",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 6077,
                "nodeType": "StructuredDocumentation",
                "src": "90:571:51",
                "text": " @title Counters\n @author Matt Condon (@shrugs)\n @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number\n of elements in a mapping, issuing ERC721 ids, or counting request ids.\n Include with `using Counters for Counters.Counter;`\n Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath}\n overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never\n directly accessed."
              },
              "fullyImplemented": true,
              "id": 6123,
              "linearizedBaseContracts": [
                6123
              ],
              "name": "Counters",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 6080,
                  "libraryName": {
                    "id": 6078,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5295,
                    "src": "691:8:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$5295",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "685:27:51",
                  "typeName": {
                    "id": 6079,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "704:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "canonicalName": "Counters.Counter",
                  "id": 6083,
                  "members": [
                    {
                      "constant": false,
                      "id": 6082,
                      "mutability": "mutable",
                      "name": "_value",
                      "nodeType": "VariableDeclaration",
                      "scope": 6083,
                      "src": "1057:14:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6081,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1057:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Counter",
                  "nodeType": "StructDefinition",
                  "scope": 6123,
                  "src": "718:374:51",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 6093,
                    "nodeType": "Block",
                    "src": "1172:38:51",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 6090,
                            "name": "counter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6085,
                            "src": "1189:7:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                              "typeString": "struct Counters.Counter storage pointer"
                            }
                          },
                          "id": 6091,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6082,
                          "src": "1189:14:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 6089,
                        "id": 6092,
                        "nodeType": "Return",
                        "src": "1182:21:51"
                      }
                    ]
                  },
                  "id": 6094,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "current",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6086,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6085,
                        "mutability": "mutable",
                        "name": "counter",
                        "nodeType": "VariableDeclaration",
                        "scope": 6094,
                        "src": "1115:23:51",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                          "typeString": "struct Counters.Counter"
                        },
                        "typeName": {
                          "id": 6084,
                          "name": "Counter",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 6083,
                          "src": "1115:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                            "typeString": "struct Counters.Counter"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1114:25:51"
                  },
                  "returnParameters": {
                    "id": 6089,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6088,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6094,
                        "src": "1163:7:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6087,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1163:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1162:9:51"
                  },
                  "scope": 6123,
                  "src": "1098:112:51",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6105,
                    "nodeType": "Block",
                    "src": "1269:125:51",
                    "statements": [
                      {
                        "expression": {
                          "id": 6103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 6099,
                              "name": "counter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6096,
                              "src": "1368:7:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                                "typeString": "struct Counters.Counter storage pointer"
                              }
                            },
                            "id": 6101,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6082,
                            "src": "1368:14:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 6102,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1386:1:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "1368:19:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6104,
                        "nodeType": "ExpressionStatement",
                        "src": "1368:19:51"
                      }
                    ]
                  },
                  "id": 6106,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increment",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6097,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6096,
                        "mutability": "mutable",
                        "name": "counter",
                        "nodeType": "VariableDeclaration",
                        "scope": 6106,
                        "src": "1235:23:51",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                          "typeString": "struct Counters.Counter"
                        },
                        "typeName": {
                          "id": 6095,
                          "name": "Counter",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 6083,
                          "src": "1235:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                            "typeString": "struct Counters.Counter"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1234:25:51"
                  },
                  "returnParameters": {
                    "id": 6098,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1269:0:51"
                  },
                  "scope": 6123,
                  "src": "1216:178:51",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6121,
                    "nodeType": "Block",
                    "src": "1453:55:51",
                    "statements": [
                      {
                        "expression": {
                          "id": 6119,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 6111,
                              "name": "counter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6108,
                              "src": "1463:7:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                                "typeString": "struct Counters.Counter storage pointer"
                              }
                            },
                            "id": 6113,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6082,
                            "src": "1463:14:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "31",
                                "id": 6117,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1499:1:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "expression": {
                                  "id": 6114,
                                  "name": "counter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6108,
                                  "src": "1480:7:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                                    "typeString": "struct Counters.Counter storage pointer"
                                  }
                                },
                                "id": 6115,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "_value",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6082,
                                "src": "1480:14:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6116,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5144,
                              "src": "1480:18:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6118,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1480:21:51",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1463:38:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6120,
                        "nodeType": "ExpressionStatement",
                        "src": "1463:38:51"
                      }
                    ]
                  },
                  "id": 6122,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decrement",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6109,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6108,
                        "mutability": "mutable",
                        "name": "counter",
                        "nodeType": "VariableDeclaration",
                        "scope": 6122,
                        "src": "1419:23:51",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                          "typeString": "struct Counters.Counter"
                        },
                        "typeName": {
                          "id": 6107,
                          "name": "Counter",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 6083,
                          "src": "1419:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$6083_storage_ptr",
                            "typeString": "struct Counters.Counter"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1418:25:51"
                  },
                  "returnParameters": {
                    "id": 6110,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1453:0:51"
                  },
                  "scope": 6123,
                  "src": "1400:108:51",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 6124,
              "src": "662:848:51"
            }
          ],
          "src": "33:1478:51"
        },
        "id": 51
      },
      "contracts/CLSwapRouter.sol": {
        "ast": {
          "absolutePath": "contracts/CLSwapRouter.sol",
          "exportedSymbols": {
            "BlockTimestamp": [
              1918
            ],
            "BytesLib": [
              3178
            ],
            "CLSwapRouter": [
              6841
            ],
            "CallbackValidation": [
              3240
            ],
            "Constants": [
              11678
            ],
            "FullMath": [
              913
            ],
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "IAstraCLSwapCallback": [
              41
            ],
            "ICLSwapRouter": [
              8643
            ],
            "IERC20": [
              5876
            ],
            "IOracleSlippage": [
              8818
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IPeripheryPayments": [
              2898
            ],
            "IPeripheryPaymentsExtended": [
              8853
            ],
            "IPeripheryPaymentsWithFee": [
              2931
            ],
            "IPeripheryPaymentsWithFeeExtended": [
              8885
            ],
            "ISAMB": [
              3059
            ],
            "LowGasSafeMath": [
              1043
            ],
            "OracleLibrary": [
              3829
            ],
            "OracleSlippage": [
              8300
            ],
            "Path": [
              3962
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PeripheryPayments": [
              2244
            ],
            "PeripheryPaymentsExtended": [
              8380
            ],
            "PeripheryPaymentsWithFee": [
              2425
            ],
            "PeripheryPaymentsWithFeeExtended": [
              8435
            ],
            "PoolAddress": [
              4054
            ],
            "SafeCast": [
              1113
            ],
            "TickMath": [
              1904
            ],
            "TransferHelper": [
              4225
            ]
          },
          "id": 6842,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6125,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:52"
            },
            {
              "id": 6126,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:52"
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol",
              "id": 6127,
              "nodeType": "ImportDirective",
              "scope": 6842,
              "sourceUnit": 1114,
              "src": "90:64:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/TickMath.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/TickMath.sol",
              "id": 6128,
              "nodeType": "ImportDirective",
              "scope": 6842,
              "sourceUnit": 1905,
              "src": "155:64:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "id": 6129,
              "nodeType": "ImportDirective",
              "scope": 6842,
              "sourceUnit": 28,
              "src": "220:69:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/Path.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/Path.sol",
              "id": 6130,
              "nodeType": "ImportDirective",
              "scope": 6842,
              "sourceUnit": 3963,
              "src": "290:65:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
              "id": 6131,
              "nodeType": "ImportDirective",
              "scope": 6842,
              "sourceUnit": 4055,
              "src": "356:72:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol",
              "id": 6132,
              "nodeType": "ImportDirective",
              "scope": 6842,
              "sourceUnit": 3241,
              "src": "429:79:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 6133,
              "nodeType": "ImportDirective",
              "scope": 6842,
              "sourceUnit": 5877,
              "src": "509:56:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/ICLSwapRouter.sol",
              "file": "./interfaces/ICLSwapRouter.sol",
              "id": 6134,
              "nodeType": "ImportDirective",
              "scope": 6842,
              "sourceUnit": 8644,
              "src": "567:40:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/base/PeripheryPaymentsWithFeeExtended.sol",
              "file": "./base/PeripheryPaymentsWithFeeExtended.sol",
              "id": 6135,
              "nodeType": "ImportDirective",
              "scope": 6842,
              "sourceUnit": 8436,
              "src": "608:53:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/base/OracleSlippage.sol",
              "file": "./base/OracleSlippage.sol",
              "id": 6136,
              "nodeType": "ImportDirective",
              "scope": 6842,
              "sourceUnit": 8301,
              "src": "662:35:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/libraries/Constants.sol",
              "file": "./libraries/Constants.sol",
              "id": 6137,
              "nodeType": "ImportDirective",
              "scope": 6842,
              "sourceUnit": 11679,
              "src": "698:35:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 6139,
                    "name": "ICLSwapRouter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8643,
                    "src": "870:13:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICLSwapRouter_$8643",
                      "typeString": "contract ICLSwapRouter"
                    }
                  },
                  "id": 6140,
                  "nodeType": "InheritanceSpecifier",
                  "src": "870:13:52"
                },
                {
                  "baseName": {
                    "id": 6141,
                    "name": "PeripheryPaymentsWithFeeExtended",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8435,
                    "src": "885:32:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryPaymentsWithFeeExtended_$8435",
                      "typeString": "contract PeripheryPaymentsWithFeeExtended"
                    }
                  },
                  "id": 6142,
                  "nodeType": "InheritanceSpecifier",
                  "src": "885:32:52"
                },
                {
                  "baseName": {
                    "id": 6143,
                    "name": "OracleSlippage",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8300,
                    "src": "919:14:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_OracleSlippage_$8300",
                      "typeString": "contract OracleSlippage"
                    }
                  },
                  "id": 6144,
                  "nodeType": "InheritanceSpecifier",
                  "src": "919:14:52"
                }
              ],
              "contractDependencies": [
                41,
                1918,
                2034,
                2244,
                2425,
                2872,
                2898,
                2931,
                8300,
                8380,
                8435,
                8643,
                8818,
                8853,
                8885
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 6138,
                "nodeType": "StructuredDocumentation",
                "src": "735:101:52",
                "text": "@title Astra CL Swap Router\n @notice Router for stateless execution of swaps against Astra CL"
              },
              "fullyImplemented": false,
              "id": 6841,
              "linearizedBaseContracts": [
                6841,
                8300,
                1918,
                8435,
                2425,
                8380,
                8885,
                2931,
                2244,
                2034,
                2872,
                8818,
                8853,
                2898,
                8643,
                41
              ],
              "name": "CLSwapRouter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 6147,
                  "libraryName": {
                    "id": 6145,
                    "name": "Path",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3962,
                    "src": "946:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Path_$3962",
                      "typeString": "library Path"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "940:21:52",
                  "typeName": {
                    "id": 6146,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "955:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  }
                },
                {
                  "id": 6150,
                  "libraryName": {
                    "id": 6148,
                    "name": "SafeCast",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1113,
                    "src": "972:8:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeCast_$1113",
                      "typeString": "library SafeCast"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "966:27:52",
                  "typeName": {
                    "id": 6149,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "985:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 6151,
                    "nodeType": "StructuredDocumentation",
                    "src": "999:155:52",
                    "text": "@dev Used as the placeholder value for amountInCached, because the computed amount in for an exact output swap\n can never actually be this value"
                  },
                  "id": 6158,
                  "mutability": "constant",
                  "name": "DEFAULT_AMOUNT_IN_CACHED",
                  "nodeType": "VariableDeclaration",
                  "scope": 6841,
                  "src": "1159:69:52",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6152,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1159:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 6155,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1216:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 6154,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1216:7:52",
                            "typeDescriptions": {}
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "id": 6153,
                        "name": "type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -27,
                        "src": "1211:4:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 6156,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1211:13:52",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_meta_type_t_uint256",
                        "typeString": "type(uint256)"
                      }
                    },
                    "id": 6157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "max",
                    "nodeType": "MemberAccess",
                    "src": "1211:17:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 6159,
                    "nodeType": "StructuredDocumentation",
                    "src": "1235:103:52",
                    "text": "@dev Transient storage variable used for returning the computed amount in for an exact output swap."
                  },
                  "id": 6162,
                  "mutability": "mutable",
                  "name": "amountInCached",
                  "nodeType": "VariableDeclaration",
                  "scope": 6841,
                  "src": "1343:57:52",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6160,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1343:7:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "id": 6161,
                    "name": "DEFAULT_AMOUNT_IN_CACHED",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6158,
                    "src": "1376:24:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 6187,
                    "nodeType": "Block",
                    "src": "1638:118:52",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 6177,
                                  "name": "factory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2013,
                                  "src": "1695:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 6180,
                                      "name": "tokenA",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6165,
                                      "src": "1727:6:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 6181,
                                      "name": "tokenB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6167,
                                      "src": "1735:6:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 6182,
                                      "name": "fee",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6169,
                                      "src": "1743:3:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      }
                                    ],
                                    "expression": {
                                      "id": 6178,
                                      "name": "PoolAddress",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4054,
                                      "src": "1704:11:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                        "typeString": "type(library PoolAddress)"
                                      }
                                    },
                                    "id": 6179,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "getPoolKey",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4006,
                                    "src": "1704:22:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint24_$returns$_t_struct$_PoolKey_$3975_memory_ptr_$",
                                      "typeString": "function (address,address,uint24) pure returns (struct PoolAddress.PoolKey memory)"
                                    }
                                  },
                                  "id": 6183,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1704:43:52",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                ],
                                "expression": {
                                  "id": 6175,
                                  "name": "PoolAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4054,
                                  "src": "1668:11:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                    "typeString": "type(library PoolAddress)"
                                  }
                                },
                                "id": 6176,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "computeAddress",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4053,
                                "src": "1668:26:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$_t_struct$_PoolKey_$3975_memory_ptr_$returns$_t_address_$",
                                  "typeString": "function (address,struct PoolAddress.PoolKey memory) pure returns (address)"
                                }
                              },
                              "id": 6184,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1668:80:52",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 6174,
                            "name": "IAstraCLPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27,
                            "src": "1655:12:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "type(contract IAstraCLPool)"
                            }
                          },
                          "id": 6185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1655:94:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "functionReturnParameters": 6173,
                        "id": 6186,
                        "nodeType": "Return",
                        "src": "1648:101:52"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6163,
                    "nodeType": "StructuredDocumentation",
                    "src": "1407:99:52",
                    "text": "@dev Returns the pool for the given token pair and fee. The pool contract may or may not exist."
                  },
                  "id": 6188,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPool",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6170,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6165,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 6188,
                        "src": "1537:14:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6164,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1537:7:52",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6167,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 6188,
                        "src": "1561:14:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6166,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1561:7:52",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6169,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 6188,
                        "src": "1585:10:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 6168,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1585:6:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1527:74:52"
                  },
                  "returnParameters": {
                    "id": 6173,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6172,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 6188,
                        "src": "1624:12:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 6171,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "1624:12:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1623:14:52"
                  },
                  "scope": 6841,
                  "src": "1511:245:52",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "canonicalName": "CLSwapRouter.SwapCallbackData",
                  "id": 6193,
                  "members": [
                    {
                      "constant": false,
                      "id": 6190,
                      "mutability": "mutable",
                      "name": "path",
                      "nodeType": "VariableDeclaration",
                      "scope": 6193,
                      "src": "1796:10:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 6189,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1796:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6192,
                      "mutability": "mutable",
                      "name": "payer",
                      "nodeType": "VariableDeclaration",
                      "scope": 6193,
                      "src": "1816:13:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6191,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1816:7:52",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "SwapCallbackData",
                  "nodeType": "StructDefinition",
                  "scope": 6841,
                  "src": "1762:74:52",
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    40
                  ],
                  "body": {
                    "id": 6318,
                    "nodeType": "Block",
                    "src": "2024:1178:52",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 6211,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 6207,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6205,
                                  "name": "amount0Delta",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6196,
                                  "src": "2042:12:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 6206,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2057:1:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2042:16:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 6210,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6208,
                                  "name": "amount1Delta",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6198,
                                  "src": "2062:12:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 6209,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2077:1:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2062:16:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2042:36:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 6204,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2034:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 6212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2034:45:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6213,
                        "nodeType": "ExpressionStatement",
                        "src": "2034:45:52"
                      },
                      {
                        "assignments": [
                          6215
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6215,
                            "mutability": "mutable",
                            "name": "data",
                            "nodeType": "VariableDeclaration",
                            "scope": 6318,
                            "src": "2152:28:52",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                              "typeString": "struct CLSwapRouter.SwapCallbackData"
                            },
                            "typeName": {
                              "id": 6214,
                              "name": "SwapCallbackData",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 6193,
                              "src": "2152:16:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SwapCallbackData_$6193_storage_ptr",
                                "typeString": "struct CLSwapRouter.SwapCallbackData"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6222,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6218,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6200,
                              "src": "2194:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 6219,
                                  "name": "SwapCallbackData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6193,
                                  "src": "2202:16:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_SwapCallbackData_$6193_storage_ptr_$",
                                    "typeString": "type(struct CLSwapRouter.SwapCallbackData storage pointer)"
                                  }
                                }
                              ],
                              "id": 6220,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2201:18:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_SwapCallbackData_$6193_storage_ptr_$",
                                "typeString": "type(struct CLSwapRouter.SwapCallbackData storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_SwapCallbackData_$6193_storage_ptr_$",
                                "typeString": "type(struct CLSwapRouter.SwapCallbackData storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 6216,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2183:3:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 6217,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "2183:10:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 6221,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2183:37:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                            "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2152:68:52"
                      },
                      {
                        "assignments": [
                          6224,
                          6226,
                          6228
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6224,
                            "mutability": "mutable",
                            "name": "tokenIn",
                            "nodeType": "VariableDeclaration",
                            "scope": 6318,
                            "src": "2231:15:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 6223,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2231:7:52",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6226,
                            "mutability": "mutable",
                            "name": "tokenOut",
                            "nodeType": "VariableDeclaration",
                            "scope": 6318,
                            "src": "2248:16:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 6225,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2248:7:52",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6228,
                            "mutability": "mutable",
                            "name": "fee",
                            "nodeType": "VariableDeclaration",
                            "scope": 6318,
                            "src": "2266:10:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            },
                            "typeName": {
                              "id": 6227,
                              "name": "uint24",
                              "nodeType": "ElementaryTypeName",
                              "src": "2266:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6233,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "expression": {
                                "id": 6229,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6215,
                                "src": "2280:4:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                  "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                }
                              },
                              "id": 6230,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "path",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6190,
                              "src": "2280:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 6231,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "decodeFirstPool",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3928,
                            "src": "2280:25:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                            }
                          },
                          "id": 6232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2280:27:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                            "typeString": "tuple(address,address,uint24)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2230:77:52"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6237,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2013,
                              "src": "2351:7:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6238,
                              "name": "tokenIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6224,
                              "src": "2360:7:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6239,
                              "name": "tokenOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6226,
                              "src": "2369:8:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6240,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6228,
                              "src": "2379:3:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            ],
                            "expression": {
                              "id": 6234,
                              "name": "CallbackValidation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3240,
                              "src": "2317:18:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_CallbackValidation_$3240_$",
                                "typeString": "type(library CallbackValidation)"
                              }
                            },
                            "id": 6236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "verifyCallback",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3208,
                            "src": "2317:33:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "function (address,address,address,uint24) view returns (contract IAstraCLPool)"
                            }
                          },
                          "id": 6241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2317:66:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "id": 6242,
                        "nodeType": "ExpressionStatement",
                        "src": "2317:66:52"
                      },
                      {
                        "assignments": [
                          6244,
                          6246
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6244,
                            "mutability": "mutable",
                            "name": "isExactInput",
                            "nodeType": "VariableDeclaration",
                            "scope": 6318,
                            "src": "2395:17:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6243,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2395:4:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6246,
                            "mutability": "mutable",
                            "name": "amountToPay",
                            "nodeType": "VariableDeclaration",
                            "scope": 6318,
                            "src": "2414:19:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6245,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2414:7:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6267,
                        "initialValue": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "id": 6249,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 6247,
                              "name": "amount0Delta",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6196,
                              "src": "2449:12:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 6248,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2464:1:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "2449:16:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 6260,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6258,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6226,
                                  "src": "2547:8:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 6259,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6224,
                                  "src": "2558:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2547:18:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 6263,
                                    "name": "amount1Delta",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6198,
                                    "src": "2575:12:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 6262,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2567:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 6261,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2567:7:52",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 6264,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2567:21:52",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 6265,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "2546:43:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                              "typeString": "tuple(bool,uint256)"
                            }
                          },
                          "id": 6266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "2449:140:52",
                          "trueExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 6252,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6250,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6224,
                                  "src": "2485:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 6251,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6226,
                                  "src": "2495:8:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2485:18:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 6255,
                                    "name": "amount0Delta",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6196,
                                    "src": "2513:12:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 6254,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2505:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 6253,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2505:7:52",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 6256,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2505:21:52",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 6257,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "2484:43:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                              "typeString": "tuple(bool,uint256)"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2394:195:52"
                      },
                      {
                        "condition": {
                          "id": 6268,
                          "name": "isExactInput",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6244,
                          "src": "2604:12:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6316,
                          "nodeType": "Block",
                          "src": "2698:498:52",
                          "statements": [
                            {
                              "condition": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "expression": {
                                      "id": 6279,
                                      "name": "data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6215,
                                      "src": "2768:4:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                        "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                      }
                                    },
                                    "id": 6280,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "path",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6190,
                                    "src": "2768:9:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 6281,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "hasMultiplePools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3876,
                                  "src": "2768:26:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (bool)"
                                  }
                                },
                                "id": 6282,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2768:28:52",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 6314,
                                "nodeType": "Block",
                                "src": "2941:245:52",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 6303,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 6301,
                                        "name": "amountInCached",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6162,
                                        "src": "2959:14:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 6302,
                                        "name": "amountToPay",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6246,
                                        "src": "2976:11:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "2959:28:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6304,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2959:28:52"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 6306,
                                          "name": "tokenOut",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6226,
                                          "src": "3125:8:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "expression": {
                                            "id": 6307,
                                            "name": "data",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6215,
                                            "src": "3135:4:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                              "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                            }
                                          },
                                          "id": 6308,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "payer",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6192,
                                          "src": "3135:10:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "expression": {
                                            "id": 6309,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "3147:3:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_message",
                                              "typeString": "msg"
                                            }
                                          },
                                          "id": 6310,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "sender",
                                          "nodeType": "MemberAccess",
                                          "src": "3147:10:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                          }
                                        },
                                        {
                                          "id": 6311,
                                          "name": "amountToPay",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6246,
                                          "src": "3159:11:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 6305,
                                        "name": "pay",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2243,
                                        "src": "3121:3:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                          "typeString": "function (address,address,address,uint256)"
                                        }
                                      },
                                      "id": 6312,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "3121:50:52",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 6313,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3121:50:52"
                                  }
                                ]
                              },
                              "id": 6315,
                              "nodeType": "IfStatement",
                              "src": "2764:422:52",
                              "trueBody": {
                                "id": 6300,
                                "nodeType": "Block",
                                "src": "2798:137:52",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 6290,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "expression": {
                                          "id": 6283,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6215,
                                          "src": "2816:4:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                            "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                          }
                                        },
                                        "id": 6285,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "path",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6190,
                                        "src": "2816:9:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "expression": {
                                              "id": 6286,
                                              "name": "data",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6215,
                                              "src": "2828:4:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                                "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                              }
                                            },
                                            "id": 6287,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "path",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6190,
                                            "src": "2828:9:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 6288,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "skipToken",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3961,
                                          "src": "2828:19:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                            "typeString": "function (bytes memory) pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 6289,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2828:21:52",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "src": "2816:33:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 6291,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2816:33:52"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 6293,
                                          "name": "amountToPay",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6246,
                                          "src": "2887:11:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "expression": {
                                            "id": 6294,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "2900:3:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_message",
                                              "typeString": "msg"
                                            }
                                          },
                                          "id": 6295,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "sender",
                                          "nodeType": "MemberAccess",
                                          "src": "2900:10:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                          }
                                        },
                                        {
                                          "hexValue": "30",
                                          "id": 6296,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "2912:1:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        },
                                        {
                                          "id": 6297,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6215,
                                          "src": "2915:4:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                            "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                          },
                                          {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          {
                                            "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                            "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                          }
                                        ],
                                        "id": 6292,
                                        "name": "exactOutputInternal",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6754,
                                        "src": "2867:19:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint160_$_t_struct$_SwapCallbackData_$6193_memory_ptr_$returns$_t_uint256_$",
                                          "typeString": "function (uint256,address,uint160,struct CLSwapRouter.SwapCallbackData memory) returns (uint256)"
                                        }
                                      },
                                      "id": 6298,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2867:53:52",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6299,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2867:53:52"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "id": 6317,
                        "nodeType": "IfStatement",
                        "src": "2600:596:52",
                        "trueBody": {
                          "id": 6278,
                          "nodeType": "Block",
                          "src": "2618:74:52",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 6270,
                                    "name": "tokenIn",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6224,
                                    "src": "2636:7:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 6271,
                                      "name": "data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6215,
                                      "src": "2645:4:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                        "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                      }
                                    },
                                    "id": 6272,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "payer",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6192,
                                    "src": "2645:10:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 6273,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "2657:3:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 6274,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "2657:10:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "id": 6275,
                                    "name": "amountToPay",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6246,
                                    "src": "2669:11:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6269,
                                  "name": "pay",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2243,
                                  "src": "2632:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,address,uint256)"
                                  }
                                },
                                "id": 6276,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2632:49:52",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6277,
                              "nodeType": "ExpressionStatement",
                              "src": "2632:49:52"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6194,
                    "nodeType": "StructuredDocumentation",
                    "src": "1842:36:52",
                    "text": "@inheritdoc IAstraCLSwapCallback"
                  },
                  "functionSelector": "11c17848",
                  "id": 6319,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "astraCLSwapCallback",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6202,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2015:8:52"
                  },
                  "parameters": {
                    "id": 6201,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6196,
                        "mutability": "mutable",
                        "name": "amount0Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 6319,
                        "src": "1921:19:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 6195,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1921:6:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6198,
                        "mutability": "mutable",
                        "name": "amount1Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 6319,
                        "src": "1950:19:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 6197,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1950:6:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6200,
                        "mutability": "mutable",
                        "name": "_data",
                        "nodeType": "VariableDeclaration",
                        "scope": 6319,
                        "src": "1979:20:52",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 6199,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1979:5:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1911:94:52"
                  },
                  "returnParameters": {
                    "id": 6203,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2024:0:52"
                  },
                  "scope": 6841,
                  "src": "1883:1319:52",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 6419,
                    "nodeType": "Block",
                    "src": "3452:811:52",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6333,
                            "name": "recipient",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6324,
                            "src": "3514:9:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 6334,
                              "name": "Constants",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11678,
                              "src": "3527:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Constants_$11678_$",
                                "typeString": "type(library Constants)"
                              }
                            },
                            "id": 6335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "MSG_SENDER",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11670,
                            "src": "3527:20:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3514:33:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 6345,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 6342,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6324,
                              "src": "3590:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "id": 6343,
                                "name": "Constants",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11678,
                                "src": "3603:9:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Constants_$11678_$",
                                  "typeString": "type(library Constants)"
                                }
                              },
                              "id": 6344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "ADDRESS_THIS",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11677,
                              "src": "3603:22:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "3590:35:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 6353,
                          "nodeType": "IfStatement",
                          "src": "3586:66:52",
                          "trueBody": {
                            "expression": {
                              "id": 6351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6346,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6324,
                                "src": "3627:9:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "id": 6349,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "3647:4:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                      "typeString": "contract CLSwapRouter"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                      "typeString": "contract CLSwapRouter"
                                    }
                                  ],
                                  "id": 6348,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3639:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 6347,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3639:7:52",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 6350,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3639:13:52",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "3627:25:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 6352,
                            "nodeType": "ExpressionStatement",
                            "src": "3627:25:52"
                          }
                        },
                        "id": 6354,
                        "nodeType": "IfStatement",
                        "src": "3510:142:52",
                        "trueBody": {
                          "expression": {
                            "id": 6340,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 6337,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6324,
                              "src": "3549:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "expression": {
                                "id": 6338,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3561:3:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6339,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3561:10:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "3549:22:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 6341,
                          "nodeType": "ExpressionStatement",
                          "src": "3549:22:52"
                        }
                      },
                      {
                        "assignments": [
                          6356,
                          6358,
                          6360
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6356,
                            "mutability": "mutable",
                            "name": "tokenIn",
                            "nodeType": "VariableDeclaration",
                            "scope": 6419,
                            "src": "3664:15:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 6355,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3664:7:52",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6358,
                            "mutability": "mutable",
                            "name": "tokenOut",
                            "nodeType": "VariableDeclaration",
                            "scope": 6419,
                            "src": "3681:16:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 6357,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3681:7:52",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6360,
                            "mutability": "mutable",
                            "name": "fee",
                            "nodeType": "VariableDeclaration",
                            "scope": 6419,
                            "src": "3699:10:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            },
                            "typeName": {
                              "id": 6359,
                              "name": "uint24",
                              "nodeType": "ElementaryTypeName",
                              "src": "3699:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6365,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "expression": {
                                "id": 6361,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6328,
                                "src": "3713:4:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                  "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                }
                              },
                              "id": 6362,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "path",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6190,
                              "src": "3713:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 6363,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "decodeFirstPool",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3928,
                            "src": "3713:25:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                            }
                          },
                          "id": 6364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3713:27:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                            "typeString": "tuple(address,address,uint24)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3663:77:52"
                      },
                      {
                        "assignments": [
                          6367
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6367,
                            "mutability": "mutable",
                            "name": "zeroForOne",
                            "nodeType": "VariableDeclaration",
                            "scope": 6419,
                            "src": "3751:15:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6366,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3751:4:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6371,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6368,
                            "name": "tokenIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6356,
                            "src": "3769:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 6369,
                            "name": "tokenOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6358,
                            "src": "3779:8:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3769:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3751:36:52"
                      },
                      {
                        "assignments": [
                          6373,
                          6375
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6373,
                            "mutability": "mutable",
                            "name": "amount0",
                            "nodeType": "VariableDeclaration",
                            "scope": 6419,
                            "src": "3799:14:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 6372,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3799:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6375,
                            "mutability": "mutable",
                            "name": "amount1",
                            "nodeType": "VariableDeclaration",
                            "scope": 6419,
                            "src": "3815:14:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 6374,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3815:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6408,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6382,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6324,
                              "src": "3899:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6383,
                              "name": "zeroForOne",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6367,
                              "src": "3926:10:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 6384,
                                  "name": "amountIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6322,
                                  "src": "3954:8:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 6385,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1112,
                                "src": "3954:17:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 6386,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3954:19:52",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 6389,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6387,
                                  "name": "sqrtPriceLimitX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6326,
                                  "src": "3991:17:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 6388,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4012:1:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3991:22:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "id": 6401,
                                "name": "sqrtPriceLimitX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6326,
                                "src": "4131:17:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "id": 6402,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "3991:157:52",
                              "trueExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "id": 6390,
                                      "name": "zeroForOne",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6367,
                                      "src": "4037:10:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 6398,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 6395,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "4080:8:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 6396,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MAX_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1390,
                                        "src": "4080:23:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 6397,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "4106:1:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "4080:27:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "id": 6399,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "4037:70:52",
                                    "trueExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 6394,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 6391,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "4050:8:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 6392,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MIN_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1386,
                                        "src": "4050:23:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 6393,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "4076:1:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "4050:27:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  }
                                ],
                                "id": 6400,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4036:72:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 6405,
                                  "name": "data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6328,
                                  "src": "4177:4:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                    "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                    "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                  }
                                ],
                                "expression": {
                                  "id": 6403,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "4166:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 6404,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "4166:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 6406,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4166:16:52",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6377,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6356,
                                  "src": "3853:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 6378,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6358,
                                  "src": "3862:8:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 6379,
                                  "name": "fee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6360,
                                  "src": "3872:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                ],
                                "id": 6376,
                                "name": "getPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6188,
                                "src": "3845:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "function (address,address,uint24) view returns (contract IAstraCLPool)"
                                }
                              },
                              "id": 6380,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3845:31:52",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 6381,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 118,
                            "src": "3845:36:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            }
                          },
                          "id": 6407,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3845:351:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3798:398:52"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6416,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "4222:33:52",
                              "subExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "id": 6411,
                                      "name": "zeroForOne",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6367,
                                      "src": "4224:10:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "id": 6413,
                                      "name": "amount0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6373,
                                      "src": "4247:7:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "id": 6414,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "4224:30:52",
                                    "trueExpression": {
                                      "id": 6412,
                                      "name": "amount1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6375,
                                      "src": "4237:7:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "id": 6415,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4223:32:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 6410,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4214:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 6409,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4214:7:52",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6417,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4214:42:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 6332,
                        "id": 6418,
                        "nodeType": "Return",
                        "src": "4207:49:52"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6320,
                    "nodeType": "StructuredDocumentation",
                    "src": "3208:43:52",
                    "text": "@dev Performs a single exact input swap"
                  },
                  "id": 6420,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exactInputInternal",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6329,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6322,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 6420,
                        "src": "3293:16:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6321,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3293:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6324,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 6420,
                        "src": "3319:17:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6323,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3319:7:52",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6326,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 6420,
                        "src": "3346:25:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 6325,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "3346:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6328,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 6420,
                        "src": "3381:28:52",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                          "typeString": "struct CLSwapRouter.SwapCallbackData"
                        },
                        "typeName": {
                          "id": 6327,
                          "name": "SwapCallbackData",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 6193,
                          "src": "3381:16:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SwapCallbackData_$6193_storage_ptr",
                            "typeString": "struct CLSwapRouter.SwapCallbackData"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3283:132:52"
                  },
                  "returnParameters": {
                    "id": 6332,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6331,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 6420,
                        "src": "3433:17:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6330,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3433:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3432:19:52"
                  },
                  "scope": 6841,
                  "src": "3256:1007:52",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    8585
                  ],
                  "body": {
                    "id": 6496,
                    "nodeType": "Block",
                    "src": "4457:753:52",
                    "statements": [
                      {
                        "assignments": [
                          6430
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6430,
                            "mutability": "mutable",
                            "name": "hasAlreadyPaid",
                            "nodeType": "VariableDeclaration",
                            "scope": 6496,
                            "src": "4574:19:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6429,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4574:4:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6431,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4574:19:52"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6436,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 6432,
                              "name": "params",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6423,
                              "src": "4607:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                                "typeString": "struct ICLSwapRouter.ExactInputSingleParams memory"
                              }
                            },
                            "id": 6433,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "amountIn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8572,
                            "src": "4607:15:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 6434,
                              "name": "Constants",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11678,
                              "src": "4626:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Constants_$11678_$",
                                "typeString": "type(library Constants)"
                              }
                            },
                            "id": 6435,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "CONTRACT_BALANCE",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11663,
                            "src": "4626:26:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4607:45:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6457,
                        "nodeType": "IfStatement",
                        "src": "4603:176:52",
                        "trueBody": {
                          "id": 6456,
                          "nodeType": "Block",
                          "src": "4654:125:52",
                          "statements": [
                            {
                              "expression": {
                                "id": 6439,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 6437,
                                  "name": "hasAlreadyPaid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6430,
                                  "src": "4668:14:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "74727565",
                                  "id": 6438,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4685:4:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "4668:21:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6440,
                              "nodeType": "ExpressionStatement",
                              "src": "4668:21:52"
                            },
                            {
                              "expression": {
                                "id": 6454,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "id": 6441,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6423,
                                    "src": "4703:6:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                                      "typeString": "struct ICLSwapRouter.ExactInputSingleParams memory"
                                    }
                                  },
                                  "id": 6443,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "amountIn",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8572,
                                  "src": "4703:15:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 6451,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "4762:4:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                            "typeString": "contract CLSwapRouter"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                            "typeString": "contract CLSwapRouter"
                                          }
                                        ],
                                        "id": 6450,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "4754:7:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 6449,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "4754:7:52",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 6452,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4754:13:52",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 6445,
                                            "name": "params",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6423,
                                            "src": "4728:6:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                                              "typeString": "struct ICLSwapRouter.ExactInputSingleParams memory"
                                            }
                                          },
                                          "id": 6446,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "tokenIn",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 8564,
                                          "src": "4728:14:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 6444,
                                        "name": "IERC20",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5876,
                                        "src": "4721:6:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                          "typeString": "type(contract IERC20)"
                                        }
                                      },
                                      "id": 6447,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4721:22:52",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$5876",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 6448,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balanceOf",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5815,
                                    "src": "4721:32:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                      "typeString": "function (address) view external returns (uint256)"
                                    }
                                  },
                                  "id": 6453,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4721:47:52",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4703:65:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6455,
                              "nodeType": "ExpressionStatement",
                              "src": "4703:65:52"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 6486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6458,
                            "name": "amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6427,
                            "src": "4789:9:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 6460,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6423,
                                  "src": "4833:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                                    "typeString": "struct ICLSwapRouter.ExactInputSingleParams memory"
                                  }
                                },
                                "id": 6461,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amountIn",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8572,
                                "src": "4833:15:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "expression": {
                                  "id": 6462,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6423,
                                  "src": "4862:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                                    "typeString": "struct ICLSwapRouter.ExactInputSingleParams memory"
                                  }
                                },
                                "id": 6463,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "recipient",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8570,
                                "src": "4862:16:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "expression": {
                                  "id": 6464,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6423,
                                  "src": "4892:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                                    "typeString": "struct ICLSwapRouter.ExactInputSingleParams memory"
                                  }
                                },
                                "id": 6465,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sqrtPriceLimitX96",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8576,
                                "src": "4892:24:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 6469,
                                          "name": "params",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6423,
                                          "src": "4988:6:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                                            "typeString": "struct ICLSwapRouter.ExactInputSingleParams memory"
                                          }
                                        },
                                        "id": 6470,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "tokenIn",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 8564,
                                        "src": "4988:14:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 6471,
                                          "name": "params",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6423,
                                          "src": "5004:6:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                                            "typeString": "struct ICLSwapRouter.ExactInputSingleParams memory"
                                          }
                                        },
                                        "id": 6472,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "fee",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 8568,
                                        "src": "5004:10:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint24",
                                          "typeString": "uint24"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 6473,
                                          "name": "params",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6423,
                                          "src": "5016:6:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                                            "typeString": "struct ICLSwapRouter.ExactInputSingleParams memory"
                                          }
                                        },
                                        "id": 6474,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "tokenOut",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 8566,
                                        "src": "5016:15:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint24",
                                          "typeString": "uint24"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "expression": {
                                        "id": 6467,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "4971:3:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 6468,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "encodePacked",
                                      "nodeType": "MemberAccess",
                                      "src": "4971:16:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 6475,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4971:61:52",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  {
                                    "condition": {
                                      "id": 6476,
                                      "name": "hasAlreadyPaid",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6430,
                                      "src": "5057:14:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "expression": {
                                        "id": 6481,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "5090:3:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 6482,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "5090:10:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "id": 6483,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "5057:43:52",
                                    "trueExpression": {
                                      "arguments": [
                                        {
                                          "id": 6479,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "5082:4:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                            "typeString": "contract CLSwapRouter"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                            "typeString": "contract CLSwapRouter"
                                          }
                                        ],
                                        "id": 6478,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "5074:7:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 6477,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "5074:7:52",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 6480,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5074:13:52",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 6466,
                                  "name": "SwapCallbackData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6193,
                                  "src": "4930:16:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_SwapCallbackData_$6193_storage_ptr_$",
                                    "typeString": "type(struct CLSwapRouter.SwapCallbackData storage pointer)"
                                  }
                                },
                                "id": 6484,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [
                                  "path",
                                  "payer"
                                ],
                                "nodeType": "FunctionCall",
                                "src": "4930:185:52",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                  "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                  "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                }
                              ],
                              "id": 6459,
                              "name": "exactInputInternal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6420,
                              "src": "4801:18:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint160_$_t_struct$_SwapCallbackData_$6193_memory_ptr_$returns$_t_uint256_$",
                                "typeString": "function (uint256,address,uint160,struct CLSwapRouter.SwapCallbackData memory) returns (uint256)"
                              }
                            },
                            "id": 6485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4801:324:52",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4789:336:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6487,
                        "nodeType": "ExpressionStatement",
                        "src": "4789:336:52"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6492,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6489,
                                "name": "amountOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6427,
                                "src": "5143:9:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "expression": {
                                  "id": 6490,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6423,
                                  "src": "5156:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                                    "typeString": "struct ICLSwapRouter.ExactInputSingleParams memory"
                                  }
                                },
                                "id": 6491,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amountOutMinimum",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8574,
                                "src": "5156:23:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5143:36:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "546f6f206c6974746c65207265636569766564",
                              "id": 6493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5181:21:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f037a9cbca9be03859489f289f0cf5f85c0414bbfdd9785bc7ab31bd734e249c",
                                "typeString": "literal_string \"Too little received\""
                              },
                              "value": "Too little received"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f037a9cbca9be03859489f289f0cf5f85c0414bbfdd9785bc7ab31bd734e249c",
                                "typeString": "literal_string \"Too little received\""
                              }
                            ],
                            "id": 6488,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5135:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5135:68:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6495,
                        "nodeType": "ExpressionStatement",
                        "src": "5135:68:52"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6421,
                    "nodeType": "StructuredDocumentation",
                    "src": "4269:29:52",
                    "text": "@inheritdoc ICLSwapRouter"
                  },
                  "functionSelector": "04e45aaf",
                  "id": 6497,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exactInputSingle",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6425,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4408:8:52"
                  },
                  "parameters": {
                    "id": 6424,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6423,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 6497,
                        "src": "4329:36:52",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_memory_ptr",
                          "typeString": "struct ICLSwapRouter.ExactInputSingleParams"
                        },
                        "typeName": {
                          "id": 6422,
                          "name": "ExactInputSingleParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8577,
                          "src": "4329:22:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_storage_ptr",
                            "typeString": "struct ICLSwapRouter.ExactInputSingleParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4328:38:52"
                  },
                  "returnParameters": {
                    "id": 6428,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6427,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 6497,
                        "src": "4434:17:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6426,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4434:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4433:19:52"
                  },
                  "scope": 6841,
                  "src": "4303:907:52",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8602
                  ],
                  "body": {
                    "id": 6621,
                    "nodeType": "Block",
                    "src": "5356:1434:52",
                    "statements": [
                      {
                        "assignments": [
                          6507
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6507,
                            "mutability": "mutable",
                            "name": "hasAlreadyPaid",
                            "nodeType": "VariableDeclaration",
                            "scope": 6621,
                            "src": "5473:19:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6506,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5473:4:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6508,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5473:19:52"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6513,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 6509,
                              "name": "params",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6500,
                              "src": "5506:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                              }
                            },
                            "id": 6510,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "amountIn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8591,
                            "src": "5506:15:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 6511,
                              "name": "Constants",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11678,
                              "src": "5525:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Constants_$11678_$",
                                "typeString": "type(library Constants)"
                              }
                            },
                            "id": 6512,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "CONTRACT_BALANCE",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11663,
                            "src": "5525:26:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5506:45:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6540,
                        "nodeType": "IfStatement",
                        "src": "5502:236:52",
                        "trueBody": {
                          "id": 6539,
                          "nodeType": "Block",
                          "src": "5553:185:52",
                          "statements": [
                            {
                              "expression": {
                                "id": 6516,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 6514,
                                  "name": "hasAlreadyPaid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6507,
                                  "src": "5567:14:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "74727565",
                                  "id": 6515,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5584:4:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "5567:21:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6517,
                              "nodeType": "ExpressionStatement",
                              "src": "5567:21:52"
                            },
                            {
                              "assignments": [
                                6519,
                                null,
                                null
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6519,
                                  "mutability": "mutable",
                                  "name": "tokenIn",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6539,
                                  "src": "5603:15:52",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 6518,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5603:7:52",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                null,
                                null
                              ],
                              "id": 6524,
                              "initialValue": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "expression": {
                                      "id": 6520,
                                      "name": "params",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6500,
                                      "src": "5626:6:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                        "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                                      }
                                    },
                                    "id": 6521,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "path",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 8587,
                                    "src": "5626:11:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 6522,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decodeFirstPool",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3928,
                                  "src": "5626:27:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                                  }
                                },
                                "id": 6523,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5626:29:52",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                                  "typeString": "tuple(address,address,uint24)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5602:53:52"
                            },
                            {
                              "expression": {
                                "id": 6537,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "id": 6525,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6500,
                                    "src": "5669:6:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                      "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                                    }
                                  },
                                  "id": 6527,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "amountIn",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8591,
                                  "src": "5669:15:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 6534,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "5721:4:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                            "typeString": "contract CLSwapRouter"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                            "typeString": "contract CLSwapRouter"
                                          }
                                        ],
                                        "id": 6533,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "5713:7:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 6532,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "5713:7:52",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 6535,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5713:13:52",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 6529,
                                          "name": "tokenIn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6519,
                                          "src": "5694:7:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 6528,
                                        "name": "IERC20",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5876,
                                        "src": "5687:6:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                          "typeString": "type(contract IERC20)"
                                        }
                                      },
                                      "id": 6530,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5687:15:52",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$5876",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 6531,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balanceOf",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5815,
                                    "src": "5687:25:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                      "typeString": "function (address) view external returns (uint256)"
                                    }
                                  },
                                  "id": 6536,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5687:40:52",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5669:58:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6538,
                              "nodeType": "ExpressionStatement",
                              "src": "5669:58:52"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          6542
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6542,
                            "mutability": "mutable",
                            "name": "payer",
                            "nodeType": "VariableDeclaration",
                            "scope": 6621,
                            "src": "5748:13:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 6541,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5748:7:52",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6551,
                        "initialValue": {
                          "condition": {
                            "id": 6543,
                            "name": "hasAlreadyPaid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6507,
                            "src": "5764:14:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "expression": {
                              "id": 6548,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "5797:3:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 6549,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "5797:10:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "id": 6550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "5764:43:52",
                          "trueExpression": {
                            "arguments": [
                              {
                                "id": 6546,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "5789:4:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                  "typeString": "contract CLSwapRouter"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                  "typeString": "contract CLSwapRouter"
                                }
                              ],
                              "id": 6545,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5781:7:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 6544,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5781:7:52",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 6547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5781:13:52",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5748:59:52"
                      },
                      {
                        "body": {
                          "id": 6611,
                          "nodeType": "Block",
                          "src": "5831:874:52",
                          "statements": [
                            {
                              "assignments": [
                                6554
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6554,
                                  "mutability": "mutable",
                                  "name": "hasMultiplePools",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6611,
                                  "src": "5845:21:52",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 6553,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5845:4:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6559,
                              "initialValue": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "expression": {
                                      "id": 6555,
                                      "name": "params",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6500,
                                      "src": "5869:6:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                        "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                                      }
                                    },
                                    "id": 6556,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "path",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 8587,
                                    "src": "5869:11:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 6557,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "hasMultiplePools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3876,
                                  "src": "5869:28:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (bool)"
                                  }
                                },
                                "id": 6558,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5869:30:52",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5845:54:52"
                            },
                            {
                              "expression": {
                                "id": 6583,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "id": 6560,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6500,
                                    "src": "5993:6:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                      "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                                    }
                                  },
                                  "id": 6562,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "amountIn",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8591,
                                  "src": "5993:15:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 6564,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6500,
                                        "src": "6047:6:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                          "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                                        }
                                      },
                                      "id": 6565,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "amountIn",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8591,
                                      "src": "6047:15:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "condition": {
                                        "id": 6566,
                                        "name": "hasMultiplePools",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6554,
                                        "src": "6080:16:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseExpression": {
                                        "expression": {
                                          "id": 6571,
                                          "name": "params",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6500,
                                          "src": "6115:6:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                            "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                                          }
                                        },
                                        "id": 6572,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "recipient",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 8589,
                                        "src": "6115:16:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "id": 6573,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "Conditional",
                                      "src": "6080:51:52",
                                      "trueExpression": {
                                        "arguments": [
                                          {
                                            "id": 6569,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -28,
                                            "src": "6107:4:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                              "typeString": "contract CLSwapRouter"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                              "typeString": "contract CLSwapRouter"
                                            }
                                          ],
                                          "id": 6568,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "6099:7:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 6567,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "6099:7:52",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 6570,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6099:13:52",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "hexValue": "30",
                                      "id": 6574,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6200:1:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "expression": {
                                                "id": 6576,
                                                "name": "params",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6500,
                                                "src": "6264:6:52",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                                  "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                                                }
                                              },
                                              "id": 6577,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "path",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 8587,
                                              "src": "6264:11:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 6578,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "getFirstPool",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3943,
                                            "src": "6264:24:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                              "typeString": "function (bytes memory) pure returns (bytes memory)"
                                            }
                                          },
                                          "id": 6579,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "6264:26:52",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        {
                                          "id": 6580,
                                          "name": "payer",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6542,
                                          "src": "6367:5:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 6575,
                                        "name": "SwapCallbackData",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6193,
                                        "src": "6219:16:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_struct$_SwapCallbackData_$6193_storage_ptr_$",
                                          "typeString": "type(struct CLSwapRouter.SwapCallbackData storage pointer)"
                                        }
                                      },
                                      "id": 6581,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "structConstructorCall",
                                      "lValueRequested": false,
                                      "names": [
                                        "path",
                                        "payer"
                                      ],
                                      "nodeType": "FunctionCall",
                                      "src": "6219:172:52",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                        "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      {
                                        "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                        "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                      }
                                    ],
                                    "id": 6563,
                                    "name": "exactInputInternal",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6420,
                                    "src": "6011:18:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint160_$_t_struct$_SwapCallbackData_$6193_memory_ptr_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,address,uint160,struct CLSwapRouter.SwapCallbackData memory) returns (uint256)"
                                    }
                                  },
                                  "id": 6582,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6011:394:52",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5993:412:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6584,
                              "nodeType": "ExpressionStatement",
                              "src": "5993:412:52"
                            },
                            {
                              "condition": {
                                "id": 6585,
                                "name": "hasMultiplePools",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6554,
                                "src": "6479:16:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 6609,
                                "nodeType": "Block",
                                "src": "6612:83:52",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 6606,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 6603,
                                        "name": "amountOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6504,
                                        "src": "6630:9:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "expression": {
                                          "id": 6604,
                                          "name": "params",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6500,
                                          "src": "6642:6:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                            "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                                          }
                                        },
                                        "id": 6605,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "amountIn",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 8591,
                                        "src": "6642:15:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "6630:27:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6607,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6630:27:52"
                                  },
                                  {
                                    "id": 6608,
                                    "nodeType": "Break",
                                    "src": "6675:5:52"
                                  }
                                ]
                              },
                              "id": 6610,
                              "nodeType": "IfStatement",
                              "src": "6475:220:52",
                              "trueBody": {
                                "id": 6602,
                                "nodeType": "Block",
                                "src": "6497:109:52",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 6591,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 6586,
                                        "name": "payer",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6542,
                                        "src": "6515:5:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "id": 6589,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -28,
                                            "src": "6531:4:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                              "typeString": "contract CLSwapRouter"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                              "typeString": "contract CLSwapRouter"
                                            }
                                          ],
                                          "id": 6588,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "6523:7:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 6587,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "6523:7:52",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 6590,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6523:13:52",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      },
                                      "src": "6515:21:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 6592,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6515:21:52"
                                  },
                                  {
                                    "expression": {
                                      "id": 6600,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "expression": {
                                          "id": 6593,
                                          "name": "params",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6500,
                                          "src": "6554:6:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                            "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                                          }
                                        },
                                        "id": 6595,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "path",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 8587,
                                        "src": "6554:11:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "expression": {
                                              "id": 6596,
                                              "name": "params",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6500,
                                              "src": "6568:6:52",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                                "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                                              }
                                            },
                                            "id": 6597,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "path",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 8587,
                                            "src": "6568:11:52",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 6598,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "skipToken",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3961,
                                          "src": "6568:21:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                            "typeString": "function (bytes memory) pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 6599,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6568:23:52",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "src": "6554:37:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 6601,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6554:37:52"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "hexValue": "74727565",
                          "id": 6552,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5825:4:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "id": 6612,
                        "nodeType": "WhileStatement",
                        "src": "5818:887:52"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6617,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6614,
                                "name": "amountOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6504,
                                "src": "6723:9:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "expression": {
                                  "id": 6615,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6500,
                                  "src": "6736:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                                    "typeString": "struct ICLSwapRouter.ExactInputParams memory"
                                  }
                                },
                                "id": 6616,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amountOutMinimum",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8593,
                                "src": "6736:23:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6723:36:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "546f6f206c6974746c65207265636569766564",
                              "id": 6618,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6761:21:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f037a9cbca9be03859489f289f0cf5f85c0414bbfdd9785bc7ab31bd734e249c",
                                "typeString": "literal_string \"Too little received\""
                              },
                              "value": "Too little received"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f037a9cbca9be03859489f289f0cf5f85c0414bbfdd9785bc7ab31bd734e249c",
                                "typeString": "literal_string \"Too little received\""
                              }
                            ],
                            "id": 6613,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6715:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6619,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6715:68:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6620,
                        "nodeType": "ExpressionStatement",
                        "src": "6715:68:52"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6498,
                    "nodeType": "StructuredDocumentation",
                    "src": "5216:29:52",
                    "text": "@inheritdoc ICLSwapRouter"
                  },
                  "functionSelector": "b858183f",
                  "id": 6622,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exactInput",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6502,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "5319:8:52"
                  },
                  "parameters": {
                    "id": 6501,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6500,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 6622,
                        "src": "5270:30:52",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExactInputParams_$8594_memory_ptr",
                          "typeString": "struct ICLSwapRouter.ExactInputParams"
                        },
                        "typeName": {
                          "id": 6499,
                          "name": "ExactInputParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8594,
                          "src": "5270:16:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExactInputParams_$8594_storage_ptr",
                            "typeString": "struct ICLSwapRouter.ExactInputParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5269:32:52"
                  },
                  "returnParameters": {
                    "id": 6505,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6504,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 6622,
                        "src": "5337:17:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6503,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5337:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5336:19:52"
                  },
                  "scope": 6841,
                  "src": "5250:1540:52",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 6753,
                    "nodeType": "Block",
                    "src": "7042:1210:52",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6636,
                            "name": "recipient",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6627,
                            "src": "7104:9:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 6637,
                              "name": "Constants",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11678,
                              "src": "7117:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Constants_$11678_$",
                                "typeString": "type(library Constants)"
                              }
                            },
                            "id": 6638,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "MSG_SENDER",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11670,
                            "src": "7117:20:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "7104:33:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 6648,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 6645,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6627,
                              "src": "7180:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "id": 6646,
                                "name": "Constants",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11678,
                                "src": "7193:9:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Constants_$11678_$",
                                  "typeString": "type(library Constants)"
                                }
                              },
                              "id": 6647,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "ADDRESS_THIS",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11677,
                              "src": "7193:22:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "7180:35:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 6656,
                          "nodeType": "IfStatement",
                          "src": "7176:66:52",
                          "trueBody": {
                            "expression": {
                              "id": 6654,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6649,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6627,
                                "src": "7217:9:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "id": 6652,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "7237:4:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                      "typeString": "contract CLSwapRouter"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                                      "typeString": "contract CLSwapRouter"
                                    }
                                  ],
                                  "id": 6651,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7229:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 6650,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7229:7:52",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 6653,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7229:13:52",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "7217:25:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 6655,
                            "nodeType": "ExpressionStatement",
                            "src": "7217:25:52"
                          }
                        },
                        "id": 6657,
                        "nodeType": "IfStatement",
                        "src": "7100:142:52",
                        "trueBody": {
                          "expression": {
                            "id": 6643,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 6640,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6627,
                              "src": "7139:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "expression": {
                                "id": 6641,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "7151:3:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "7151:10:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "7139:22:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 6644,
                          "nodeType": "ExpressionStatement",
                          "src": "7139:22:52"
                        }
                      },
                      {
                        "assignments": [
                          6659,
                          6661,
                          6663
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6659,
                            "mutability": "mutable",
                            "name": "tokenOut",
                            "nodeType": "VariableDeclaration",
                            "scope": 6753,
                            "src": "7254:16:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 6658,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7254:7:52",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6661,
                            "mutability": "mutable",
                            "name": "tokenIn",
                            "nodeType": "VariableDeclaration",
                            "scope": 6753,
                            "src": "7272:15:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 6660,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7272:7:52",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6663,
                            "mutability": "mutable",
                            "name": "fee",
                            "nodeType": "VariableDeclaration",
                            "scope": 6753,
                            "src": "7289:10:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            },
                            "typeName": {
                              "id": 6662,
                              "name": "uint24",
                              "nodeType": "ElementaryTypeName",
                              "src": "7289:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6668,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "expression": {
                                "id": 6664,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6631,
                                "src": "7303:4:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                  "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                }
                              },
                              "id": 6665,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "path",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6190,
                              "src": "7303:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 6666,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "decodeFirstPool",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3928,
                            "src": "7303:25:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                            }
                          },
                          "id": 6667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7303:27:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                            "typeString": "tuple(address,address,uint24)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7253:77:52"
                      },
                      {
                        "assignments": [
                          6670
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6670,
                            "mutability": "mutable",
                            "name": "zeroForOne",
                            "nodeType": "VariableDeclaration",
                            "scope": 6753,
                            "src": "7341:15:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6669,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "7341:4:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6674,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6673,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6671,
                            "name": "tokenIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6661,
                            "src": "7359:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 6672,
                            "name": "tokenOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6659,
                            "src": "7369:8:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "7359:18:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7341:36:52"
                      },
                      {
                        "assignments": [
                          6676,
                          6678
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6676,
                            "mutability": "mutable",
                            "name": "amount0Delta",
                            "nodeType": "VariableDeclaration",
                            "scope": 6753,
                            "src": "7389:19:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 6675,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7389:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6678,
                            "mutability": "mutable",
                            "name": "amount1Delta",
                            "nodeType": "VariableDeclaration",
                            "scope": 6753,
                            "src": "7410:19:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 6677,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7410:6:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6712,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6685,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6627,
                              "src": "7499:9:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6686,
                              "name": "zeroForOne",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6670,
                              "src": "7526:10:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 6690,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "7554:21:52",
                              "subExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 6687,
                                    "name": "amountOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6625,
                                    "src": "7555:9:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6688,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toInt256",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1112,
                                  "src": "7555:18:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256) pure returns (int256)"
                                  }
                                },
                                "id": 6689,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7555:20:52",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 6693,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6691,
                                  "name": "sqrtPriceLimitX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6629,
                                  "src": "7593:17:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 6692,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7614:1:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "7593:22:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "id": 6705,
                                "name": "sqrtPriceLimitX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6629,
                                "src": "7733:17:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "id": 6706,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "7593:157:52",
                              "trueExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "id": 6694,
                                      "name": "zeroForOne",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6670,
                                      "src": "7639:10:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 6702,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 6699,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "7682:8:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 6700,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MAX_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1390,
                                        "src": "7682:23:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 6701,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "7708:1:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "7682:27:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "id": 6703,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "7639:70:52",
                                    "trueExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 6698,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 6695,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "7652:8:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 6696,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MIN_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1386,
                                        "src": "7652:23:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 6697,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "7678:1:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "7652:27:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  }
                                ],
                                "id": 6704,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "7638:72:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 6709,
                                  "name": "data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6631,
                                  "src": "7779:4:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                    "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                    "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                  }
                                ],
                                "expression": {
                                  "id": 6707,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "7768:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 6708,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "7768:10:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 6710,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7768:16:52",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6680,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6661,
                                  "src": "7453:7:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 6681,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6659,
                                  "src": "7462:8:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 6682,
                                  "name": "fee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6663,
                                  "src": "7472:3:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                ],
                                "id": 6679,
                                "name": "getPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6188,
                                "src": "7445:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "function (address,address,uint24) view returns (contract IAstraCLPool)"
                                }
                              },
                              "id": 6683,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7445:31:52",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 6684,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 118,
                            "src": "7445:36:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            }
                          },
                          "id": 6711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7445:353:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7388:410:52"
                      },
                      {
                        "assignments": [
                          6714
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6714,
                            "mutability": "mutable",
                            "name": "amountOutReceived",
                            "nodeType": "VariableDeclaration",
                            "scope": 6753,
                            "src": "7809:25:52",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6713,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7809:7:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6715,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7809:25:52"
                      },
                      {
                        "expression": {
                          "id": 6741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 6716,
                                "name": "amountIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6634,
                                "src": "7845:8:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 6717,
                                "name": "amountOutReceived",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6714,
                                "src": "7855:17:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 6718,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "7844:29:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "condition": {
                              "id": 6719,
                              "name": "zeroForOne",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6670,
                              "src": "7876:10:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "components": [
                                {
                                  "arguments": [
                                    {
                                      "id": 6732,
                                      "name": "amount1Delta",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6678,
                                      "src": "7972:12:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 6731,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7964:7:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 6730,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7964:7:52",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 6733,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7964:21:52",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 6737,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "-",
                                      "prefix": true,
                                      "src": "7995:13:52",
                                      "subExpression": {
                                        "id": 6736,
                                        "name": "amount0Delta",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6676,
                                        "src": "7996:12:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 6735,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7987:7:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 6734,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7987:7:52",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 6738,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7987:22:52",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 6739,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "7963:47:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256)"
                              }
                            },
                            "id": 6740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "7876:134:52",
                            "trueExpression": {
                              "components": [
                                {
                                  "arguments": [
                                    {
                                      "id": 6722,
                                      "name": "amount0Delta",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6676,
                                      "src": "7910:12:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 6721,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7902:7:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 6720,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7902:7:52",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 6723,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7902:21:52",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 6727,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "-",
                                      "prefix": true,
                                      "src": "7933:13:52",
                                      "subExpression": {
                                        "id": 6726,
                                        "name": "amount1Delta",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6678,
                                        "src": "7934:12:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 6725,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7925:7:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 6724,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7925:7:52",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 6728,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7925:22:52",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 6729,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "7901:47:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256)"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "src": "7844:166:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6742,
                        "nodeType": "ExpressionStatement",
                        "src": "7844:166:52"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 6745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6743,
                            "name": "sqrtPriceLimitX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6629,
                            "src": "8182:17:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 6744,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8203:1:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8182:22:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6752,
                        "nodeType": "IfStatement",
                        "src": "8178:67:52",
                        "trueBody": {
                          "expression": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6749,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6747,
                                  "name": "amountOutReceived",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6714,
                                  "src": "8214:17:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 6748,
                                  "name": "amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6625,
                                  "src": "8235:9:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8214:30:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 6746,
                              "name": "require",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "src": "8206:7:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                "typeString": "function (bool) pure"
                              }
                            },
                            "id": 6750,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8206:39:52",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6751,
                          "nodeType": "ExpressionStatement",
                          "src": "8206:39:52"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6623,
                    "nodeType": "StructuredDocumentation",
                    "src": "6796:44:52",
                    "text": "@dev Performs a single exact output swap"
                  },
                  "id": 6754,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exactOutputInternal",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6632,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6625,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 6754,
                        "src": "6883:17:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6624,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6883:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6627,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 6754,
                        "src": "6910:17:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6626,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6910:7:52",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6629,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 6754,
                        "src": "6937:25:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 6628,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "6937:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6631,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 6754,
                        "src": "6972:28:52",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                          "typeString": "struct CLSwapRouter.SwapCallbackData"
                        },
                        "typeName": {
                          "id": 6630,
                          "name": "SwapCallbackData",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 6193,
                          "src": "6972:16:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SwapCallbackData_$6193_storage_ptr",
                            "typeString": "struct CLSwapRouter.SwapCallbackData"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6873:133:52"
                  },
                  "returnParameters": {
                    "id": 6635,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6634,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 6754,
                        "src": "7024:16:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6633,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7024:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7023:18:52"
                  },
                  "scope": 6841,
                  "src": "6845:1407:52",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    8625
                  ],
                  "body": {
                    "id": 6799,
                    "nodeType": "Block",
                    "src": "8449:536:52",
                    "statements": [
                      {
                        "expression": {
                          "id": 6785,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6763,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6761,
                            "src": "8515:8:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 6765,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6757,
                                  "src": "8559:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ExactOutputSingleParams_$8617_calldata_ptr",
                                    "typeString": "struct ICLSwapRouter.ExactOutputSingleParams calldata"
                                  }
                                },
                                "id": 6766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amountOut",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8612,
                                "src": "8559:16:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "expression": {
                                  "id": 6767,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6757,
                                  "src": "8589:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ExactOutputSingleParams_$8617_calldata_ptr",
                                    "typeString": "struct ICLSwapRouter.ExactOutputSingleParams calldata"
                                  }
                                },
                                "id": 6768,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "recipient",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8610,
                                "src": "8589:16:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "expression": {
                                  "id": 6769,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6757,
                                  "src": "8619:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ExactOutputSingleParams_$8617_calldata_ptr",
                                    "typeString": "struct ICLSwapRouter.ExactOutputSingleParams calldata"
                                  }
                                },
                                "id": 6770,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sqrtPriceLimitX96",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8616,
                                "src": "8619:24:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 6774,
                                          "name": "params",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6757,
                                          "src": "8698:6:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ExactOutputSingleParams_$8617_calldata_ptr",
                                            "typeString": "struct ICLSwapRouter.ExactOutputSingleParams calldata"
                                          }
                                        },
                                        "id": 6775,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "tokenOut",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 8606,
                                        "src": "8698:15:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 6776,
                                          "name": "params",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6757,
                                          "src": "8715:6:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ExactOutputSingleParams_$8617_calldata_ptr",
                                            "typeString": "struct ICLSwapRouter.ExactOutputSingleParams calldata"
                                          }
                                        },
                                        "id": 6777,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "fee",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 8608,
                                        "src": "8715:10:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint24",
                                          "typeString": "uint24"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 6778,
                                          "name": "params",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6757,
                                          "src": "8727:6:52",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ExactOutputSingleParams_$8617_calldata_ptr",
                                            "typeString": "struct ICLSwapRouter.ExactOutputSingleParams calldata"
                                          }
                                        },
                                        "id": 6779,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "tokenIn",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 8604,
                                        "src": "8727:14:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint24",
                                          "typeString": "uint24"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "expression": {
                                        "id": 6772,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "8681:3:52",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 6773,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "encodePacked",
                                      "nodeType": "MemberAccess",
                                      "src": "8681:16:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 6780,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8681:61:52",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 6781,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "8751:3:52",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 6782,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "8751:10:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 6771,
                                  "name": "SwapCallbackData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6193,
                                  "src": "8657:16:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_SwapCallbackData_$6193_storage_ptr_$",
                                    "typeString": "type(struct CLSwapRouter.SwapCallbackData storage pointer)"
                                  }
                                },
                                "id": 6783,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [
                                  "path",
                                  "payer"
                                ],
                                "nodeType": "FunctionCall",
                                "src": "8657:106:52",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                  "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                  "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                                }
                              ],
                              "id": 6764,
                              "name": "exactOutputInternal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6754,
                              "src": "8526:19:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint160_$_t_struct$_SwapCallbackData_$6193_memory_ptr_$returns$_t_uint256_$",
                                "typeString": "function (uint256,address,uint160,struct CLSwapRouter.SwapCallbackData memory) returns (uint256)"
                              }
                            },
                            "id": 6784,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8526:247:52",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8515:258:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6786,
                        "nodeType": "ExpressionStatement",
                        "src": "8515:258:52"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6791,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6788,
                                "name": "amountIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6761,
                                "src": "8792:8:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "expression": {
                                  "id": 6789,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6757,
                                  "src": "8804:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ExactOutputSingleParams_$8617_calldata_ptr",
                                    "typeString": "struct ICLSwapRouter.ExactOutputSingleParams calldata"
                                  }
                                },
                                "id": 6790,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amountInMaximum",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8614,
                                "src": "8804:22:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8792:34:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "546f6f206d75636820726571756573746564",
                              "id": 6792,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8828:20:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a5c1362ddf12293b907d8907d79f16e40792a7ddc4f09ee6d70cfec4ad443305",
                                "typeString": "literal_string \"Too much requested\""
                              },
                              "value": "Too much requested"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a5c1362ddf12293b907d8907d79f16e40792a7ddc4f09ee6d70cfec4ad443305",
                                "typeString": "literal_string \"Too much requested\""
                              }
                            ],
                            "id": 6787,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8784:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6793,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8784:65:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6794,
                        "nodeType": "ExpressionStatement",
                        "src": "8784:65:52"
                      },
                      {
                        "expression": {
                          "id": 6797,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6795,
                            "name": "amountInCached",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6162,
                            "src": "8937:14:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 6796,
                            "name": "DEFAULT_AMOUNT_IN_CACHED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6158,
                            "src": "8954:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8937:41:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6798,
                        "nodeType": "ExpressionStatement",
                        "src": "8937:41:52"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6755,
                    "nodeType": "StructuredDocumentation",
                    "src": "8258:29:52",
                    "text": "@inheritdoc ICLSwapRouter"
                  },
                  "functionSelector": "5023b4df",
                  "id": 6800,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exactOutputSingle",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6759,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8401:8:52"
                  },
                  "parameters": {
                    "id": 6758,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6757,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 6800,
                        "src": "8319:39:52",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExactOutputSingleParams_$8617_calldata_ptr",
                          "typeString": "struct ICLSwapRouter.ExactOutputSingleParams"
                        },
                        "typeName": {
                          "id": 6756,
                          "name": "ExactOutputSingleParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8617,
                          "src": "8319:23:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExactOutputSingleParams_$8617_storage_ptr",
                            "typeString": "struct ICLSwapRouter.ExactOutputSingleParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8318:41:52"
                  },
                  "returnParameters": {
                    "id": 6762,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6761,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 6800,
                        "src": "8427:16:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6760,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8427:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8426:18:52"
                  },
                  "scope": 6841,
                  "src": "8292:693:52",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8642
                  ],
                  "body": {
                    "id": 6839,
                    "nodeType": "Block",
                    "src": "9134:353:52",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 6810,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6803,
                                "src": "9177:6:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ExactOutputParams_$8634_calldata_ptr",
                                  "typeString": "struct ICLSwapRouter.ExactOutputParams calldata"
                                }
                              },
                              "id": 6811,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "amountOut",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8631,
                              "src": "9177:16:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 6812,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6803,
                                "src": "9207:6:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ExactOutputParams_$8634_calldata_ptr",
                                  "typeString": "struct ICLSwapRouter.ExactOutputParams calldata"
                                }
                              },
                              "id": 6813,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipient",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8629,
                              "src": "9207:16:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 6814,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9237:1:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 6816,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6803,
                                    "src": "9276:6:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ExactOutputParams_$8634_calldata_ptr",
                                      "typeString": "struct ICLSwapRouter.ExactOutputParams calldata"
                                    }
                                  },
                                  "id": 6817,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "path",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8627,
                                  "src": "9276:11:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 6818,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "9296:3:52",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 6819,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "9296:10:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                    "typeString": "bytes calldata"
                                  },
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 6815,
                                "name": "SwapCallbackData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6193,
                                "src": "9252:16:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_SwapCallbackData_$6193_storage_ptr_$",
                                  "typeString": "type(struct CLSwapRouter.SwapCallbackData storage pointer)"
                                }
                              },
                              "id": 6820,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "path",
                                "payer"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "9252:56:52",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_struct$_SwapCallbackData_$6193_memory_ptr",
                                "typeString": "struct CLSwapRouter.SwapCallbackData memory"
                              }
                            ],
                            "id": 6809,
                            "name": "exactOutputInternal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6754,
                            "src": "9144:19:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint160_$_t_struct$_SwapCallbackData_$6193_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (uint256,address,uint160,struct CLSwapRouter.SwapCallbackData memory) returns (uint256)"
                            }
                          },
                          "id": 6821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9144:174:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6822,
                        "nodeType": "ExpressionStatement",
                        "src": "9144:174:52"
                      },
                      {
                        "expression": {
                          "id": 6825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6823,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6807,
                            "src": "9329:8:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 6824,
                            "name": "amountInCached",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6162,
                            "src": "9340:14:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9329:25:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6826,
                        "nodeType": "ExpressionStatement",
                        "src": "9329:25:52"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6831,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6828,
                                "name": "amountIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6807,
                                "src": "9372:8:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "expression": {
                                  "id": 6829,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6803,
                                  "src": "9384:6:52",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ExactOutputParams_$8634_calldata_ptr",
                                    "typeString": "struct ICLSwapRouter.ExactOutputParams calldata"
                                  }
                                },
                                "id": 6830,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amountInMaximum",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8633,
                                "src": "9384:22:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9372:34:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "546f6f206d75636820726571756573746564",
                              "id": 6832,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9408:20:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a5c1362ddf12293b907d8907d79f16e40792a7ddc4f09ee6d70cfec4ad443305",
                                "typeString": "literal_string \"Too much requested\""
                              },
                              "value": "Too much requested"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a5c1362ddf12293b907d8907d79f16e40792a7ddc4f09ee6d70cfec4ad443305",
                                "typeString": "literal_string \"Too much requested\""
                              }
                            ],
                            "id": 6827,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9364:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6833,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9364:65:52",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6834,
                        "nodeType": "ExpressionStatement",
                        "src": "9364:65:52"
                      },
                      {
                        "expression": {
                          "id": 6837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6835,
                            "name": "amountInCached",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6162,
                            "src": "9439:14:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 6836,
                            "name": "DEFAULT_AMOUNT_IN_CACHED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6158,
                            "src": "9456:24:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9439:41:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6838,
                        "nodeType": "ExpressionStatement",
                        "src": "9439:41:52"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6801,
                    "nodeType": "StructuredDocumentation",
                    "src": "8991:29:52",
                    "text": "@inheritdoc ICLSwapRouter"
                  },
                  "functionSelector": "09b81346",
                  "id": 6840,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exactOutput",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6805,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "9098:8:52"
                  },
                  "parameters": {
                    "id": 6804,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6803,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 6840,
                        "src": "9046:33:52",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExactOutputParams_$8634_calldata_ptr",
                          "typeString": "struct ICLSwapRouter.ExactOutputParams"
                        },
                        "typeName": {
                          "id": 6802,
                          "name": "ExactOutputParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8634,
                          "src": "9046:17:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExactOutputParams_$8634_storage_ptr",
                            "typeString": "struct ICLSwapRouter.ExactOutputParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9045:35:52"
                  },
                  "returnParameters": {
                    "id": 6808,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6807,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 6840,
                        "src": "9116:16:52",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6806,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9116:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9115:18:52"
                  },
                  "scope": 6841,
                  "src": "9025:462:52",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 6842,
              "src": "836:8653:52"
            }
          ],
          "src": "45:9445:52"
        },
        "id": 52
      },
      "contracts/ClassicSwapRouter.sol": {
        "ast": {
          "absolutePath": "contracts/ClassicSwapRouter.sol",
          "exportedSymbols": {
            "AstraClassicLibrary": [
              11656
            ],
            "ClassicSwapRouter": [
              7241
            ],
            "Constants": [
              11678
            ],
            "IAstraPair": [
              4481
            ],
            "IClassicSwapRouter": [
              8678
            ],
            "IERC20": [
              5876
            ],
            "IImmutableState": [
              8694
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IPeripheryPayments": [
              2898
            ],
            "IPeripheryPaymentsExtended": [
              8853
            ],
            "IPeripheryPaymentsWithFee": [
              2931
            ],
            "IPeripheryPaymentsWithFeeExtended": [
              8885
            ],
            "ISAMB": [
              3059
            ],
            "ImmutableState": [
              7710
            ],
            "LowGasSafeMath": [
              1043
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PeripheryPayments": [
              2244
            ],
            "PeripheryPaymentsExtended": [
              8380
            ],
            "PeripheryPaymentsWithFee": [
              2425
            ],
            "PeripheryPaymentsWithFeeExtended": [
              8435
            ],
            "TransferHelper": [
              4225
            ]
          },
          "id": 7242,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6843,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:53"
            },
            {
              "id": 6844,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:53"
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol",
              "id": 6845,
              "nodeType": "ImportDirective",
              "scope": 7242,
              "sourceUnit": 1044,
              "src": "90:70:53",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 6846,
              "nodeType": "ImportDirective",
              "scope": 7242,
              "sourceUnit": 5877,
              "src": "161:56:53",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IClassicSwapRouter.sol",
              "file": "./interfaces/IClassicSwapRouter.sol",
              "id": 6847,
              "nodeType": "ImportDirective",
              "scope": 7242,
              "sourceUnit": 8679,
              "src": "219:45:53",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/base/ImmutableState.sol",
              "file": "./base/ImmutableState.sol",
              "id": 6848,
              "nodeType": "ImportDirective",
              "scope": 7242,
              "sourceUnit": 7711,
              "src": "265:35:53",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/base/PeripheryPaymentsWithFeeExtended.sol",
              "file": "./base/PeripheryPaymentsWithFeeExtended.sol",
              "id": 6849,
              "nodeType": "ImportDirective",
              "scope": 7242,
              "sourceUnit": 8436,
              "src": "301:53:53",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/libraries/Constants.sol",
              "file": "./libraries/Constants.sol",
              "id": 6850,
              "nodeType": "ImportDirective",
              "scope": 7242,
              "sourceUnit": 11679,
              "src": "355:35:53",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/libraries/AstraClassicLibrary.sol",
              "file": "./libraries/AstraClassicLibrary.sol",
              "id": 6851,
              "nodeType": "ImportDirective",
              "scope": 7242,
              "sourceUnit": 11657,
              "src": "391:45:53",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 6853,
                    "name": "IClassicSwapRouter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8678,
                    "src": "588:18:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IClassicSwapRouter_$8678",
                      "typeString": "contract IClassicSwapRouter"
                    }
                  },
                  "id": 6854,
                  "nodeType": "InheritanceSpecifier",
                  "src": "588:18:53"
                },
                {
                  "baseName": {
                    "id": 6855,
                    "name": "ImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7710,
                    "src": "608:14:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ImmutableState_$7710",
                      "typeString": "contract ImmutableState"
                    }
                  },
                  "id": 6856,
                  "nodeType": "InheritanceSpecifier",
                  "src": "608:14:53"
                },
                {
                  "baseName": {
                    "id": 6857,
                    "name": "PeripheryPaymentsWithFeeExtended",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8435,
                    "src": "624:32:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryPaymentsWithFeeExtended_$8435",
                      "typeString": "contract PeripheryPaymentsWithFeeExtended"
                    }
                  },
                  "id": 6858,
                  "nodeType": "InheritanceSpecifier",
                  "src": "624:32:53"
                }
              ],
              "contractDependencies": [
                2034,
                2244,
                2425,
                2872,
                2898,
                2931,
                7710,
                8380,
                8435,
                8678,
                8694,
                8853,
                8885
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 6852,
                "nodeType": "StructuredDocumentation",
                "src": "438:111:53",
                "text": "@title Astra Classic Swap Router\n @notice Router for stateless execution of swaps against Astra Classic"
              },
              "fullyImplemented": false,
              "id": 7241,
              "linearizedBaseContracts": [
                7241,
                8435,
                2425,
                8380,
                8885,
                2931,
                2244,
                2034,
                2872,
                8853,
                2898,
                7710,
                8694,
                8678
              ],
              "name": "ClassicSwapRouter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 6861,
                  "libraryName": {
                    "id": 6859,
                    "name": "LowGasSafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1043,
                    "src": "669:14:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LowGasSafeMath_$1043",
                      "typeString": "library LowGasSafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "663:33:53",
                  "typeName": {
                    "id": 6860,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "688:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "body": {
                    "id": 7024,
                    "nodeType": "Block",
                    "src": "879:1217:53",
                    "statements": [
                      {
                        "body": {
                          "id": 7022,
                          "nodeType": "Block",
                          "src": "931:1159:53",
                          "statements": [
                            {
                              "assignments": [
                                6882,
                                6884
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6882,
                                  "mutability": "mutable",
                                  "name": "input",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7022,
                                  "src": "946:13:53",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 6881,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "946:7:53",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 6884,
                                  "mutability": "mutable",
                                  "name": "output",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7022,
                                  "src": "961:14:53",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 6883,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "961:7:53",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6894,
                              "initialValue": {
                                "components": [
                                  {
                                    "baseExpression": {
                                      "id": 6885,
                                      "name": "path",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6864,
                                      "src": "980:4:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 6887,
                                    "indexExpression": {
                                      "id": 6886,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6870,
                                      "src": "985:1:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "980:7:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 6888,
                                      "name": "path",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6864,
                                      "src": "989:4:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 6892,
                                    "indexExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6891,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 6889,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6870,
                                        "src": "994:1:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 6890,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "998:1:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "994:5:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "989:11:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "id": 6893,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "979:22:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                  "typeString": "tuple(address,address)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "945:56:53"
                            },
                            {
                              "assignments": [
                                6896,
                                null
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6896,
                                  "mutability": "mutable",
                                  "name": "token0",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7022,
                                  "src": "1016:14:53",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 6895,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1016:7:53",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                null
                              ],
                              "id": 6902,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 6899,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6882,
                                    "src": "1067:5:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 6900,
                                    "name": "output",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6884,
                                    "src": "1074:6:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "id": 6897,
                                    "name": "AstraClassicLibrary",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11656,
                                    "src": "1036:19:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_AstraClassicLibrary_$11656_$",
                                      "typeString": "type(library AstraClassicLibrary)"
                                    }
                                  },
                                  "id": 6898,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sortTokens",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 11358,
                                  "src": "1036:30:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_address_$_t_address_$",
                                    "typeString": "function (address,address) pure returns (address,address)"
                                  }
                                },
                                "id": 6901,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1036:45:53",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                  "typeString": "tuple(address,address)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1015:66:53"
                            },
                            {
                              "assignments": [
                                6904
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6904,
                                  "mutability": "mutable",
                                  "name": "pair",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7022,
                                  "src": "1095:15:53",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                    "typeString": "contract IAstraPair"
                                  },
                                  "typeName": {
                                    "id": 6903,
                                    "name": "IAstraPair",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 4481,
                                    "src": "1095:10:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                      "typeString": "contract IAstraPair"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6913,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 6908,
                                        "name": "factoryClassic",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7689,
                                        "src": "1152:14:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 6909,
                                        "name": "input",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6882,
                                        "src": "1168:5:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 6910,
                                        "name": "output",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6884,
                                        "src": "1175:6:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "expression": {
                                        "id": 6906,
                                        "name": "AstraClassicLibrary",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11656,
                                        "src": "1124:19:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_AstraClassicLibrary_$11656_$",
                                          "typeString": "type(library AstraClassicLibrary)"
                                        }
                                      },
                                      "id": 6907,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "pairFor",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 11403,
                                      "src": "1124:27:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                                        "typeString": "function (address,address,address) pure returns (address)"
                                      }
                                    },
                                    "id": 6911,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1124:58:53",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 6905,
                                  "name": "IAstraPair",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4481,
                                  "src": "1113:10:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IAstraPair_$4481_$",
                                    "typeString": "type(contract IAstraPair)"
                                  }
                                },
                                "id": 6912,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1113:70:53",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                  "typeString": "contract IAstraPair"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1095:88:53"
                            },
                            {
                              "assignments": [
                                6915
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6915,
                                  "mutability": "mutable",
                                  "name": "amountInput",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7022,
                                  "src": "1197:19:53",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6914,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1197:7:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6916,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1197:19:53"
                            },
                            {
                              "assignments": [
                                6918
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6918,
                                  "mutability": "mutable",
                                  "name": "amountOutput",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7022,
                                  "src": "1230:20:53",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6917,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1230:7:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6919,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1230:20:53"
                            },
                            {
                              "id": 6967,
                              "nodeType": "Block",
                              "src": "1316:434:53",
                              "statements": [
                                {
                                  "assignments": [
                                    6921,
                                    6923,
                                    null
                                  ],
                                  "declarations": [
                                    {
                                      "constant": false,
                                      "id": 6921,
                                      "mutability": "mutable",
                                      "name": "reserve0",
                                      "nodeType": "VariableDeclaration",
                                      "scope": 6967,
                                      "src": "1335:16:53",
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "typeName": {
                                        "id": 6920,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1335:7:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "visibility": "internal"
                                    },
                                    {
                                      "constant": false,
                                      "id": 6923,
                                      "mutability": "mutable",
                                      "name": "reserve1",
                                      "nodeType": "VariableDeclaration",
                                      "scope": 6967,
                                      "src": "1353:16:53",
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "typeName": {
                                        "id": 6922,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1353:7:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "visibility": "internal"
                                    },
                                    null
                                  ],
                                  "id": 6927,
                                  "initialValue": {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "id": 6924,
                                        "name": "pair",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6904,
                                        "src": "1375:4:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                          "typeString": "contract IAstraPair"
                                        }
                                      },
                                      "id": 6925,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "getReserves",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4423,
                                      "src": "1375:16:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$",
                                        "typeString": "function () view external returns (uint112,uint112,uint32)"
                                      }
                                    },
                                    "id": 6926,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1375:18:53",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$",
                                      "typeString": "tuple(uint112,uint112,uint32)"
                                    }
                                  },
                                  "nodeType": "VariableDeclarationStatement",
                                  "src": "1334:59:53"
                                },
                                {
                                  "assignments": [
                                    6929,
                                    6931
                                  ],
                                  "declarations": [
                                    {
                                      "constant": false,
                                      "id": 6929,
                                      "mutability": "mutable",
                                      "name": "reserveInput",
                                      "nodeType": "VariableDeclaration",
                                      "scope": 6967,
                                      "src": "1412:20:53",
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "typeName": {
                                        "id": 6928,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1412:7:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "visibility": "internal"
                                    },
                                    {
                                      "constant": false,
                                      "id": 6931,
                                      "mutability": "mutable",
                                      "name": "reserveOutput",
                                      "nodeType": "VariableDeclaration",
                                      "scope": 6967,
                                      "src": "1434:21:53",
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "typeName": {
                                        "id": 6930,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1434:7:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "visibility": "internal"
                                    }
                                  ],
                                  "id": 6942,
                                  "initialValue": {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      "id": 6934,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 6932,
                                        "name": "input",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6882,
                                        "src": "1479:5:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "id": 6933,
                                        "name": "token0",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6896,
                                        "src": "1488:6:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "src": "1479:15:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "components": [
                                        {
                                          "id": 6938,
                                          "name": "reserve1",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6923,
                                          "src": "1521:8:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 6939,
                                          "name": "reserve0",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6921,
                                          "src": "1531:8:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 6940,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "1520:20:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256)"
                                      }
                                    },
                                    "id": 6941,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "1479:61:53",
                                    "trueExpression": {
                                      "components": [
                                        {
                                          "id": 6935,
                                          "name": "reserve0",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6921,
                                          "src": "1498:8:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 6936,
                                          "name": "reserve1",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6923,
                                          "src": "1508:8:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 6937,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "1497:20:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256)"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                      "typeString": "tuple(uint256,uint256)"
                                    }
                                  },
                                  "nodeType": "VariableDeclarationStatement",
                                  "src": "1411:129:53"
                                },
                                {
                                  "expression": {
                                    "id": 6956,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6943,
                                      "name": "amountInput",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6915,
                                      "src": "1558:11:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "id": 6954,
                                          "name": "reserveInput",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6929,
                                          "src": "1615:12:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "id": 6950,
                                                  "name": "pair",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 6904,
                                                  "src": "1604:4:53",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                                    "typeString": "contract IAstraPair"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                                    "typeString": "contract IAstraPair"
                                                  }
                                                ],
                                                "id": 6949,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "1596:7:53",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_address_$",
                                                  "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                  "id": 6948,
                                                  "name": "address",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "1596:7:53",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              "id": 6951,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "1596:13:53",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            ],
                                            "expression": {
                                              "arguments": [
                                                {
                                                  "id": 6945,
                                                  "name": "input",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 6882,
                                                  "src": "1579:5:53",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                ],
                                                "id": 6944,
                                                "name": "IERC20",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5876,
                                                "src": "1572:6:53",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                                  "typeString": "type(contract IERC20)"
                                                }
                                              },
                                              "id": 6946,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "1572:13:53",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$5876",
                                                "typeString": "contract IERC20"
                                              }
                                            },
                                            "id": 6947,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balanceOf",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5815,
                                            "src": "1572:23:53",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                              "typeString": "function (address) view external returns (uint256)"
                                            }
                                          },
                                          "id": 6952,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "1572:38:53",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 6953,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sub",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 960,
                                        "src": "1572:42:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 6955,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1572:56:53",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1558:70:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6957,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1558:70:53"
                                },
                                {
                                  "expression": {
                                    "id": 6965,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6958,
                                      "name": "amountOutput",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6918,
                                      "src": "1646:12:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "id": 6961,
                                          "name": "amountInput",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6915,
                                          "src": "1694:11:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 6962,
                                          "name": "reserveInput",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6929,
                                          "src": "1707:12:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 6963,
                                          "name": "reserveOutput",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6931,
                                          "src": "1721:13:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "id": 6959,
                                          "name": "AstraClassicLibrary",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 11656,
                                          "src": "1661:19:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_AstraClassicLibrary_$11656_$",
                                            "typeString": "type(library AstraClassicLibrary)"
                                          }
                                        },
                                        "id": 6960,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "getAmountOut",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 11512,
                                        "src": "1661:32:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 6964,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1661:74:53",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1646:89:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6966,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1646:89:53"
                                }
                              ]
                            },
                            {
                              "assignments": [
                                6969,
                                6971
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6969,
                                  "mutability": "mutable",
                                  "name": "amount0Out",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7022,
                                  "src": "1764:18:53",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6968,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1764:7:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 6971,
                                  "mutability": "mutable",
                                  "name": "amount1Out",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7022,
                                  "src": "1784:18:53",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6970,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1784:7:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6988,
                              "initialValue": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 6974,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6972,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6882,
                                    "src": "1822:5:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "id": 6973,
                                    "name": "token0",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6896,
                                    "src": "1831:6:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "1822:15:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "components": [
                                    {
                                      "id": 6981,
                                      "name": "amountOutput",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6918,
                                      "src": "1870:12:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "hexValue": "30",
                                          "id": 6984,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1892:1:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          }
                                        ],
                                        "id": 6983,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "1884:7:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        },
                                        "typeName": {
                                          "id": 6982,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1884:7:53",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 6985,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1884:10:53",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6986,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1869:26:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256)"
                                  }
                                },
                                "id": 6987,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "1822:73:53",
                                "trueExpression": {
                                  "components": [
                                    {
                                      "arguments": [
                                        {
                                          "hexValue": "30",
                                          "id": 6977,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1849:1:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          }
                                        ],
                                        "id": 6976,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "1841:7:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        },
                                        "typeName": {
                                          "id": 6975,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1841:7:53",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 6978,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1841:10:53",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "id": 6979,
                                      "name": "amountOutput",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6918,
                                      "src": "1853:12:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6980,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1840:26:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256)"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1763:132:53"
                            },
                            {
                              "assignments": [
                                6990
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6990,
                                  "mutability": "mutable",
                                  "name": "to",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7022,
                                  "src": "1909:10:53",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 6989,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1909:7:53",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7009,
                              "initialValue": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6996,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6991,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6870,
                                    "src": "1922:1:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6995,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 6992,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6864,
                                        "src": "1926:4:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "id": 6993,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "src": "1926:11:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "32",
                                      "id": 6994,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1940:1:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "1926:15:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1922:19:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "id": 7007,
                                  "name": "_to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6866,
                                  "src": "2011:3:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 7008,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "1922:92:53",
                                "trueExpression": {
                                  "arguments": [
                                    {
                                      "id": 6999,
                                      "name": "factoryClassic",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7689,
                                      "src": "1972:14:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 7000,
                                      "name": "output",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6884,
                                      "src": "1988:6:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "baseExpression": {
                                        "id": 7001,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6864,
                                        "src": "1996:4:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "id": 7005,
                                      "indexExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7004,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7002,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6870,
                                          "src": "2001:1:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "hexValue": "32",
                                          "id": 7003,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "2005:1:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_2_by_1",
                                            "typeString": "int_const 2"
                                          },
                                          "value": "2"
                                        },
                                        "src": "2001:5:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "1996:11:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "id": 6997,
                                      "name": "AstraClassicLibrary",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11656,
                                      "src": "1944:19:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_AstraClassicLibrary_$11656_$",
                                        "typeString": "type(library AstraClassicLibrary)"
                                      }
                                    },
                                    "id": 6998,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "pairFor",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 11403,
                                    "src": "1944:27:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                                      "typeString": "function (address,address,address) pure returns (address)"
                                    }
                                  },
                                  "id": 7006,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1944:64:53",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1909:105:53"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 7013,
                                    "name": "amount0Out",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6969,
                                    "src": "2038:10:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 7014,
                                    "name": "amount1Out",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6971,
                                    "src": "2050:10:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 7015,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6990,
                                    "src": "2062:2:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 7018,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2076:1:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 7017,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "NewExpression",
                                      "src": "2066:9:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function (uint256) pure returns (bytes memory)"
                                      },
                                      "typeName": {
                                        "id": 7016,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2070:5:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_storage_ptr",
                                          "typeString": "bytes"
                                        }
                                      }
                                    },
                                    "id": 7019,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2066:12:53",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 7010,
                                    "name": "pair",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6904,
                                    "src": "2028:4:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                      "typeString": "contract IAstraPair"
                                    }
                                  },
                                  "id": 7012,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "swap",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4465,
                                  "src": "2028:9:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                                    "typeString": "function (uint256,uint256,address,bytes memory) external"
                                  }
                                },
                                "id": 7020,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2028:51:53",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7021,
                              "nodeType": "ExpressionStatement",
                              "src": "2028:51:53"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6877,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6872,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6870,
                            "src": "905:1:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6876,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 6873,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6864,
                                "src": "909:4:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 6874,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "909:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 6875,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "923:1:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "909:15:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "905:19:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7023,
                        "initializationExpression": {
                          "assignments": [
                            6870
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 6870,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 7023,
                              "src": "894:9:53",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 6869,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "894:7:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 6871,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "894:9:53"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 6879,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "926:3:53",
                            "subExpression": {
                              "id": 6878,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6870,
                              "src": "926:1:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6880,
                          "nodeType": "ExpressionStatement",
                          "src": "926:3:53"
                        },
                        "nodeType": "ForStatement",
                        "src": "889:1201:53"
                      }
                    ]
                  },
                  "id": 7025,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_swap",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6867,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6864,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 7025,
                        "src": "835:21:53",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 6862,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "835:7:53",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 6863,
                          "nodeType": "ArrayTypeName",
                          "src": "835:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6866,
                        "mutability": "mutable",
                        "name": "_to",
                        "nodeType": "VariableDeclaration",
                        "scope": 7025,
                        "src": "858:11:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6865,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "858:7:53",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "834:36:53"
                  },
                  "returnParameters": {
                    "id": 6868,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "879:0:53"
                  },
                  "scope": 7241,
                  "src": "820:1276:53",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    8662
                  ],
                  "body": {
                    "id": 7158,
                    "nodeType": "Block",
                    "src": "2344:928:53",
                    "statements": [
                      {
                        "assignments": [
                          7042
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7042,
                            "mutability": "mutable",
                            "name": "hasAlreadyPaid",
                            "nodeType": "VariableDeclaration",
                            "scope": 7158,
                            "src": "2461:19:53",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 7041,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2461:4:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7043,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2461:19:53"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7047,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7044,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7028,
                            "src": "2494:8:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 7045,
                              "name": "Constants",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11678,
                              "src": "2506:9:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Constants_$11678_$",
                                "typeString": "type(library Constants)"
                              }
                            },
                            "id": 7046,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "CONTRACT_BALANCE",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11663,
                            "src": "2506:26:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2494:38:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7067,
                        "nodeType": "IfStatement",
                        "src": "2490:155:53",
                        "trueBody": {
                          "id": 7066,
                          "nodeType": "Block",
                          "src": "2534:111:53",
                          "statements": [
                            {
                              "expression": {
                                "id": 7050,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 7048,
                                  "name": "hasAlreadyPaid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7042,
                                  "src": "2548:14:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "74727565",
                                  "id": 7049,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2565:4:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "2548:21:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 7051,
                              "nodeType": "ExpressionStatement",
                              "src": "2548:21:53"
                            },
                            {
                              "expression": {
                                "id": 7064,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 7052,
                                  "name": "amountIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7028,
                                  "src": "2583:8:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 7061,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "2628:4:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_ClassicSwapRouter_$7241",
                                            "typeString": "contract ClassicSwapRouter"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_ClassicSwapRouter_$7241",
                                            "typeString": "contract ClassicSwapRouter"
                                          }
                                        ],
                                        "id": 7060,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "2620:7:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 7059,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "2620:7:53",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 7062,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2620:13:53",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "baseExpression": {
                                            "id": 7054,
                                            "name": "path",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7033,
                                            "src": "2601:4:53",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                              "typeString": "address[] calldata"
                                            }
                                          },
                                          "id": 7056,
                                          "indexExpression": {
                                            "hexValue": "30",
                                            "id": 7055,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2606:1:53",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "2601:7:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 7053,
                                        "name": "IERC20",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5876,
                                        "src": "2594:6:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                          "typeString": "type(contract IERC20)"
                                        }
                                      },
                                      "id": 7057,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2594:15:53",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$5876",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 7058,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balanceOf",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5815,
                                    "src": "2594:25:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                      "typeString": "function (address) view external returns (uint256)"
                                    }
                                  },
                                  "id": 7063,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2594:40:53",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2583:51:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7065,
                              "nodeType": "ExpressionStatement",
                              "src": "2583:51:53"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 7069,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7033,
                                "src": "2672:4:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 7071,
                              "indexExpression": {
                                "hexValue": "30",
                                "id": 7070,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2677:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2672:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "condition": {
                                "id": 7072,
                                "name": "hasAlreadyPaid",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7042,
                                "src": "2693:14:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "expression": {
                                  "id": 7077,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "2726:3:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7078,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "2726:10:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 7079,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "2693:43:53",
                              "trueExpression": {
                                "arguments": [
                                  {
                                    "id": 7075,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "2718:4:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ClassicSwapRouter_$7241",
                                      "typeString": "contract ClassicSwapRouter"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ClassicSwapRouter_$7241",
                                      "typeString": "contract ClassicSwapRouter"
                                    }
                                  ],
                                  "id": 7074,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2710:7:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 7073,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2710:7:53",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 7076,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2710:13:53",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 7082,
                                  "name": "factoryClassic",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7689,
                                  "src": "2778:14:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "baseExpression": {
                                    "id": 7083,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7033,
                                    "src": "2794:4:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  },
                                  "id": 7085,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 7084,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2799:1:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2794:7:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "baseExpression": {
                                    "id": 7086,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7033,
                                    "src": "2803:4:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  },
                                  "id": 7088,
                                  "indexExpression": {
                                    "hexValue": "31",
                                    "id": 7087,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2808:1:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2803:7:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 7080,
                                  "name": "AstraClassicLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11656,
                                  "src": "2750:19:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_AstraClassicLibrary_$11656_$",
                                    "typeString": "type(library AstraClassicLibrary)"
                                  }
                                },
                                "id": 7081,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "pairFor",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11403,
                                "src": "2750:27:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                                  "typeString": "function (address,address,address) pure returns (address)"
                                }
                              },
                              "id": 7089,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2750:61:53",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7090,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7028,
                              "src": "2825:8:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7068,
                            "name": "pay",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2243,
                            "src": "2655:3:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 7091,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2655:188:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7092,
                        "nodeType": "ExpressionStatement",
                        "src": "2655:188:53"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 7096,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7093,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7035,
                            "src": "2899:2:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 7094,
                              "name": "Constants",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11678,
                              "src": "2905:9:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Constants_$11678_$",
                                "typeString": "type(library Constants)"
                              }
                            },
                            "id": 7095,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "MSG_SENDER",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11670,
                            "src": "2905:20:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2899:26:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 7105,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 7102,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7035,
                              "src": "2961:2:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "id": 7103,
                                "name": "Constants",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11678,
                                "src": "2967:9:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Constants_$11678_$",
                                  "typeString": "type(library Constants)"
                                }
                              },
                              "id": 7104,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "ADDRESS_THIS",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11677,
                              "src": "2967:22:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "2961:28:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 7113,
                          "nodeType": "IfStatement",
                          "src": "2957:52:53",
                          "trueBody": {
                            "expression": {
                              "id": 7111,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 7106,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7035,
                                "src": "2991:2:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "id": 7109,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "3004:4:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ClassicSwapRouter_$7241",
                                      "typeString": "contract ClassicSwapRouter"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ClassicSwapRouter_$7241",
                                      "typeString": "contract ClassicSwapRouter"
                                    }
                                  ],
                                  "id": 7108,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2996:7:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 7107,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2996:7:53",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 7110,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2996:13:53",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "2991:18:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 7112,
                            "nodeType": "ExpressionStatement",
                            "src": "2991:18:53"
                          }
                        },
                        "id": 7114,
                        "nodeType": "IfStatement",
                        "src": "2895:114:53",
                        "trueBody": {
                          "expression": {
                            "id": 7100,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 7097,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7035,
                              "src": "2927:2:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "expression": {
                                "id": 7098,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2932:3:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7099,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "2932:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "2927:15:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 7101,
                          "nodeType": "ExpressionStatement",
                          "src": "2927:15:53"
                        }
                      },
                      {
                        "assignments": [
                          7116
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7116,
                            "mutability": "mutable",
                            "name": "balanceBefore",
                            "nodeType": "VariableDeclaration",
                            "scope": 7158,
                            "src": "3020:21:53",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7115,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3020:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7128,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 7126,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7035,
                              "src": "3084:2:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "id": 7118,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7033,
                                    "src": "3051:4:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  },
                                  "id": 7123,
                                  "indexExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7122,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 7119,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7033,
                                        "src": "3056:4:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                          "typeString": "address[] calldata"
                                        }
                                      },
                                      "id": 7120,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "src": "3056:11:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 7121,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3070:1:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "3056:15:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3051:21:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7117,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5876,
                                "src": "3044:6:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 7124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3044:29:53",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$5876",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7125,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5815,
                            "src": "3044:39:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 7127,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3044:43:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3020:67:53"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7130,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7033,
                              "src": "3104:4:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 7131,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7035,
                              "src": "3110:2:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 7129,
                            "name": "_swap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7025,
                            "src": "3098:5:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$returns$__$",
                              "typeString": "function (address[] memory,address)"
                            }
                          },
                          "id": 7132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3098:15:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7133,
                        "nodeType": "ExpressionStatement",
                        "src": "3098:15:53"
                      },
                      {
                        "expression": {
                          "id": 7149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7134,
                            "name": "amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7039,
                            "src": "3124:9:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7147,
                                "name": "balanceBefore",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7116,
                                "src": "3184:13:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 7144,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7035,
                                    "src": "3176:2:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "baseExpression": {
                                          "id": 7136,
                                          "name": "path",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7033,
                                          "src": "3143:4:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                            "typeString": "address[] calldata"
                                          }
                                        },
                                        "id": 7141,
                                        "indexExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 7140,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 7137,
                                              "name": "path",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7033,
                                              "src": "3148:4:53",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                "typeString": "address[] calldata"
                                              }
                                            },
                                            "id": 7138,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "3148:11:53",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "hexValue": "31",
                                            "id": 7139,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3162:1:53",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "3148:15:53",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3143:21:53",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 7135,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5876,
                                      "src": "3136:6:53",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 7142,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3136:29:53",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$5876",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 7143,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balanceOf",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5815,
                                  "src": "3136:39:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view external returns (uint256)"
                                  }
                                },
                                "id": 7145,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3136:43:53",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7146,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 960,
                              "src": "3136:47:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3136:62:53",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3124:74:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7150,
                        "nodeType": "ExpressionStatement",
                        "src": "3124:74:53"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7154,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7152,
                                "name": "amountOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7039,
                                "src": "3216:9:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 7153,
                                "name": "amountOutMin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7030,
                                "src": "3229:12:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3216:25:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "546f6f206c6974746c65207265636569766564",
                              "id": 7155,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3243:21:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f037a9cbca9be03859489f289f0cf5f85c0414bbfdd9785bc7ab31bd734e249c",
                                "typeString": "literal_string \"Too little received\""
                              },
                              "value": "Too little received"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f037a9cbca9be03859489f289f0cf5f85c0414bbfdd9785bc7ab31bd734e249c",
                                "typeString": "literal_string \"Too little received\""
                              }
                            ],
                            "id": 7151,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3208:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3208:57:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7157,
                        "nodeType": "ExpressionStatement",
                        "src": "3208:57:53"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7026,
                    "nodeType": "StructuredDocumentation",
                    "src": "2102:34:53",
                    "text": "@inheritdoc IClassicSwapRouter"
                  },
                  "functionSelector": "472b43f3",
                  "id": 7159,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swapExactTokensForTokens",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7037,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2307:8:53"
                  },
                  "parameters": {
                    "id": 7036,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7028,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 7159,
                        "src": "2184:16:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7027,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2184:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7030,
                        "mutability": "mutable",
                        "name": "amountOutMin",
                        "nodeType": "VariableDeclaration",
                        "scope": 7159,
                        "src": "2210:20:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7029,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2210:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7033,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 7159,
                        "src": "2240:23:53",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 7031,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2240:7:53",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 7032,
                          "nodeType": "ArrayTypeName",
                          "src": "2240:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7035,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 7159,
                        "src": "2273:10:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7034,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2273:7:53",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2174:115:53"
                  },
                  "returnParameters": {
                    "id": 7040,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7039,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 7159,
                        "src": "2325:17:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7038,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2325:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2324:19:53"
                  },
                  "scope": 7241,
                  "src": "2141:1131:53",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8677
                  ],
                  "body": {
                    "id": 7239,
                    "nodeType": "Block",
                    "src": "3519:460:53",
                    "statements": [
                      {
                        "expression": {
                          "id": 7184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7175,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7173,
                            "src": "3529:8:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "arguments": [
                                {
                                  "id": 7178,
                                  "name": "factoryClassic",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7689,
                                  "src": "3573:14:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 7179,
                                  "name": "amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7162,
                                  "src": "3589:9:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 7180,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7167,
                                  "src": "3600:4:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                ],
                                "expression": {
                                  "id": 7176,
                                  "name": "AstraClassicLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11656,
                                  "src": "3540:19:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_AstraClassicLibrary_$11656_$",
                                    "typeString": "type(library AstraClassicLibrary)"
                                  }
                                },
                                "id": 7177,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getAmountsIn",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11655,
                                "src": "3540:32:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                  "typeString": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                                }
                              },
                              "id": 7181,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3540:65:53",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 7183,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 7182,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3606:1:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3540:68:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3529:79:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7185,
                        "nodeType": "ExpressionStatement",
                        "src": "3529:79:53"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7189,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7187,
                                "name": "amountIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7173,
                                "src": "3626:8:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 7188,
                                "name": "amountInMax",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7164,
                                "src": "3638:11:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3626:23:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "546f6f206d75636820726571756573746564",
                              "id": 7190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3651:20:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a5c1362ddf12293b907d8907d79f16e40792a7ddc4f09ee6d70cfec4ad443305",
                                "typeString": "literal_string \"Too much requested\""
                              },
                              "value": "Too much requested"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a5c1362ddf12293b907d8907d79f16e40792a7ddc4f09ee6d70cfec4ad443305",
                                "typeString": "literal_string \"Too much requested\""
                              }
                            ],
                            "id": 7186,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3618:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3618:54:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7192,
                        "nodeType": "ExpressionStatement",
                        "src": "3618:54:53"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 7194,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7167,
                                "src": "3687:4:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 7196,
                              "indexExpression": {
                                "hexValue": "30",
                                "id": 7195,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3692:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3687:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 7197,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3696:3:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7198,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3696:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 7201,
                                  "name": "factoryClassic",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7689,
                                  "src": "3736:14:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "baseExpression": {
                                    "id": 7202,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7167,
                                    "src": "3752:4:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  },
                                  "id": 7204,
                                  "indexExpression": {
                                    "hexValue": "30",
                                    "id": 7203,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3757:1:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3752:7:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "baseExpression": {
                                    "id": 7205,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7167,
                                    "src": "3761:4:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  },
                                  "id": 7207,
                                  "indexExpression": {
                                    "hexValue": "31",
                                    "id": 7206,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3766:1:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3761:7:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 7199,
                                  "name": "AstraClassicLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11656,
                                  "src": "3708:19:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_AstraClassicLibrary_$11656_$",
                                    "typeString": "type(library AstraClassicLibrary)"
                                  }
                                },
                                "id": 7200,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "pairFor",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11403,
                                "src": "3708:27:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                                  "typeString": "function (address,address,address) pure returns (address)"
                                }
                              },
                              "id": 7208,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3708:61:53",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7209,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7173,
                              "src": "3771:8:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7193,
                            "name": "pay",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2243,
                            "src": "3683:3:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 7210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3683:97:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7211,
                        "nodeType": "ExpressionStatement",
                        "src": "3683:97:53"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 7215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7212,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7169,
                            "src": "3836:2:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 7213,
                              "name": "Constants",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11678,
                              "src": "3842:9:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Constants_$11678_$",
                                "typeString": "type(library Constants)"
                              }
                            },
                            "id": 7214,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "MSG_SENDER",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11670,
                            "src": "3842:20:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3836:26:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 7224,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 7221,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7169,
                              "src": "3898:2:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "id": 7222,
                                "name": "Constants",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11678,
                                "src": "3904:9:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Constants_$11678_$",
                                  "typeString": "type(library Constants)"
                                }
                              },
                              "id": 7223,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "ADDRESS_THIS",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11677,
                              "src": "3904:22:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "3898:28:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 7232,
                          "nodeType": "IfStatement",
                          "src": "3894:52:53",
                          "trueBody": {
                            "expression": {
                              "id": 7230,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 7225,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7169,
                                "src": "3928:2:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "id": 7228,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "3941:4:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ClassicSwapRouter_$7241",
                                      "typeString": "contract ClassicSwapRouter"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ClassicSwapRouter_$7241",
                                      "typeString": "contract ClassicSwapRouter"
                                    }
                                  ],
                                  "id": 7227,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3933:7:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 7226,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3933:7:53",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 7229,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3933:13:53",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "3928:18:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 7231,
                            "nodeType": "ExpressionStatement",
                            "src": "3928:18:53"
                          }
                        },
                        "id": 7233,
                        "nodeType": "IfStatement",
                        "src": "3832:114:53",
                        "trueBody": {
                          "expression": {
                            "id": 7219,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 7216,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7169,
                              "src": "3864:2:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "expression": {
                                "id": 7217,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3869:3:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7218,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3869:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "3864:15:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 7220,
                          "nodeType": "ExpressionStatement",
                          "src": "3864:15:53"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7235,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7167,
                              "src": "3963:4:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            {
                              "id": 7236,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7169,
                              "src": "3969:2:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 7234,
                            "name": "_swap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7025,
                            "src": "3957:5:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$returns$__$",
                              "typeString": "function (address[] memory,address)"
                            }
                          },
                          "id": 7237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3957:15:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7238,
                        "nodeType": "ExpressionStatement",
                        "src": "3957:15:53"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7160,
                    "nodeType": "StructuredDocumentation",
                    "src": "3278:34:53",
                    "text": "@inheritdoc IClassicSwapRouter"
                  },
                  "functionSelector": "42712a67",
                  "id": 7240,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swapTokensForExactTokens",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7171,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3483:8:53"
                  },
                  "parameters": {
                    "id": 7170,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7162,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 7240,
                        "src": "3360:17:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7161,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3360:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7164,
                        "mutability": "mutable",
                        "name": "amountInMax",
                        "nodeType": "VariableDeclaration",
                        "scope": 7240,
                        "src": "3387:19:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7163,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3387:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7167,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 7240,
                        "src": "3416:23:53",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 7165,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3416:7:53",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 7166,
                          "nodeType": "ArrayTypeName",
                          "src": "3416:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7169,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 7240,
                        "src": "3449:10:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7168,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3449:7:53",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3350:115:53"
                  },
                  "returnParameters": {
                    "id": 7174,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7173,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 7240,
                        "src": "3501:16:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7172,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3501:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3500:18:53"
                  },
                  "scope": 7241,
                  "src": "3317:662:53",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7242,
              "src": "549:3432:53"
            }
          ],
          "src": "45:3937:53"
        },
        "id": 53
      },
      "contracts/SwapRouter02.sol": {
        "ast": {
          "absolutePath": "contracts/SwapRouter02.sol",
          "exportedSymbols": {
            "ApproveAndCall": [
              7679
            ],
            "AstraClassicLibrary": [
              11656
            ],
            "BlockTimestamp": [
              1918
            ],
            "BytesLib": [
              3178
            ],
            "CLSwapRouter": [
              6841
            ],
            "CallbackValidation": [
              3240
            ],
            "ClassicSwapRouter": [
              7241
            ],
            "Constants": [
              11678
            ],
            "FullMath": [
              913
            ],
            "IApproveAndCall": [
              8555
            ],
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "IAstraCLSwapCallback": [
              41
            ],
            "IAstraPair": [
              4481
            ],
            "ICLSwapRouter": [
              8643
            ],
            "IClassicSwapRouter": [
              8678
            ],
            "IERC165": [
              4940
            ],
            "IERC20": [
              5876
            ],
            "IERC20Permit": [
              4928
            ],
            "IERC20PermitAllowed": [
              3042
            ],
            "IERC721": [
              5992
            ],
            "IERC721Enumerable": [
              6023
            ],
            "IERC721Metadata": [
              6050
            ],
            "IERC721Permit": [
              2647
            ],
            "IImmutableState": [
              8694
            ],
            "IMulticall": [
              2662
            ],
            "IMulticallExtended": [
              8789
            ],
            "INonfungiblePositionManager": [
              2856
            ],
            "IOracleSlippage": [
              8818
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IPeripheryPayments": [
              2898
            ],
            "IPeripheryPaymentsExtended": [
              8853
            ],
            "IPeripheryPaymentsWithFee": [
              2931
            ],
            "IPeripheryPaymentsWithFeeExtended": [
              8885
            ],
            "IPoolInitializer": [
              2950
            ],
            "ISAMB": [
              3059
            ],
            "ISelfPermit": [
              3018
            ],
            "ISwapRouter02": [
              9053
            ],
            "ImmutableState": [
              7710
            ],
            "LowGasSafeMath": [
              1043
            ],
            "Multicall": [
              2003
            ],
            "MulticallExtended": [
              7766
            ],
            "OracleLibrary": [
              3829
            ],
            "OracleSlippage": [
              8300
            ],
            "Path": [
              3962
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PeripheryPayments": [
              2244
            ],
            "PeripheryPaymentsExtended": [
              8380
            ],
            "PeripheryPaymentsWithFee": [
              2425
            ],
            "PeripheryPaymentsWithFeeExtended": [
              8435
            ],
            "PeripheryValidation": [
              2445
            ],
            "PeripheryValidationExtended": [
              8459
            ],
            "PoolAddress": [
              4054
            ],
            "SafeCast": [
              1113
            ],
            "SelfPermit": [
              2612
            ],
            "SwapRouter02": [
              7285
            ],
            "TickMath": [
              1904
            ],
            "TransferHelper": [
              4225
            ]
          },
          "id": 7286,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 7243,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:54"
            },
            {
              "id": 7244,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:54"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/SelfPermit.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/SelfPermit.sol",
              "id": 7245,
              "nodeType": "ImportDirective",
              "scope": 7286,
              "sourceUnit": 2613,
              "src": "90:66:54",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "id": 7246,
              "nodeType": "ImportDirective",
              "scope": 7286,
              "sourceUnit": 2035,
              "src": "157:79:54",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/ISwapRouter02.sol",
              "file": "./interfaces/ISwapRouter02.sol",
              "id": 7247,
              "nodeType": "ImportDirective",
              "scope": 7286,
              "sourceUnit": 9054,
              "src": "238:40:54",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/ClassicSwapRouter.sol",
              "file": "./ClassicSwapRouter.sol",
              "id": 7248,
              "nodeType": "ImportDirective",
              "scope": 7286,
              "sourceUnit": 7242,
              "src": "279:33:54",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/CLSwapRouter.sol",
              "file": "./CLSwapRouter.sol",
              "id": 7249,
              "nodeType": "ImportDirective",
              "scope": 7286,
              "sourceUnit": 6842,
              "src": "313:28:54",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/base/ApproveAndCall.sol",
              "file": "./base/ApproveAndCall.sol",
              "id": 7250,
              "nodeType": "ImportDirective",
              "scope": 7286,
              "sourceUnit": 7680,
              "src": "342:35:54",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/base/MulticallExtended.sol",
              "file": "./base/MulticallExtended.sol",
              "id": 7251,
              "nodeType": "ImportDirective",
              "scope": 7286,
              "sourceUnit": 7767,
              "src": "378:38:54",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 7253,
                    "name": "ISwapRouter02",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9053,
                    "src": "487:13:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISwapRouter02_$9053",
                      "typeString": "contract ISwapRouter02"
                    }
                  },
                  "id": 7254,
                  "nodeType": "InheritanceSpecifier",
                  "src": "487:13:54"
                },
                {
                  "baseName": {
                    "id": 7255,
                    "name": "ClassicSwapRouter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7241,
                    "src": "502:17:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ClassicSwapRouter_$7241",
                      "typeString": "contract ClassicSwapRouter"
                    }
                  },
                  "id": 7256,
                  "nodeType": "InheritanceSpecifier",
                  "src": "502:17:54"
                },
                {
                  "baseName": {
                    "id": 7257,
                    "name": "CLSwapRouter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6841,
                    "src": "521:12:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CLSwapRouter_$6841",
                      "typeString": "contract CLSwapRouter"
                    }
                  },
                  "id": 7258,
                  "nodeType": "InheritanceSpecifier",
                  "src": "521:12:54"
                },
                {
                  "baseName": {
                    "id": 7259,
                    "name": "ApproveAndCall",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7679,
                    "src": "535:14:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ApproveAndCall_$7679",
                      "typeString": "contract ApproveAndCall"
                    }
                  },
                  "id": 7260,
                  "nodeType": "InheritanceSpecifier",
                  "src": "535:14:54"
                },
                {
                  "baseName": {
                    "id": 7261,
                    "name": "MulticallExtended",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7766,
                    "src": "551:17:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MulticallExtended_$7766",
                      "typeString": "contract MulticallExtended"
                    }
                  },
                  "id": 7262,
                  "nodeType": "InheritanceSpecifier",
                  "src": "551:17:54"
                },
                {
                  "baseName": {
                    "id": 7263,
                    "name": "SelfPermit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2612,
                    "src": "570:10:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SelfPermit_$2612",
                      "typeString": "contract SelfPermit"
                    }
                  },
                  "id": 7264,
                  "nodeType": "InheritanceSpecifier",
                  "src": "570:10:54"
                }
              ],
              "contractDependencies": [
                41,
                1918,
                2003,
                2034,
                2244,
                2425,
                2445,
                2612,
                2662,
                2872,
                2898,
                2931,
                3018,
                6841,
                7241,
                7679,
                7710,
                7766,
                8300,
                8380,
                8435,
                8459,
                8555,
                8643,
                8678,
                8694,
                8789,
                8818,
                8853,
                8885,
                9053
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 7252,
                "nodeType": "StructuredDocumentation",
                "src": "418:44:54",
                "text": "@title Astra Classic and CL Swap Router"
              },
              "fullyImplemented": true,
              "id": 7285,
              "linearizedBaseContracts": [
                7285,
                2612,
                7766,
                8459,
                2445,
                7679,
                6841,
                8300,
                1918,
                2003,
                7241,
                8435,
                2425,
                8380,
                8885,
                2931,
                2244,
                2034,
                2872,
                8818,
                8853,
                2898,
                7710,
                8694,
                9053,
                3018,
                8789,
                2662,
                8555,
                8643,
                41,
                8678
              ],
              "name": "SwapRouter02",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 7283,
                    "nodeType": "Block",
                    "src": "814:2:54",
                    "statements": []
                  },
                  "id": 7284,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 7275,
                          "name": "_factoryClassic",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7266,
                          "src": "737:15:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 7276,
                          "name": "_positionManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7270,
                          "src": "754:16:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 7277,
                      "modifierName": {
                        "id": 7274,
                        "name": "ImmutableState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7710,
                        "src": "722:14:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ImmutableState_$7710_$",
                          "typeString": "type(contract ImmutableState)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "722:49:54"
                    },
                    {
                      "arguments": [
                        {
                          "id": 7279,
                          "name": "factoryCL",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7268,
                          "src": "796:9:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 7280,
                          "name": "_SAMB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7272,
                          "src": "807:5:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 7281,
                      "modifierName": {
                        "id": 7278,
                        "name": "PeripheryImmutableState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2034,
                        "src": "772:23:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PeripheryImmutableState_$2034_$",
                          "typeString": "type(contract PeripheryImmutableState)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "772:41:54"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7273,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7266,
                        "mutability": "mutable",
                        "name": "_factoryClassic",
                        "nodeType": "VariableDeclaration",
                        "scope": 7284,
                        "src": "608:23:54",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7265,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "608:7:54",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7268,
                        "mutability": "mutable",
                        "name": "factoryCL",
                        "nodeType": "VariableDeclaration",
                        "scope": 7284,
                        "src": "641:17:54",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7267,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "641:7:54",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7270,
                        "mutability": "mutable",
                        "name": "_positionManager",
                        "nodeType": "VariableDeclaration",
                        "scope": 7284,
                        "src": "668:24:54",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7269,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "668:7:54",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7272,
                        "mutability": "mutable",
                        "name": "_SAMB",
                        "nodeType": "VariableDeclaration",
                        "scope": 7284,
                        "src": "702:13:54",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7271,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "702:7:54",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "598:123:54"
                  },
                  "returnParameters": {
                    "id": 7282,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "814:0:54"
                  },
                  "scope": 7285,
                  "src": "587:229:54",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 7286,
              "src": "462:356:54"
            }
          ],
          "src": "45:774:54"
        },
        "id": 54
      },
      "contracts/base/ApproveAndCall.sol": {
        "ast": {
          "absolutePath": "contracts/base/ApproveAndCall.sol",
          "exportedSymbols": {
            "ApproveAndCall": [
              7679
            ],
            "IApproveAndCall": [
              8555
            ],
            "IERC165": [
              4940
            ],
            "IERC20": [
              5876
            ],
            "IERC721": [
              5992
            ],
            "IERC721Enumerable": [
              6023
            ],
            "IERC721Metadata": [
              6050
            ],
            "IERC721Permit": [
              2647
            ],
            "IImmutableState": [
              8694
            ],
            "INonfungiblePositionManager": [
              2856
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IPeripheryPayments": [
              2898
            ],
            "IPoolInitializer": [
              2950
            ],
            "ImmutableState": [
              7710
            ]
          },
          "id": 7680,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 7287,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:55"
            },
            {
              "id": 7288,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:55"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 7289,
              "nodeType": "ImportDirective",
              "scope": 7680,
              "sourceUnit": 5877,
              "src": "90:56:55",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol",
              "file": "@airdao/astra-cl-periphery/contracts/interfaces/INonfungiblePositionManager.sol",
              "id": 7290,
              "nodeType": "ImportDirective",
              "scope": 7680,
              "sourceUnit": 2857,
              "src": "147:89:55",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IApproveAndCall.sol",
              "file": "../interfaces/IApproveAndCall.sol",
              "id": 7291,
              "nodeType": "ImportDirective",
              "scope": 7680,
              "sourceUnit": 8556,
              "src": "238:43:55",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/base/ImmutableState.sol",
              "file": "./ImmutableState.sol",
              "id": 7292,
              "nodeType": "ImportDirective",
              "scope": 7680,
              "sourceUnit": 7711,
              "src": "282:30:55",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 7294,
                    "name": "IApproveAndCall",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8555,
                    "src": "531:15:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IApproveAndCall_$8555",
                      "typeString": "contract IApproveAndCall"
                    }
                  },
                  "id": 7295,
                  "nodeType": "InheritanceSpecifier",
                  "src": "531:15:55"
                },
                {
                  "baseName": {
                    "id": 7296,
                    "name": "ImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7710,
                    "src": "548:14:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ImmutableState_$7710",
                      "typeString": "contract ImmutableState"
                    }
                  },
                  "id": 7297,
                  "nodeType": "InheritanceSpecifier",
                  "src": "548:14:55"
                }
              ],
              "contractDependencies": [
                7710,
                8555,
                8694
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 7293,
                "nodeType": "StructuredDocumentation",
                "src": "314:181:55",
                "text": "@title Approve and Call\n @notice Allows callers to approve the Astra CL position manager from this contract,\n for any token, and then make calls into the position manager"
              },
              "fullyImplemented": false,
              "id": 7679,
              "linearizedBaseContracts": [
                7679,
                7710,
                8694,
                8555
              ],
              "name": "ApproveAndCall",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 7338,
                    "nodeType": "Block",
                    "src": "643:223:55",
                    "statements": [
                      {
                        "assignments": [
                          7307,
                          7309
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7307,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 7338,
                            "src": "654:12:55",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 7306,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "654:4:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 7309,
                            "mutability": "mutable",
                            "name": "data",
                            "nodeType": "VariableDeclaration",
                            "scope": 7338,
                            "src": "668:17:55",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 7308,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "668:5:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7321,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 7314,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5876,
                                      "src": "735:6:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 7315,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5845,
                                    "src": "735:14:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function IERC20.approve(address,uint256) returns (bool)"
                                    }
                                  },
                                  "id": 7316,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "735:23:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "id": 7317,
                                  "name": "positionManager",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7693,
                                  "src": "760:15:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 7318,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7301,
                                  "src": "777:6:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 7312,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "712:3:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 7313,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "712:22:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 7319,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "712:72:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 7310,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7299,
                              "src": "701:5:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 7311,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "src": "701:10:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 7320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "701:84:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "653:132:55"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 7336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7322,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7307,
                            "src": "802:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 7334,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7326,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 7323,
                                      "name": "data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7309,
                                      "src": "814:4:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 7324,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "814:11:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 7325,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "829:1:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "814:16:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "id": 7329,
                                      "name": "data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7309,
                                      "src": "845:4:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    {
                                      "components": [
                                        {
                                          "id": 7331,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "852:4:55",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_bool_$",
                                            "typeString": "type(bool)"
                                          },
                                          "typeName": {
                                            "id": 7330,
                                            "name": "bool",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "852:4:55",
                                            "typeDescriptions": {}
                                          }
                                        }
                                      ],
                                      "id": 7332,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "851:6:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_bool_$",
                                        "typeString": "type(bool)"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      },
                                      {
                                        "typeIdentifier": "t_type$_t_bool_$",
                                        "typeString": "type(bool)"
                                      }
                                    ],
                                    "expression": {
                                      "id": 7327,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -1,
                                      "src": "834:3:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 7328,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "decode",
                                    "nodeType": "MemberAccess",
                                    "src": "834:10:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 7333,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "834:24:55",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "814:44:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 7335,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "813:46:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "802:57:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 7305,
                        "id": 7337,
                        "nodeType": "Return",
                        "src": "795:64:55"
                      }
                    ]
                  },
                  "id": 7339,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryApprove",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7302,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7299,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 7339,
                        "src": "589:13:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7298,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "589:7:55",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7301,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 7339,
                        "src": "604:14:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7300,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "604:7:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "588:31:55"
                  },
                  "returnParameters": {
                    "id": 7305,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7304,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 7339,
                        "src": "637:4:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7303,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "637:4:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "636:6:55"
                  },
                  "scope": 7679,
                  "src": "569:297:55",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    8478
                  ],
                  "body": {
                    "id": 7428,
                    "nodeType": "Block",
                    "src": "1005:722:55",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 7356,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "1086:4:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ApproveAndCall_$7679",
                                      "typeString": "contract ApproveAndCall"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ApproveAndCall_$7679",
                                      "typeString": "contract ApproveAndCall"
                                    }
                                  ],
                                  "id": 7355,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1078:7:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 7354,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1078:7:55",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 7357,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1078:13:55",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 7358,
                                "name": "positionManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7693,
                                "src": "1093:15:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 7351,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7342,
                                    "src": "1061:5:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 7350,
                                  "name": "IERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5876,
                                  "src": "1054:6:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                    "typeString": "type(contract IERC20)"
                                  }
                                },
                                "id": 7352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1054:13:55",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$5876",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 7353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allowance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5835,
                              "src": "1054:23:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address,address) view external returns (uint256)"
                              }
                            },
                            "id": 7359,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1054:55:55",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "id": 7360,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7344,
                            "src": "1113:6:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1054:65:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7365,
                        "nodeType": "IfStatement",
                        "src": "1050:103:55",
                        "trueBody": {
                          "expression": {
                            "expression": {
                              "id": 7362,
                              "name": "ApprovalType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8468,
                              "src": "1128:12:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ApprovalType_$8468_$",
                                "typeString": "type(enum IApproveAndCall.ApprovalType)"
                              }
                            },
                            "id": 7363,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "NOT_REQUIRED",
                            "nodeType": "MemberAccess",
                            "src": "1128:25:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalType_$8468",
                              "typeString": "enum IApproveAndCall.ApprovalType"
                            }
                          },
                          "functionReturnParameters": 7349,
                          "id": 7364,
                          "nodeType": "Return",
                          "src": "1121:32:55"
                        }
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 7367,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7342,
                              "src": "1236:5:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 7370,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1248:7:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 7369,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1248:7:55",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "id": 7368,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "1243:4:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 7371,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1243:13:55",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint256",
                                  "typeString": "type(uint256)"
                                }
                              },
                              "id": 7372,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "1243:17:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7366,
                            "name": "tryApprove",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7339,
                            "src": "1225:10:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 7373,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1225:36:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7377,
                        "nodeType": "IfStatement",
                        "src": "1221:65:55",
                        "trueBody": {
                          "expression": {
                            "expression": {
                              "id": 7374,
                              "name": "ApprovalType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8468,
                              "src": "1270:12:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ApprovalType_$8468_$",
                                "typeString": "type(enum IApproveAndCall.ApprovalType)"
                              }
                            },
                            "id": 7375,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "MAX",
                            "nodeType": "MemberAccess",
                            "src": "1270:16:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalType_$8468",
                              "typeString": "enum IApproveAndCall.ApprovalType"
                            }
                          },
                          "functionReturnParameters": 7349,
                          "id": 7376,
                          "nodeType": "Return",
                          "src": "1263:23:55"
                        }
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 7379,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7342,
                              "src": "1311:5:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7386,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 7382,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "1323:7:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 7381,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1323:7:55",
                                        "typeDescriptions": {}
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      }
                                    ],
                                    "id": 7380,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "1318:4:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 7383,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1318:13:55",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                    "typeString": "type(uint256)"
                                  }
                                },
                                "id": 7384,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "max",
                                "nodeType": "MemberAccess",
                                "src": "1318:17:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 7385,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1338:1:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "1318:21:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7378,
                            "name": "tryApprove",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7339,
                            "src": "1300:10:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 7387,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1300:40:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7391,
                        "nodeType": "IfStatement",
                        "src": "1296:79:55",
                        "trueBody": {
                          "expression": {
                            "expression": {
                              "id": 7388,
                              "name": "ApprovalType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8468,
                              "src": "1349:12:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ApprovalType_$8468_$",
                                "typeString": "type(enum IApproveAndCall.ApprovalType)"
                              }
                            },
                            "id": 7389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "MAX_MINUS_ONE",
                            "nodeType": "MemberAccess",
                            "src": "1349:26:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalType_$8468",
                              "typeString": "enum IApproveAndCall.ApprovalType"
                            }
                          },
                          "functionReturnParameters": 7349,
                          "id": 7390,
                          "nodeType": "Return",
                          "src": "1342:33:55"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 7394,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7342,
                                  "src": "1449:5:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "hexValue": "30",
                                  "id": 7395,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1456:1:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 7393,
                                "name": "tryApprove",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7339,
                                "src": "1438:10:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) returns (bool)"
                                }
                              },
                              "id": 7396,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1438:20:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7392,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1430:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 7397,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1430:29:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7398,
                        "nodeType": "ExpressionStatement",
                        "src": "1430:29:55"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 7400,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7342,
                              "src": "1542:5:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 7403,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1554:7:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 7402,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1554:7:55",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "id": 7401,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "1549:4:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 7404,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1549:13:55",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint256",
                                  "typeString": "type(uint256)"
                                }
                              },
                              "id": 7405,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "1549:17:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7399,
                            "name": "tryApprove",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7339,
                            "src": "1531:10:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 7406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1531:36:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7410,
                        "nodeType": "IfStatement",
                        "src": "1527:75:55",
                        "trueBody": {
                          "expression": {
                            "expression": {
                              "id": 7407,
                              "name": "ApprovalType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8468,
                              "src": "1576:12:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ApprovalType_$8468_$",
                                "typeString": "type(enum IApproveAndCall.ApprovalType)"
                              }
                            },
                            "id": 7408,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "ZERO_THEN_MAX",
                            "nodeType": "MemberAccess",
                            "src": "1576:26:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalType_$8468",
                              "typeString": "enum IApproveAndCall.ApprovalType"
                            }
                          },
                          "functionReturnParameters": 7349,
                          "id": 7409,
                          "nodeType": "Return",
                          "src": "1569:33:55"
                        }
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 7412,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7342,
                              "src": "1627:5:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7419,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 7415,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "1639:7:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 7414,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1639:7:55",
                                        "typeDescriptions": {}
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      }
                                    ],
                                    "id": 7413,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "1634:4:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 7416,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1634:13:55",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                    "typeString": "type(uint256)"
                                  }
                                },
                                "id": 7417,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "max",
                                "nodeType": "MemberAccess",
                                "src": "1634:17:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 7418,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1654:1:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "1634:21:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7411,
                            "name": "tryApprove",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7339,
                            "src": "1616:10:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 7420,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1616:40:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7424,
                        "nodeType": "IfStatement",
                        "src": "1612:89:55",
                        "trueBody": {
                          "expression": {
                            "expression": {
                              "id": 7421,
                              "name": "ApprovalType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8468,
                              "src": "1665:12:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ApprovalType_$8468_$",
                                "typeString": "type(enum IApproveAndCall.ApprovalType)"
                              }
                            },
                            "id": 7422,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "ZERO_THEN_MAX_MINUS_ONE",
                            "nodeType": "MemberAccess",
                            "src": "1665:36:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalType_$8468",
                              "typeString": "enum IApproveAndCall.ApprovalType"
                            }
                          },
                          "functionReturnParameters": 7349,
                          "id": 7423,
                          "nodeType": "Return",
                          "src": "1658:43:55"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 7425,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -19,
                              -19
                            ],
                            "referencedDeclaration": -19,
                            "src": "1712:6:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 7426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1712:8:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7427,
                        "nodeType": "ExpressionStatement",
                        "src": "1712:8:55"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7340,
                    "nodeType": "StructuredDocumentation",
                    "src": "872:31:55",
                    "text": "@inheritdoc IApproveAndCall"
                  },
                  "functionSelector": "dee00f35",
                  "id": 7429,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getApprovalType",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7346,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "973:8:55"
                  },
                  "parameters": {
                    "id": 7345,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7342,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 7429,
                        "src": "933:13:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7341,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "933:7:55",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7344,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 7429,
                        "src": "948:14:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7343,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "948:7:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "932:31:55"
                  },
                  "returnParameters": {
                    "id": 7349,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7348,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 7429,
                        "src": "991:12:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ApprovalType_$8468",
                          "typeString": "enum IApproveAndCall.ApprovalType"
                        },
                        "typeName": {
                          "id": 7347,
                          "name": "ApprovalType",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8468,
                          "src": "991:12:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_ApprovalType_$8468",
                            "typeString": "enum IApproveAndCall.ApprovalType"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "990:14:55"
                  },
                  "scope": 7679,
                  "src": "908:819:55",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8484
                  ],
                  "body": {
                    "id": 7447,
                    "nodeType": "Block",
                    "src": "1830:62:55",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 7438,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7432,
                                  "src": "1859:5:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 7441,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "1871:7:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        },
                                        "typeName": {
                                          "id": 7440,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1871:7:55",
                                          "typeDescriptions": {}
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        }
                                      ],
                                      "id": 7439,
                                      "name": "type",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -27,
                                      "src": "1866:4:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 7442,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1866:13:55",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_meta_type_t_uint256",
                                      "typeString": "type(uint256)"
                                    }
                                  },
                                  "id": 7443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "max",
                                  "nodeType": "MemberAccess",
                                  "src": "1866:17:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7437,
                                "name": "tryApprove",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7339,
                                "src": "1848:10:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) returns (bool)"
                                }
                              },
                              "id": 7444,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1848:36:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7436,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1840:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 7445,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1840:45:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7446,
                        "nodeType": "ExpressionStatement",
                        "src": "1840:45:55"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7430,
                    "nodeType": "StructuredDocumentation",
                    "src": "1733:31:55",
                    "text": "@inheritdoc IApproveAndCall"
                  },
                  "functionSelector": "571ac8b0",
                  "id": 7448,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveMax",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7434,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1821:8:55"
                  },
                  "parameters": {
                    "id": 7433,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7432,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 7448,
                        "src": "1789:13:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7431,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1789:7:55",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1788:15:55"
                  },
                  "returnParameters": {
                    "id": 7435,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1830:0:55"
                  },
                  "scope": 7679,
                  "src": "1769:123:55",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8490
                  ],
                  "body": {
                    "id": 7468,
                    "nodeType": "Block",
                    "src": "2003:66:55",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 7457,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7451,
                                  "src": "2032:5:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7464,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 7460,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "2044:7:55",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": {
                                            "id": 7459,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2044:7:55",
                                            "typeDescriptions": {}
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          }
                                        ],
                                        "id": 7458,
                                        "name": "type",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -27,
                                        "src": "2039:4:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 7461,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2039:13:55",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_meta_type_t_uint256",
                                        "typeString": "type(uint256)"
                                      }
                                    },
                                    "id": 7462,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "max",
                                    "nodeType": "MemberAccess",
                                    "src": "2039:17:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 7463,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2059:1:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "2039:21:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7456,
                                "name": "tryApprove",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7339,
                                "src": "2021:10:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) returns (bool)"
                                }
                              },
                              "id": 7465,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2021:40:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7455,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2013:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 7466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2013:49:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7467,
                        "nodeType": "ExpressionStatement",
                        "src": "2013:49:55"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7449,
                    "nodeType": "StructuredDocumentation",
                    "src": "1898:31:55",
                    "text": "@inheritdoc IApproveAndCall"
                  },
                  "functionSelector": "cab372ce",
                  "id": 7469,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveMaxMinusOne",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7453,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1994:8:55"
                  },
                  "parameters": {
                    "id": 7452,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7451,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 7469,
                        "src": "1962:13:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7450,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1962:7:55",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1961:15:55"
                  },
                  "returnParameters": {
                    "id": 7454,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2003:0:55"
                  },
                  "scope": 7679,
                  "src": "1934:135:55",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8496
                  ],
                  "body": {
                    "id": 7494,
                    "nodeType": "Block",
                    "src": "2180:101:55",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 7478,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7472,
                                  "src": "2209:5:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "hexValue": "30",
                                  "id": 7479,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2216:1:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 7477,
                                "name": "tryApprove",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7339,
                                "src": "2198:10:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) returns (bool)"
                                }
                              },
                              "id": 7480,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2198:20:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7476,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2190:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 7481,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2190:29:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7482,
                        "nodeType": "ExpressionStatement",
                        "src": "2190:29:55"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 7485,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7472,
                                  "src": "2248:5:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 7488,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "2260:7:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        },
                                        "typeName": {
                                          "id": 7487,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "2260:7:55",
                                          "typeDescriptions": {}
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        }
                                      ],
                                      "id": 7486,
                                      "name": "type",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -27,
                                      "src": "2255:4:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 7489,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2255:13:55",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_meta_type_t_uint256",
                                      "typeString": "type(uint256)"
                                    }
                                  },
                                  "id": 7490,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "max",
                                  "nodeType": "MemberAccess",
                                  "src": "2255:17:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7484,
                                "name": "tryApprove",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7339,
                                "src": "2237:10:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) returns (bool)"
                                }
                              },
                              "id": 7491,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2237:36:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7483,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2229:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 7492,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2229:45:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7493,
                        "nodeType": "ExpressionStatement",
                        "src": "2229:45:55"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7470,
                    "nodeType": "StructuredDocumentation",
                    "src": "2075:31:55",
                    "text": "@inheritdoc IApproveAndCall"
                  },
                  "functionSelector": "639d71a9",
                  "id": 7495,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveZeroThenMax",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7474,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2171:8:55"
                  },
                  "parameters": {
                    "id": 7473,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7472,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 7495,
                        "src": "2139:13:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7471,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2139:7:55",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2138:15:55"
                  },
                  "returnParameters": {
                    "id": 7475,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2180:0:55"
                  },
                  "scope": 7679,
                  "src": "2111:170:55",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8502
                  ],
                  "body": {
                    "id": 7522,
                    "nodeType": "Block",
                    "src": "2400:105:55",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 7504,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7498,
                                  "src": "2429:5:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "hexValue": "30",
                                  "id": 7505,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2436:1:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 7503,
                                "name": "tryApprove",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7339,
                                "src": "2418:10:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) returns (bool)"
                                }
                              },
                              "id": 7506,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2418:20:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7502,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2410:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 7507,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2410:29:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7508,
                        "nodeType": "ExpressionStatement",
                        "src": "2410:29:55"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 7511,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7498,
                                  "src": "2468:5:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7518,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 7514,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "2480:7:55",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": {
                                            "id": 7513,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2480:7:55",
                                            "typeDescriptions": {}
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          }
                                        ],
                                        "id": 7512,
                                        "name": "type",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -27,
                                        "src": "2475:4:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 7515,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2475:13:55",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_meta_type_t_uint256",
                                        "typeString": "type(uint256)"
                                      }
                                    },
                                    "id": 7516,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "max",
                                    "nodeType": "MemberAccess",
                                    "src": "2475:17:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 7517,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2495:1:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "2475:21:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7510,
                                "name": "tryApprove",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7339,
                                "src": "2457:10:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) returns (bool)"
                                }
                              },
                              "id": 7519,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2457:40:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7509,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2449:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 7520,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2449:49:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7521,
                        "nodeType": "ExpressionStatement",
                        "src": "2449:49:55"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7496,
                    "nodeType": "StructuredDocumentation",
                    "src": "2287:31:55",
                    "text": "@inheritdoc IApproveAndCall"
                  },
                  "functionSelector": "ab3fdd50",
                  "id": 7523,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveZeroThenMaxMinusOne",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7500,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2391:8:55"
                  },
                  "parameters": {
                    "id": 7499,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7498,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 7523,
                        "src": "2359:13:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7497,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2359:7:55",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2358:15:55"
                  },
                  "returnParameters": {
                    "id": 7501,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2400:0:55"
                  },
                  "scope": 7679,
                  "src": "2323:182:55",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8510
                  ],
                  "body": {
                    "id": 7567,
                    "nodeType": "Block",
                    "src": "2649:373:55",
                    "statements": [
                      {
                        "assignments": [
                          7533
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7533,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 7567,
                            "src": "2659:12:55",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 7532,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2659:4:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7534,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2659:12:55"
                      },
                      {
                        "expression": {
                          "id": 7542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 7535,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7533,
                                "src": "2682:7:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "id": 7536,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7530,
                                "src": "2691:6:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "id": 7537,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "2681:17:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "tuple(bool,bytes memory)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7540,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7526,
                                "src": "2722:4:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "id": 7538,
                                "name": "positionManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7693,
                                "src": "2701:15:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 7539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "2701:20:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 7541,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2701:26:55",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "tuple(bool,bytes memory)"
                            }
                          },
                          "src": "2681:46:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7543,
                        "nodeType": "ExpressionStatement",
                        "src": "2681:46:55"
                      },
                      {
                        "condition": {
                          "id": 7545,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "2742:8:55",
                          "subExpression": {
                            "id": 7544,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7533,
                            "src": "2743:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7566,
                        "nodeType": "IfStatement",
                        "src": "2738:278:55",
                        "trueBody": {
                          "id": 7565,
                          "nodeType": "Block",
                          "src": "2752:264:55",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7549,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 7546,
                                    "name": "result",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7530,
                                    "src": "2846:6:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 7547,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "2846:13:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "3638",
                                  "id": 7548,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2862:2:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_68_by_1",
                                    "typeString": "int_const 68"
                                  },
                                  "value": "68"
                                },
                                "src": "2846:18:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 7553,
                              "nodeType": "IfStatement",
                              "src": "2842:32:55",
                              "trueBody": {
                                "expression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 7550,
                                    "name": "revert",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -19,
                                      -19
                                    ],
                                    "referencedDeclaration": -19,
                                    "src": "2866:6:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 7551,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2866:8:55",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 7552,
                                "nodeType": "ExpressionStatement",
                                "src": "2866:8:55"
                              }
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "2897:59:55",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2915:27:55",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "result",
                                          "nodeType": "YulIdentifier",
                                          "src": "2929:6:55"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2937:4:55",
                                          "type": "",
                                          "value": "0x04"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2925:3:55"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2925:17:55"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "result",
                                        "nodeType": "YulIdentifier",
                                        "src": "2915:6:55"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 7530,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "2915:6:55",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 7530,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "2929:6:55",
                                  "valueSize": 1
                                }
                              ],
                              "id": 7554,
                              "nodeType": "InlineAssembly",
                              "src": "2888:68:55"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 7558,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7530,
                                        "src": "2987:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "components": [
                                          {
                                            "id": 7560,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "2996:6:55",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                              "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                              "id": 7559,
                                              "name": "string",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "2996:6:55",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "id": 7561,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "2995:8:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      ],
                                      "expression": {
                                        "id": 7556,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "2976:3:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 7557,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "src": "2976:10:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 7562,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2976:28:55",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 7555,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "2969:6:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 7563,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2969:36:55",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7564,
                              "nodeType": "ExpressionStatement",
                              "src": "2969:36:55"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7524,
                    "nodeType": "StructuredDocumentation",
                    "src": "2511:31:55",
                    "text": "@inheritdoc IApproveAndCall"
                  },
                  "functionSelector": "b3a2af13",
                  "id": 7568,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "callPositionManager",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7528,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2610:8:55"
                  },
                  "parameters": {
                    "id": 7527,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7526,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 7568,
                        "src": "2576:17:55",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7525,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2576:5:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2575:19:55"
                  },
                  "returnParameters": {
                    "id": 7531,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7530,
                        "mutability": "mutable",
                        "name": "result",
                        "nodeType": "VariableDeclaration",
                        "scope": 7568,
                        "src": "2628:19:55",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7529,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2628:5:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2627:21:55"
                  },
                  "scope": 7679,
                  "src": "2547:475:55",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 7585,
                    "nodeType": "Block",
                    "src": "3093:62:55",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 7581,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "3142:4:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ApproveAndCall_$7679",
                                    "typeString": "contract ApproveAndCall"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ApproveAndCall_$7679",
                                    "typeString": "contract ApproveAndCall"
                                  }
                                ],
                                "id": 7580,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3134:7:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 7579,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3134:7:55",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 7582,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3134:13:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7576,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7570,
                                  "src": "3117:5:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7575,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5876,
                                "src": "3110:6:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 7577,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3110:13:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$5876",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7578,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5815,
                            "src": "3110:23:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 7583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3110:38:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7574,
                        "id": 7584,
                        "nodeType": "Return",
                        "src": "3103:45:55"
                      }
                    ]
                  },
                  "id": 7586,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7571,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7570,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 7586,
                        "src": "3047:13:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7569,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3047:7:55",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3046:15:55"
                  },
                  "returnParameters": {
                    "id": 7574,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7573,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 7586,
                        "src": "3084:7:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7572,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3084:7:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3083:9:55"
                  },
                  "scope": 7679,
                  "src": "3028:127:55",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    8535
                  ],
                  "body": {
                    "id": 7636,
                    "nodeType": "Block",
                    "src": "3295:907:55",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 7598,
                                      "name": "INonfungiblePositionManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2856,
                                      "src": "3405:27:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_INonfungiblePositionManager_$2856_$",
                                        "typeString": "type(contract INonfungiblePositionManager)"
                                      }
                                    },
                                    "id": 7599,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "mint",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2784,
                                    "src": "3405:32:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_payable$_t_struct$_MintParams_$2770_calldata_ptr_$returns$_t_uint256_$_t_uint128_$_t_uint256_$_t_uint256_$",
                                      "typeString": "function INonfungiblePositionManager.mint(struct INonfungiblePositionManager.MintParams calldata) payable returns (uint256,uint128,uint256,uint256)"
                                    }
                                  },
                                  "id": 7600,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "3405:41:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 7603,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7589,
                                        "src": "3541:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                                          "typeString": "struct IApproveAndCall.MintParams calldata"
                                        }
                                      },
                                      "id": 7604,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "token0",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8512,
                                      "src": "3541:13:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 7605,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7589,
                                        "src": "3588:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                                          "typeString": "struct IApproveAndCall.MintParams calldata"
                                        }
                                      },
                                      "id": 7606,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "token1",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8514,
                                      "src": "3588:13:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 7607,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7589,
                                        "src": "3632:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                                          "typeString": "struct IApproveAndCall.MintParams calldata"
                                        }
                                      },
                                      "id": 7608,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "fee",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8516,
                                      "src": "3632:10:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 7609,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7589,
                                        "src": "3679:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                                          "typeString": "struct IApproveAndCall.MintParams calldata"
                                        }
                                      },
                                      "id": 7610,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "tickLower",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8518,
                                      "src": "3679:16:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 7611,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7589,
                                        "src": "3732:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                                          "typeString": "struct IApproveAndCall.MintParams calldata"
                                        }
                                      },
                                      "id": 7612,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "tickUpper",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8520,
                                      "src": "3732:16:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 7614,
                                            "name": "params",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7589,
                                            "src": "3800:6:55",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                                              "typeString": "struct IApproveAndCall.MintParams calldata"
                                            }
                                          },
                                          "id": 7615,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "token0",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 8512,
                                          "src": "3800:13:55",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 7613,
                                        "name": "balanceOf",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7586,
                                        "src": "3790:9:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                          "typeString": "function (address) view returns (uint256)"
                                        }
                                      },
                                      "id": 7616,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "3790:24:55",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 7618,
                                            "name": "params",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7589,
                                            "src": "3866:6:55",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                                              "typeString": "struct IApproveAndCall.MintParams calldata"
                                            }
                                          },
                                          "id": 7619,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "token1",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 8514,
                                          "src": "3866:13:55",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 7617,
                                        "name": "balanceOf",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7586,
                                        "src": "3856:9:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                          "typeString": "function (address) view returns (uint256)"
                                        }
                                      },
                                      "id": 7620,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "3856:24:55",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 7621,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7589,
                                        "src": "3918:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                                          "typeString": "struct IApproveAndCall.MintParams calldata"
                                        }
                                      },
                                      "id": 7622,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "amount0Min",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8522,
                                      "src": "3918:17:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 7623,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7589,
                                        "src": "3973:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                                          "typeString": "struct IApproveAndCall.MintParams calldata"
                                        }
                                      },
                                      "id": 7624,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "amount1Min",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8524,
                                      "src": "3973:17:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 7625,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7589,
                                        "src": "4027:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                                          "typeString": "struct IApproveAndCall.MintParams calldata"
                                        }
                                      },
                                      "id": 7626,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "recipient",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8526,
                                      "src": "4027:16:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 7629,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "4084:7:55",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_uint256_$",
                                              "typeString": "type(uint256)"
                                            },
                                            "typeName": {
                                              "id": 7628,
                                              "name": "uint256",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "4084:7:55",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_type$_t_uint256_$",
                                              "typeString": "type(uint256)"
                                            }
                                          ],
                                          "id": 7627,
                                          "name": "type",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -27,
                                          "src": "4079:4:55",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                            "typeString": "function () pure"
                                          }
                                        },
                                        "id": 7630,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4079:13:55",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_meta_type_t_uint256",
                                          "typeString": "type(uint256)"
                                        }
                                      },
                                      "id": 7631,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "max",
                                      "nodeType": "MemberAccess",
                                      "src": "4079:17:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      },
                                      {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      },
                                      {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 7601,
                                      "name": "INonfungiblePositionManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2856,
                                      "src": "3468:27:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_INonfungiblePositionManager_$2856_$",
                                        "typeString": "type(contract INonfungiblePositionManager)"
                                      }
                                    },
                                    "id": 7602,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "MintParams",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2770,
                                    "src": "3468:38:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_struct$_MintParams_$2770_storage_ptr_$",
                                      "typeString": "type(struct INonfungiblePositionManager.MintParams storage pointer)"
                                    }
                                  },
                                  "id": 7632,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "structConstructorCall",
                                  "lValueRequested": false,
                                  "names": [
                                    "token0",
                                    "token1",
                                    "fee",
                                    "tickLower",
                                    "tickUpper",
                                    "amount0Desired",
                                    "amount1Desired",
                                    "amount0Min",
                                    "amount1Min",
                                    "recipient",
                                    "deadline"
                                  ],
                                  "nodeType": "FunctionCall",
                                  "src": "3468:695:55",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MintParams_$2770_memory_ptr",
                                    "typeString": "struct INonfungiblePositionManager.MintParams memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_MintParams_$2770_memory_ptr",
                                    "typeString": "struct INonfungiblePositionManager.MintParams memory"
                                  }
                                ],
                                "expression": {
                                  "id": 7596,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "3361:3:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 7597,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "3361:22:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 7633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3361:820:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 7595,
                            "name": "callPositionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7568,
                            "src": "3324:19:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) returns (bytes memory)"
                            }
                          },
                          "id": 7634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3324:871:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 7594,
                        "id": 7635,
                        "nodeType": "Return",
                        "src": "3305:890:55"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7587,
                    "nodeType": "StructuredDocumentation",
                    "src": "3161:31:55",
                    "text": "@inheritdoc IApproveAndCall"
                  },
                  "functionSelector": "11ed56c9",
                  "id": 7637,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7591,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3256:8:55"
                  },
                  "parameters": {
                    "id": 7590,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7589,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 7637,
                        "src": "3211:26:55",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                          "typeString": "struct IApproveAndCall.MintParams"
                        },
                        "typeName": {
                          "id": 7588,
                          "name": "MintParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8527,
                          "src": "3211:10:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintParams_$8527_storage_ptr",
                            "typeString": "struct IApproveAndCall.MintParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3210:28:55"
                  },
                  "returnParameters": {
                    "id": 7594,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7593,
                        "mutability": "mutable",
                        "name": "result",
                        "nodeType": "VariableDeclaration",
                        "scope": 7637,
                        "src": "3274:19:55",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7592,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3274:5:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3273:21:55"
                  },
                  "scope": 7679,
                  "src": "3197:1005:55",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8554
                  ],
                  "body": {
                    "id": 7677,
                    "nodeType": "Block",
                    "src": "4404:688:55",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 7649,
                                      "name": "INonfungiblePositionManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2856,
                                      "src": "4514:27:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_INonfungiblePositionManager_$2856_$",
                                        "typeString": "type(contract INonfungiblePositionManager)"
                                      }
                                    },
                                    "id": 7650,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "increaseLiquidity",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2809,
                                    "src": "4514:45:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_payable$_t_struct$_IncreaseLiquidityParams_$2797_calldata_ptr_$returns$_t_uint128_$_t_uint256_$_t_uint256_$",
                                      "typeString": "function INonfungiblePositionManager.increaseLiquidity(struct INonfungiblePositionManager.IncreaseLiquidityParams calldata) payable returns (uint128,uint256,uint256)"
                                    }
                                  },
                                  "id": 7651,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "4514:54:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 7654,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7640,
                                        "src": "4677:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$8546_calldata_ptr",
                                          "typeString": "struct IApproveAndCall.IncreaseLiquidityParams calldata"
                                        }
                                      },
                                      "id": 7655,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "tokenId",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8541,
                                      "src": "4677:14:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 7657,
                                            "name": "params",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7640,
                                            "src": "4743:6:55",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$8546_calldata_ptr",
                                              "typeString": "struct IApproveAndCall.IncreaseLiquidityParams calldata"
                                            }
                                          },
                                          "id": 7658,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "token0",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 8537,
                                          "src": "4743:13:55",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 7656,
                                        "name": "balanceOf",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7586,
                                        "src": "4733:9:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                          "typeString": "function (address) view returns (uint256)"
                                        }
                                      },
                                      "id": 7659,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4733:24:55",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 7661,
                                            "name": "params",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7640,
                                            "src": "4809:6:55",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$8546_calldata_ptr",
                                              "typeString": "struct IApproveAndCall.IncreaseLiquidityParams calldata"
                                            }
                                          },
                                          "id": 7662,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "token1",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 8539,
                                          "src": "4809:13:55",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 7660,
                                        "name": "balanceOf",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7586,
                                        "src": "4799:9:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                          "typeString": "function (address) view returns (uint256)"
                                        }
                                      },
                                      "id": 7663,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4799:24:55",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 7664,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7640,
                                        "src": "4861:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$8546_calldata_ptr",
                                          "typeString": "struct IApproveAndCall.IncreaseLiquidityParams calldata"
                                        }
                                      },
                                      "id": 7665,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "amount0Min",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8543,
                                      "src": "4861:17:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 7666,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7640,
                                        "src": "4916:6:55",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$8546_calldata_ptr",
                                          "typeString": "struct IApproveAndCall.IncreaseLiquidityParams calldata"
                                        }
                                      },
                                      "id": 7667,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "amount1Min",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 8545,
                                      "src": "4916:17:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 7670,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "4974:7:55",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_uint256_$",
                                              "typeString": "type(uint256)"
                                            },
                                            "typeName": {
                                              "id": 7669,
                                              "name": "uint256",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "4974:7:55",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_type$_t_uint256_$",
                                              "typeString": "type(uint256)"
                                            }
                                          ],
                                          "id": 7668,
                                          "name": "type",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -27,
                                          "src": "4969:4:55",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                            "typeString": "function () pure"
                                          }
                                        },
                                        "id": 7671,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4969:13:55",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_meta_type_t_uint256",
                                          "typeString": "type(uint256)"
                                        }
                                      },
                                      "id": 7672,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "max",
                                      "nodeType": "MemberAccess",
                                      "src": "4969:17:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 7652,
                                      "name": "INonfungiblePositionManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2856,
                                      "src": "4590:27:55",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_INonfungiblePositionManager_$2856_$",
                                        "typeString": "type(contract INonfungiblePositionManager)"
                                      }
                                    },
                                    "id": 7653,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "IncreaseLiquidityParams",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2797,
                                    "src": "4590:51:55",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_struct$_IncreaseLiquidityParams_$2797_storage_ptr_$",
                                      "typeString": "type(struct INonfungiblePositionManager.IncreaseLiquidityParams storage pointer)"
                                    }
                                  },
                                  "id": 7673,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "structConstructorCall",
                                  "lValueRequested": false,
                                  "names": [
                                    "tokenId",
                                    "amount0Desired",
                                    "amount1Desired",
                                    "amount0Min",
                                    "amount1Min",
                                    "deadline"
                                  ],
                                  "nodeType": "FunctionCall",
                                  "src": "4590:463:55",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$2797_memory_ptr",
                                    "typeString": "struct INonfungiblePositionManager.IncreaseLiquidityParams memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$2797_memory_ptr",
                                    "typeString": "struct INonfungiblePositionManager.IncreaseLiquidityParams memory"
                                  }
                                ],
                                "expression": {
                                  "id": 7647,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "4470:3:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 7648,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "4470:22:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 7674,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4470:601:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 7646,
                            "name": "callPositionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7568,
                            "src": "4433:19:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) returns (bytes memory)"
                            }
                          },
                          "id": 7675,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4433:652:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 7645,
                        "id": 7676,
                        "nodeType": "Return",
                        "src": "4414:671:55"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7638,
                    "nodeType": "StructuredDocumentation",
                    "src": "4208:31:55",
                    "text": "@inheritdoc IApproveAndCall"
                  },
                  "functionSelector": "f100b205",
                  "id": 7678,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseLiquidity",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7642,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4353:8:55"
                  },
                  "parameters": {
                    "id": 7641,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7640,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 7678,
                        "src": "4271:39:55",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$8546_calldata_ptr",
                          "typeString": "struct IApproveAndCall.IncreaseLiquidityParams"
                        },
                        "typeName": {
                          "id": 7639,
                          "name": "IncreaseLiquidityParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8546,
                          "src": "4271:23:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$8546_storage_ptr",
                            "typeString": "struct IApproveAndCall.IncreaseLiquidityParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4270:41:55"
                  },
                  "returnParameters": {
                    "id": 7645,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7644,
                        "mutability": "mutable",
                        "name": "result",
                        "nodeType": "VariableDeclaration",
                        "scope": 7678,
                        "src": "4379:19:55",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7643,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4379:5:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4378:21:55"
                  },
                  "scope": 7679,
                  "src": "4244:848:55",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7680,
              "src": "495:4599:55"
            }
          ],
          "src": "45:5050:55"
        },
        "id": 55
      },
      "contracts/base/ImmutableState.sol": {
        "ast": {
          "absolutePath": "contracts/base/ImmutableState.sol",
          "exportedSymbols": {
            "IImmutableState": [
              8694
            ],
            "ImmutableState": [
              7710
            ]
          },
          "id": 7711,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 7681,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:56"
            },
            {
              "absolutePath": "contracts/interfaces/IImmutableState.sol",
              "file": "../interfaces/IImmutableState.sol",
              "id": 7682,
              "nodeType": "ImportDirective",
              "scope": 7711,
              "sourceUnit": 8695,
              "src": "70:43:56",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 7684,
                    "name": "IImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8694,
                    "src": "230:15:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IImmutableState_$8694",
                      "typeString": "contract IImmutableState"
                    }
                  },
                  "id": 7685,
                  "nodeType": "InheritanceSpecifier",
                  "src": "230:15:56"
                }
              ],
              "contractDependencies": [
                8694
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 7683,
                "nodeType": "StructuredDocumentation",
                "src": "115:79:56",
                "text": "@title Immutable state\n @notice Immutable state used by the swap router"
              },
              "fullyImplemented": true,
              "id": 7710,
              "linearizedBaseContracts": [
                7710,
                8694
              ],
              "name": "ImmutableState",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    8687
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 7686,
                    "nodeType": "StructuredDocumentation",
                    "src": "252:31:56",
                    "text": "@inheritdoc IImmutableState"
                  },
                  "functionSelector": "4f04a0db",
                  "id": 7689,
                  "mutability": "immutable",
                  "name": "factoryClassic",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 7688,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "313:8:56"
                  },
                  "scope": 7710,
                  "src": "288:48:56",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7687,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "288:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    8693
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 7690,
                    "nodeType": "StructuredDocumentation",
                    "src": "342:31:56",
                    "text": "@inheritdoc IImmutableState"
                  },
                  "functionSelector": "791b98bc",
                  "id": 7693,
                  "mutability": "immutable",
                  "name": "positionManager",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 7692,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "403:8:56"
                  },
                  "scope": 7710,
                  "src": "378:49:56",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7691,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "378:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 7708,
                    "nodeType": "Block",
                    "src": "497:93:56",
                    "statements": [
                      {
                        "expression": {
                          "id": 7702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7700,
                            "name": "factoryClassic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7689,
                            "src": "507:14:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 7701,
                            "name": "_factoryClassic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7695,
                            "src": "524:15:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "507:32:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 7703,
                        "nodeType": "ExpressionStatement",
                        "src": "507:32:56"
                      },
                      {
                        "expression": {
                          "id": 7706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7704,
                            "name": "positionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7693,
                            "src": "549:15:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 7705,
                            "name": "_positionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7697,
                            "src": "567:16:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "549:34:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 7707,
                        "nodeType": "ExpressionStatement",
                        "src": "549:34:56"
                      }
                    ]
                  },
                  "id": 7709,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7698,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7695,
                        "mutability": "mutable",
                        "name": "_factoryClassic",
                        "nodeType": "VariableDeclaration",
                        "scope": 7709,
                        "src": "446:23:56",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7694,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "446:7:56",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7697,
                        "mutability": "mutable",
                        "name": "_positionManager",
                        "nodeType": "VariableDeclaration",
                        "scope": 7709,
                        "src": "471:24:56",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7696,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "471:7:56",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "445:51:56"
                  },
                  "returnParameters": {
                    "id": 7699,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "497:0:56"
                  },
                  "scope": 7710,
                  "src": "434:156:56",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7711,
              "src": "194:398:56"
            }
          ],
          "src": "45:548:56"
        },
        "id": 56
      },
      "contracts/base/MulticallExtended.sol": {
        "ast": {
          "absolutePath": "contracts/base/MulticallExtended.sol",
          "exportedSymbols": {
            "BlockTimestamp": [
              1918
            ],
            "IMulticall": [
              2662
            ],
            "IMulticallExtended": [
              8789
            ],
            "Multicall": [
              2003
            ],
            "MulticallExtended": [
              7766
            ],
            "PeripheryValidation": [
              2445
            ],
            "PeripheryValidationExtended": [
              8459
            ]
          },
          "id": 7767,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 7712,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:57"
            },
            {
              "id": 7713,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:57"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/Multicall.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/Multicall.sol",
              "id": 7714,
              "nodeType": "ImportDirective",
              "scope": 7767,
              "sourceUnit": 2004,
              "src": "90:65:57",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IMulticallExtended.sol",
              "file": "../interfaces/IMulticallExtended.sol",
              "id": 7715,
              "nodeType": "ImportDirective",
              "scope": 7767,
              "sourceUnit": 8790,
              "src": "157:46:57",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/base/PeripheryValidationExtended.sol",
              "file": "../base/PeripheryValidationExtended.sol",
              "id": 7716,
              "nodeType": "ImportDirective",
              "scope": 7767,
              "sourceUnit": 8460,
              "src": "204:49:57",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 7718,
                    "name": "IMulticallExtended",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8789,
                    "src": "393:18:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IMulticallExtended_$8789",
                      "typeString": "contract IMulticallExtended"
                    }
                  },
                  "id": 7719,
                  "nodeType": "InheritanceSpecifier",
                  "src": "393:18:57"
                },
                {
                  "baseName": {
                    "id": 7720,
                    "name": "Multicall",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2003,
                    "src": "413:9:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Multicall_$2003",
                      "typeString": "contract Multicall"
                    }
                  },
                  "id": 7721,
                  "nodeType": "InheritanceSpecifier",
                  "src": "413:9:57"
                },
                {
                  "baseName": {
                    "id": 7722,
                    "name": "PeripheryValidationExtended",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8459,
                    "src": "424:27:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryValidationExtended_$8459",
                      "typeString": "contract PeripheryValidationExtended"
                    }
                  },
                  "id": 7723,
                  "nodeType": "InheritanceSpecifier",
                  "src": "424:27:57"
                }
              ],
              "contractDependencies": [
                1918,
                2003,
                2445,
                2662,
                8459,
                8789
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 7717,
                "nodeType": "StructuredDocumentation",
                "src": "255:99:57",
                "text": "@title Multicall\n @notice Enables calling multiple methods in a single call to the contract"
              },
              "fullyImplemented": true,
              "id": 7766,
              "linearizedBaseContracts": [
                7766,
                8459,
                2445,
                1918,
                2003,
                8789,
                2662
              ],
              "name": "MulticallExtended",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    8776
                  ],
                  "body": {
                    "id": 7743,
                    "nodeType": "Block",
                    "src": "676:39:57",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7740,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7729,
                              "src": "703:4:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "bytes calldata[] calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "bytes calldata[] calldata"
                              }
                            ],
                            "id": 7739,
                            "name": "multicall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2002,
                            "src": "693:9:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "function (bytes calldata[] calldata) returns (bytes memory[] memory)"
                            }
                          },
                          "id": 7741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "693:15:57",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                            "typeString": "bytes memory[] memory"
                          }
                        },
                        "functionReturnParameters": 7738,
                        "id": 7742,
                        "nodeType": "Return",
                        "src": "686:22:57"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7724,
                    "nodeType": "StructuredDocumentation",
                    "src": "458:34:57",
                    "text": "@inheritdoc IMulticallExtended"
                  },
                  "functionSelector": "5ae401dc",
                  "id": 7744,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 7733,
                          "name": "deadline",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7726,
                          "src": "629:8:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 7734,
                      "modifierName": {
                        "id": 7732,
                        "name": "checkDeadline",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2444,
                        "src": "615:13:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$_t_uint256_$",
                          "typeString": "modifier (uint256)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "615:23:57"
                    }
                  ],
                  "name": "multicall",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7731,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "598:8:57"
                  },
                  "parameters": {
                    "id": 7730,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7726,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nodeType": "VariableDeclaration",
                        "scope": 7744,
                        "src": "516:16:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7725,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "516:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7729,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 7744,
                        "src": "534:21:57",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 7727,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "534:5:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 7728,
                          "nodeType": "ArrayTypeName",
                          "src": "534:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "515:41:57"
                  },
                  "returnParameters": {
                    "id": 7738,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7737,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 7744,
                        "src": "656:14:57",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 7735,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "656:5:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 7736,
                          "nodeType": "ArrayTypeName",
                          "src": "656:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "655:16:57"
                  },
                  "scope": 7766,
                  "src": "497:218:57",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8788
                  ],
                  "body": {
                    "id": 7764,
                    "nodeType": "Block",
                    "src": "966:39:57",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7761,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7750,
                              "src": "993:4:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "bytes calldata[] calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                "typeString": "bytes calldata[] calldata"
                              }
                            ],
                            "id": 7760,
                            "name": "multicall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2002,
                            "src": "983:9:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "function (bytes calldata[] calldata) returns (bytes memory[] memory)"
                            }
                          },
                          "id": 7762,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "983:15:57",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                            "typeString": "bytes memory[] memory"
                          }
                        },
                        "functionReturnParameters": 7759,
                        "id": 7763,
                        "nodeType": "Return",
                        "src": "976:22:57"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7745,
                    "nodeType": "StructuredDocumentation",
                    "src": "721:34:57",
                    "text": "@inheritdoc IMulticallExtended"
                  },
                  "functionSelector": "1f0464d1",
                  "id": 7765,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 7754,
                          "name": "previousBlockhash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7747,
                          "src": "910:17:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "id": 7755,
                      "modifierName": {
                        "id": 7753,
                        "name": "checkPreviousBlockhash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8458,
                        "src": "887:22:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$_t_bytes32_$",
                          "typeString": "modifier (bytes32)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "887:41:57"
                    }
                  ],
                  "name": "multicall",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7752,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "870:8:57"
                  },
                  "parameters": {
                    "id": 7751,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7747,
                        "mutability": "mutable",
                        "name": "previousBlockhash",
                        "nodeType": "VariableDeclaration",
                        "scope": 7765,
                        "src": "779:25:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 7746,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "779:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7750,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 7765,
                        "src": "806:21:57",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 7748,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "806:5:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 7749,
                          "nodeType": "ArrayTypeName",
                          "src": "806:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "778:50:57"
                  },
                  "returnParameters": {
                    "id": 7759,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7758,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 7765,
                        "src": "946:14:57",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 7756,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "946:5:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 7757,
                          "nodeType": "ArrayTypeName",
                          "src": "946:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "945:16:57"
                  },
                  "scope": 7766,
                  "src": "760:245:57",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7767,
              "src": "354:653:57"
            }
          ],
          "src": "45:963:57"
        },
        "id": 57
      },
      "contracts/base/OracleSlippage.sol": {
        "ast": {
          "absolutePath": "contracts/base/OracleSlippage.sol",
          "exportedSymbols": {
            "BlockTimestamp": [
              1918
            ],
            "BytesLib": [
              3178
            ],
            "FullMath": [
              913
            ],
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "IOracleSlippage": [
              8818
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "OracleLibrary": [
              3829
            ],
            "OracleSlippage": [
              8300
            ],
            "Path": [
              3962
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PoolAddress": [
              4054
            ],
            "TickMath": [
              1904
            ]
          },
          "id": 8301,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 7768,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:58"
            },
            {
              "id": 7769,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:58"
            },
            {
              "absolutePath": "contracts/interfaces/IOracleSlippage.sol",
              "file": "../interfaces/IOracleSlippage.sol",
              "id": 7770,
              "nodeType": "ImportDirective",
              "scope": 8301,
              "sourceUnit": 8819,
              "src": "90:43:58",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "id": 7771,
              "nodeType": "ImportDirective",
              "scope": 8301,
              "sourceUnit": 2035,
              "src": "135:79:58",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/BlockTimestamp.sol",
              "id": 7772,
              "nodeType": "ImportDirective",
              "scope": 8301,
              "sourceUnit": 1919,
              "src": "215:70:58",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/Path.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/Path.sol",
              "id": 7773,
              "nodeType": "ImportDirective",
              "scope": 8301,
              "sourceUnit": 3963,
              "src": "286:65:58",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
              "id": 7774,
              "nodeType": "ImportDirective",
              "scope": 8301,
              "sourceUnit": 4055,
              "src": "352:72:58",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "id": 7775,
              "nodeType": "ImportDirective",
              "scope": 8301,
              "sourceUnit": 28,
              "src": "425:69:58",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/OracleLibrary.sol",
              "id": 7776,
              "nodeType": "ImportDirective",
              "scope": 8301,
              "sourceUnit": 3830,
              "src": "495:74:58",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 7777,
                    "name": "IOracleSlippage",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8818,
                    "src": "607:15:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleSlippage_$8818",
                      "typeString": "contract IOracleSlippage"
                    }
                  },
                  "id": 7778,
                  "nodeType": "InheritanceSpecifier",
                  "src": "607:15:58"
                },
                {
                  "baseName": {
                    "id": 7779,
                    "name": "PeripheryImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2034,
                    "src": "624:23:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryImmutableState_$2034",
                      "typeString": "contract PeripheryImmutableState"
                    }
                  },
                  "id": 7780,
                  "nodeType": "InheritanceSpecifier",
                  "src": "624:23:58"
                },
                {
                  "baseName": {
                    "id": 7781,
                    "name": "BlockTimestamp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1918,
                    "src": "649:14:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BlockTimestamp_$1918",
                      "typeString": "contract BlockTimestamp"
                    }
                  },
                  "id": 7782,
                  "nodeType": "InheritanceSpecifier",
                  "src": "649:14:58"
                }
              ],
              "contractDependencies": [
                1918,
                2034,
                2872,
                8818
              ],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 8300,
              "linearizedBaseContracts": [
                8300,
                1918,
                2034,
                2872,
                8818
              ],
              "name": "OracleSlippage",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 7785,
                  "libraryName": {
                    "id": 7783,
                    "name": "Path",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3962,
                    "src": "676:4:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Path_$3962",
                      "typeString": "library Path"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "670:21:58",
                  "typeName": {
                    "id": 7784,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "685:5:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  }
                },
                {
                  "body": {
                    "id": 7888,
                    "nodeType": "Block",
                    "src": "964:1318:58",
                    "statements": [
                      {
                        "assignments": [
                          7796
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7796,
                            "mutability": "mutable",
                            "name": "observationIndex",
                            "nodeType": "VariableDeclaration",
                            "scope": 7888,
                            "src": "974:23:58",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            "typeName": {
                              "id": 7795,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "974:6:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7797,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "974:23:58"
                      },
                      {
                        "assignments": [
                          7799
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7799,
                            "mutability": "mutable",
                            "name": "observationCardinality",
                            "nodeType": "VariableDeclaration",
                            "scope": 7888,
                            "src": "1007:29:58",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            "typeName": {
                              "id": 7798,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "1007:6:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7800,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1007:29:58"
                      },
                      {
                        "expression": {
                          "id": 7808,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              null,
                              {
                                "id": 7801,
                                "name": "currentTick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7793,
                                "src": "1049:11:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              {
                                "id": 7802,
                                "name": "observationIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7796,
                                "src": "1062:16:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              {
                                "id": 7803,
                                "name": "observationCardinality",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7799,
                                "src": "1080:22:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              null,
                              null,
                              null
                            ],
                            "id": 7804,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "1046:63:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$_t_int24_$_t_uint16_$_t_uint16_$__$__$__$",
                              "typeString": "tuple(,int24,uint16,uint16,,,)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 7805,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7788,
                                "src": "1112:4:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                  "typeString": "contract IAstraCLPool"
                                }
                              },
                              "id": 7806,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "slot0",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 374,
                              "src": "1112:10:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                                "typeString": "function () view external returns (uint160,int24,uint16,uint16,uint16,uint8,bool)"
                              }
                            },
                            "id": 7807,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1112:12:58",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                              "typeString": "tuple(uint160,int24,uint16,uint16,uint16,uint8,bool)"
                            }
                          },
                          "src": "1046:78:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7809,
                        "nodeType": "ExpressionStatement",
                        "src": "1046:78:58"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 7813,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7811,
                                "name": "observationCardinality",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7799,
                                "src": "1226:22:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 7812,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1251:1:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "1226:26:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e454f",
                              "id": 7814,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1254:5:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6dc5790d7c4bfaaa2e4f8e2cd517bacd4a3831f85c0964e56f2743cbb847bc46",
                                "typeString": "literal_string \"NEO\""
                              },
                              "value": "NEO"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6dc5790d7c4bfaaa2e4f8e2cd517bacd4a3831f85c0964e56f2743cbb847bc46",
                                "typeString": "literal_string \"NEO\""
                              }
                            ],
                            "id": 7810,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1218:7:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1218:42:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7816,
                        "nodeType": "ExpressionStatement",
                        "src": "1218:42:58"
                      },
                      {
                        "assignments": [
                          7818,
                          7820,
                          null,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7818,
                            "mutability": "mutable",
                            "name": "observationTimestamp",
                            "nodeType": "VariableDeclaration",
                            "scope": 7888,
                            "src": "1578:27:58",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 7817,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1578:6:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 7820,
                            "mutability": "mutable",
                            "name": "tickCumulative",
                            "nodeType": "VariableDeclaration",
                            "scope": 7888,
                            "src": "1607:20:58",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            },
                            "typeName": {
                              "id": 7819,
                              "name": "int56",
                              "nodeType": "ElementaryTypeName",
                              "src": "1607:5:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            "visibility": "internal"
                          },
                          null,
                          null
                        ],
                        "id": 7825,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 7823,
                              "name": "observationIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7796,
                              "src": "1653:16:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "expression": {
                              "id": 7821,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7788,
                              "src": "1635:4:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 7822,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "observations",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 460,
                            "src": "1635:17:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                              "typeString": "function (uint256) view external returns (uint32,int56,uint160,bool)"
                            }
                          },
                          "id": 7824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1635:35:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                            "typeString": "tuple(uint32,int56,uint160,bool)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1577:93:58"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 7832,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7826,
                            "name": "observationTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7818,
                            "src": "1684:20:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 7829,
                                  "name": "_blockTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1917,
                                  "src": "1715:15:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 7830,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1715:17:58",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7828,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1708:6:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint32_$",
                                "typeString": "type(uint32)"
                              },
                              "typeName": {
                                "id": 7827,
                                "name": "uint32",
                                "nodeType": "ElementaryTypeName",
                                "src": "1708:6:58",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7831,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1708:25:58",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "1684:49:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 7886,
                          "nodeType": "Block",
                          "src": "1797:479:58",
                          "statements": [
                            {
                              "assignments": [
                                7839
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7839,
                                  "mutability": "mutable",
                                  "name": "prevIndex",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7886,
                                  "src": "1811:17:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 7838,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1811:7:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7851,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7850,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7847,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7845,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "arguments": [
                                            {
                                              "id": 7842,
                                              "name": "observationIndex",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7796,
                                              "src": "1840:16:58",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint16",
                                                "typeString": "uint16"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_uint16",
                                                "typeString": "uint16"
                                              }
                                            ],
                                            "id": 7841,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "1832:7:58",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_uint256_$",
                                              "typeString": "type(uint256)"
                                            },
                                            "typeName": {
                                              "id": 7840,
                                              "name": "uint256",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "1832:7:58",
                                              "typeDescriptions": {}
                                            }
                                          },
                                          "id": 7843,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "1832:25:58",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7844,
                                          "name": "observationCardinality",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7799,
                                          "src": "1860:22:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint16",
                                            "typeString": "uint16"
                                          }
                                        },
                                        "src": "1832:50:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 7846,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1885:1:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "1832:54:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7848,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1831:56:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "%",
                                "rightExpression": {
                                  "id": 7849,
                                  "name": "observationCardinality",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7799,
                                  "src": "1890:22:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "src": "1831:81:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1811:101:58"
                            },
                            {
                              "assignments": [
                                7853,
                                7855,
                                null,
                                7857
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7853,
                                  "mutability": "mutable",
                                  "name": "prevObservationTimestamp",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7886,
                                  "src": "1927:31:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  },
                                  "typeName": {
                                    "id": 7852,
                                    "name": "uint32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1927:6:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 7855,
                                  "mutability": "mutable",
                                  "name": "prevTickCumulative",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7886,
                                  "src": "1960:24:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  },
                                  "typeName": {
                                    "id": 7854,
                                    "name": "int56",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1960:5:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int56",
                                      "typeString": "int56"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                null,
                                {
                                  "constant": false,
                                  "id": 7857,
                                  "mutability": "mutable",
                                  "name": "prevInitialized",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7886,
                                  "src": "1988:20:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 7856,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1988:4:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7862,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 7860,
                                    "name": "prevIndex",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7839,
                                    "src": "2046:9:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 7858,
                                    "name": "pool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7788,
                                    "src": "2028:4:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                      "typeString": "contract IAstraCLPool"
                                    }
                                  },
                                  "id": 7859,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "observations",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 460,
                                  "src": "2028:17:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                                    "typeString": "function (uint256) view external returns (uint32,int56,uint160,bool)"
                                  }
                                },
                                "id": 7861,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2028:28:58",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint32_$_t_int56_$_t_uint160_$_t_bool_$",
                                  "typeString": "tuple(uint32,int56,uint160,bool)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1926:130:58"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 7864,
                                    "name": "prevInitialized",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7857,
                                    "src": "2079:15:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "4f4e49",
                                    "id": 7865,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2096:5:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_4375a34c158c497e1dec923d39179cd2bff1d358f7876b16ed4f850d3b707895",
                                      "typeString": "literal_string \"ONI\""
                                    },
                                    "value": "ONI"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_4375a34c158c497e1dec923d39179cd2bff1d358f7876b16ed4f850d3b707895",
                                      "typeString": "literal_string \"ONI\""
                                    }
                                  ],
                                  "id": 7863,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "2071:7:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 7866,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2071:31:58",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7867,
                              "nodeType": "ExpressionStatement",
                              "src": "2071:31:58"
                            },
                            {
                              "assignments": [
                                7869
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7869,
                                  "mutability": "mutable",
                                  "name": "delta",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7886,
                                  "src": "2117:12:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  },
                                  "typeName": {
                                    "id": 7868,
                                    "name": "uint32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2117:6:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7873,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                "id": 7872,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 7870,
                                  "name": "observationTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7818,
                                  "src": "2132:20:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 7871,
                                  "name": "prevObservationTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7853,
                                  "src": "2155:24:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "2132:47:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2117:62:58"
                            },
                            {
                              "expression": {
                                "id": 7884,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 7874,
                                  "name": "blockStartingTick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7791,
                                  "src": "2193:17:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      },
                                      "id": 7882,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "components": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_int56",
                                              "typeString": "int56"
                                            },
                                            "id": 7879,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 7877,
                                              "name": "tickCumulative",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7820,
                                              "src": "2220:14:58",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                              "id": 7878,
                                              "name": "prevTickCumulative",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7855,
                                              "src": "2237:18:58",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              }
                                            },
                                            "src": "2220:35:58",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int56",
                                              "typeString": "int56"
                                            }
                                          }
                                        ],
                                        "id": 7880,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "2219:37:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "/",
                                      "rightExpression": {
                                        "id": 7881,
                                        "name": "delta",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7869,
                                        "src": "2259:5:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      },
                                      "src": "2219:45:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      }
                                    ],
                                    "id": 7876,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2213:5:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int24_$",
                                      "typeString": "type(int24)"
                                    },
                                    "typeName": {
                                      "id": 7875,
                                      "name": "int24",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2213:5:58",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 7883,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2213:52:58",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "src": "2193:72:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "id": 7885,
                              "nodeType": "ExpressionStatement",
                              "src": "2193:72:58"
                            }
                          ]
                        },
                        "id": 7887,
                        "nodeType": "IfStatement",
                        "src": "1680:596:58",
                        "trueBody": {
                          "id": 7837,
                          "nodeType": "Block",
                          "src": "1735:56:58",
                          "statements": [
                            {
                              "expression": {
                                "id": 7835,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 7833,
                                  "name": "blockStartingTick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7791,
                                  "src": "1749:17:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 7834,
                                  "name": "currentTick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7793,
                                  "src": "1769:11:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "src": "1749:31:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "id": 7836,
                              "nodeType": "ExpressionStatement",
                              "src": "1749:31:58"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7786,
                    "nodeType": "StructuredDocumentation",
                    "src": "697:108:58",
                    "text": "@dev Returns the tick as of the beginning of the current block, and as of right now, for the given pool."
                  },
                  "id": 7889,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getBlockStartingAndCurrentTick",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7789,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7788,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 7889,
                        "src": "850:17:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 7787,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "850:12:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "849:19:58"
                  },
                  "returnParameters": {
                    "id": 7794,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7791,
                        "mutability": "mutable",
                        "name": "blockStartingTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 7889,
                        "src": "916:23:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 7790,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "916:5:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7793,
                        "mutability": "mutable",
                        "name": "currentTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 7889,
                        "src": "941:17:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 7792,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "941:5:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "915:44:58"
                  },
                  "scope": 8300,
                  "src": "810:1472:58",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7916,
                    "nodeType": "Block",
                    "src": "2521:118:58",
                    "statements": [
                      {
                        "expression": {
                          "id": 7914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7901,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7899,
                            "src": "2531:4:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 7905,
                                    "name": "factory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2013,
                                    "src": "2578:7:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "id": 7908,
                                        "name": "tokenA",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7892,
                                        "src": "2610:6:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 7909,
                                        "name": "tokenB",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7894,
                                        "src": "2618:6:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 7910,
                                        "name": "fee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7896,
                                        "src": "2626:3:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint24",
                                          "typeString": "uint24"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint24",
                                          "typeString": "uint24"
                                        }
                                      ],
                                      "expression": {
                                        "id": 7906,
                                        "name": "PoolAddress",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4054,
                                        "src": "2587:11:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                          "typeString": "type(library PoolAddress)"
                                        }
                                      },
                                      "id": 7907,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "getPoolKey",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4006,
                                      "src": "2587:22:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint24_$returns$_t_struct$_PoolKey_$3975_memory_ptr_$",
                                        "typeString": "function (address,address,uint24) pure returns (struct PoolAddress.PoolKey memory)"
                                      }
                                    },
                                    "id": 7911,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2587:43:58",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                      "typeString": "struct PoolAddress.PoolKey memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                      "typeString": "struct PoolAddress.PoolKey memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 7903,
                                    "name": "PoolAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4054,
                                    "src": "2551:11:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                      "typeString": "type(library PoolAddress)"
                                    }
                                  },
                                  "id": 7904,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "computeAddress",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4053,
                                  "src": "2551:26:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_address_$_t_struct$_PoolKey_$3975_memory_ptr_$returns$_t_address_$",
                                    "typeString": "function (address,struct PoolAddress.PoolKey memory) pure returns (address)"
                                  }
                                },
                                "id": 7912,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2551:80:58",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7902,
                              "name": "IAstraCLPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27,
                              "src": "2538:12:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                "typeString": "type(contract IAstraCLPool)"
                              }
                            },
                            "id": 7913,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2538:94:58",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            }
                          },
                          "src": "2531:101:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "id": 7915,
                        "nodeType": "ExpressionStatement",
                        "src": "2531:101:58"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7890,
                    "nodeType": "StructuredDocumentation",
                    "src": "2288:80:58",
                    "text": "@dev Virtual function to get pool addresses that can be overridden in tests."
                  },
                  "id": 7917,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolAddress",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7897,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7892,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 7917,
                        "src": "2406:14:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7891,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2406:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7894,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 7917,
                        "src": "2430:14:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7893,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2430:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7896,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 7917,
                        "src": "2454:10:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 7895,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2454:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2396:74:58"
                  },
                  "returnParameters": {
                    "id": 7900,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7899,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 7917,
                        "src": "2502:17:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 7898,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "2502:12:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2501:19:58"
                  },
                  "scope": 8300,
                  "src": "2373:266:58",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8089,
                    "nodeType": "Block",
                    "src": "3062:2400:58",
                    "statements": [
                      {
                        "assignments": [
                          7930
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7930,
                            "mutability": "mutable",
                            "name": "lowerTicksAreWorse",
                            "nodeType": "VariableDeclaration",
                            "scope": 8089,
                            "src": "3072:23:58",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 7929,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3072:4:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7931,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3072:23:58"
                      },
                      {
                        "assignments": [
                          7933
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7933,
                            "mutability": "mutable",
                            "name": "numPools",
                            "nodeType": "VariableDeclaration",
                            "scope": 8089,
                            "src": "3106:16:58",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7932,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3106:7:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7937,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 7934,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7920,
                              "src": "3125:4:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 7935,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "numPools",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3894,
                            "src": "3125:13:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) pure returns (uint256)"
                            }
                          },
                          "id": 7936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3125:15:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3106:34:58"
                      },
                      {
                        "assignments": [
                          7939
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7939,
                            "mutability": "mutable",
                            "name": "previousTokenIn",
                            "nodeType": "VariableDeclaration",
                            "scope": 8089,
                            "src": "3150:23:58",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 7938,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3150:7:58",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7940,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3150:23:58"
                      },
                      {
                        "body": {
                          "id": 8073,
                          "nodeType": "Block",
                          "src": "3222:2008:58",
                          "statements": [
                            {
                              "assignments": [
                                7952,
                                7954,
                                7956
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7952,
                                  "mutability": "mutable",
                                  "name": "tokenIn",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8073,
                                  "src": "3298:15:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 7951,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3298:7:58",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 7954,
                                  "mutability": "mutable",
                                  "name": "tokenOut",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8073,
                                  "src": "3315:16:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 7953,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3315:7:58",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 7956,
                                  "mutability": "mutable",
                                  "name": "fee",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8073,
                                  "src": "3333:10:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  "typeName": {
                                    "id": 7955,
                                    "name": "uint24",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3333:6:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint24",
                                      "typeString": "uint24"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7960,
                              "initialValue": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 7957,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7920,
                                    "src": "3347:4:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 7958,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decodeFirstPool",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3928,
                                  "src": "3347:20:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                                  }
                                },
                                "id": 7959,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3347:22:58",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                                  "typeString": "tuple(address,address,uint24)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3297:72:58"
                            },
                            {
                              "assignments": [
                                7962
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7962,
                                  "mutability": "mutable",
                                  "name": "pool",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8073,
                                  "src": "3383:17:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                    "typeString": "contract IAstraCLPool"
                                  },
                                  "typeName": {
                                    "id": 7961,
                                    "name": "IAstraCLPool",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 27,
                                    "src": "3383:12:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                      "typeString": "contract IAstraCLPool"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7968,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 7964,
                                    "name": "tokenIn",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7952,
                                    "src": "3418:7:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 7965,
                                    "name": "tokenOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7954,
                                    "src": "3427:8:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 7966,
                                    "name": "fee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7956,
                                    "src": "3437:3:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint24",
                                      "typeString": "uint24"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint24",
                                      "typeString": "uint24"
                                    }
                                  ],
                                  "id": 7963,
                                  "name": "getPoolAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7917,
                                  "src": "3403:14:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                                    "typeString": "function (address,address,uint24) view returns (contract IAstraCLPool)"
                                  }
                                },
                                "id": 7967,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3403:38:58",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                  "typeString": "contract IAstraCLPool"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3383:58:58"
                            },
                            {
                              "assignments": [
                                7970
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7970,
                                  "mutability": "mutable",
                                  "name": "averageTick",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8073,
                                  "src": "3526:18:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "typeName": {
                                    "id": 7969,
                                    "name": "int256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3526:6:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7971,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3526:18:58"
                            },
                            {
                              "assignments": [
                                7973
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7973,
                                  "mutability": "mutable",
                                  "name": "currentTick",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8073,
                                  "src": "3558:18:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "typeName": {
                                    "id": 7972,
                                    "name": "int256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3558:6:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7974,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3558:18:58"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                "id": 7977,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 7975,
                                  "name": "secondsAgo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7922,
                                  "src": "3594:10:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 7976,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3608:1:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3594:15:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 8008,
                                "nodeType": "Block",
                                "src": "3814:171:58",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 7997,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "components": [
                                          {
                                            "id": 7987,
                                            "name": "averageTick",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7970,
                                            "src": "3833:11:58",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          },
                                          null
                                        ],
                                        "id": 7988,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "TupleExpression",
                                        "src": "3832:15:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_int256_$__$",
                                          "typeString": "tuple(int256,)"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "id": 7993,
                                                "name": "pool",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7962,
                                                "src": "3880:4:58",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                  "typeString": "contract IAstraCLPool"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                  "typeString": "contract IAstraCLPool"
                                                }
                                              ],
                                              "id": 7992,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "3872:7:58",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": {
                                                "id": 7991,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3872:7:58",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 7994,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3872:13:58",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "id": 7995,
                                            "name": "secondsAgo",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7922,
                                            "src": "3887:10:58",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "expression": {
                                            "id": 7989,
                                            "name": "OracleLibrary",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3829,
                                            "src": "3850:13:58",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_contract$_OracleLibrary_$3829_$",
                                              "typeString": "type(library OracleLibrary)"
                                            }
                                          },
                                          "id": 7990,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "consult",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3375,
                                          "src": "3850:21:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint32_$returns$_t_int24_$_t_uint128_$",
                                            "typeString": "function (address,uint32) view returns (int24,uint128)"
                                          }
                                        },
                                        "id": 7996,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3850:48:58",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_int24_$_t_uint128_$",
                                          "typeString": "tuple(int24,uint128)"
                                        }
                                      },
                                      "src": "3832:66:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 7998,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3832:66:58"
                                  },
                                  {
                                    "expression": {
                                      "id": 8006,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "components": [
                                          null,
                                          {
                                            "id": 7999,
                                            "name": "currentTick",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7973,
                                            "src": "3919:11:58",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          },
                                          null,
                                          null,
                                          null,
                                          null,
                                          null
                                        ],
                                        "id": 8000,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "TupleExpression",
                                        "src": "3916:25:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$__$_t_int256_$__$__$__$__$__$",
                                          "typeString": "tuple(,int256,,,,,)"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "arguments": [
                                              {
                                                "id": 8002,
                                                "name": "pool",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7962,
                                                "src": "3957:4:58",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                  "typeString": "contract IAstraCLPool"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                  "typeString": "contract IAstraCLPool"
                                                }
                                              ],
                                              "id": 8001,
                                              "name": "IAstraCLPool",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 27,
                                              "src": "3944:12:58",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                                "typeString": "type(contract IAstraCLPool)"
                                              }
                                            },
                                            "id": 8003,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3944:18:58",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                              "typeString": "contract IAstraCLPool"
                                            }
                                          },
                                          "id": 8004,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "slot0",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 374,
                                          "src": "3944:24:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                                            "typeString": "function () view external returns (uint160,int24,uint16,uint16,uint16,uint8,bool)"
                                          }
                                        },
                                        "id": 8005,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3944:26:58",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                                          "typeString": "tuple(uint160,int24,uint16,uint16,uint16,uint8,bool)"
                                        }
                                      },
                                      "src": "3916:54:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 8007,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3916:54:58"
                                  }
                                ]
                              },
                              "id": 8009,
                              "nodeType": "IfStatement",
                              "src": "3590:395:58",
                              "trueBody": {
                                "id": 7986,
                                "nodeType": "Block",
                                "src": "3611:197:58",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 7984,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "components": [
                                          {
                                            "id": 7978,
                                            "name": "averageTick",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7970,
                                            "src": "3729:11:58",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          },
                                          {
                                            "id": 7979,
                                            "name": "currentTick",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7973,
                                            "src": "3742:11:58",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          }
                                        ],
                                        "id": 7980,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "TupleExpression",
                                        "src": "3728:26:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                                          "typeString": "tuple(int256,int256)"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "id": 7982,
                                            "name": "pool",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7962,
                                            "src": "3788:4:58",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                              "typeString": "contract IAstraCLPool"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                              "typeString": "contract IAstraCLPool"
                                            }
                                          ],
                                          "id": 7981,
                                          "name": "getBlockStartingAndCurrentTick",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7889,
                                          "src": "3757:30:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_view$_t_contract$_IAstraCLPool_$27_$returns$_t_int24_$_t_int24_$",
                                            "typeString": "function (contract IAstraCLPool) view returns (int24,int24)"
                                          }
                                        },
                                        "id": 7983,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3757:36:58",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_int24_$_t_int24_$",
                                          "typeString": "tuple(int24,int24)"
                                        }
                                      },
                                      "src": "3728:65:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 7985,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3728:65:58"
                                  }
                                ]
                              }
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8014,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 8010,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7942,
                                  "src": "4003:1:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8013,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 8011,
                                    "name": "numPools",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7933,
                                    "src": "4008:8:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 8012,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4019:1:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "4008:12:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4003:17:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 8032,
                                "nodeType": "Block",
                                "src": "4498:183:58",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 8026,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 8022,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7920,
                                        "src": "4600:4:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "id": 8023,
                                            "name": "path",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7920,
                                            "src": "4607:4:58",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 8024,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "skipToken",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3961,
                                          "src": "4607:14:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                            "typeString": "function (bytes memory) pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 8025,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4607:16:58",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "src": "4600:23:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 8027,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4600:23:58"
                                  },
                                  {
                                    "expression": {
                                      "id": 8030,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 8028,
                                        "name": "previousTokenIn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7939,
                                        "src": "4641:15:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 8029,
                                        "name": "tokenIn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7952,
                                        "src": "4659:7:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "src": "4641:25:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 8031,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4641:25:58"
                                  }
                                ]
                              },
                              "id": 8033,
                              "nodeType": "IfStatement",
                              "src": "3999:682:58",
                              "trueBody": {
                                "id": 8021,
                                "nodeType": "Block",
                                "src": "4022:470:58",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 8019,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 8015,
                                        "name": "lowerTicksAreWorse",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7930,
                                        "src": "4438:18:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "commonType": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        "id": 8018,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 8016,
                                          "name": "tokenIn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7952,
                                          "src": "4459:7:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 8017,
                                          "name": "tokenOut",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7954,
                                          "src": "4469:8:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "src": "4459:18:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "4438:39:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 8020,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4438:39:58"
                                  }
                                ]
                              }
                            },
                            {
                              "assignments": [
                                8035
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8035,
                                  "mutability": "mutable",
                                  "name": "add",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8073,
                                  "src": "4857:8:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 8034,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4857:4:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8052,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 8051,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8038,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 8036,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7942,
                                        "src": "4869:1:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "hexValue": "30",
                                        "id": 8037,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "4874:1:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "4869:6:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "id": 8039,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4868:8:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "condition": {
                                        "commonType": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        "id": 8042,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 8040,
                                          "name": "previousTokenIn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7939,
                                          "src": "4881:15:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 8041,
                                          "name": "tokenIn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7952,
                                          "src": "4899:7:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "src": "4881:25:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        "id": 8048,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 8046,
                                          "name": "tokenOut",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7954,
                                          "src": "4930:8:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 8047,
                                          "name": "tokenIn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7952,
                                          "src": "4941:7:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "src": "4930:18:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "id": 8049,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "Conditional",
                                      "src": "4881:67:58",
                                      "trueExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        "id": 8045,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 8043,
                                          "name": "tokenIn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7952,
                                          "src": "4909:7:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 8044,
                                          "name": "tokenOut",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7954,
                                          "src": "4919:8:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "src": "4909:18:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "id": 8050,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4880:69:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "4868:81:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "4857:92:58"
                            },
                            {
                              "condition": {
                                "id": 8053,
                                "name": "add",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8035,
                                "src": "4967:3:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 8071,
                                "nodeType": "Block",
                                "src": "5099:121:58",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 8065,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 8063,
                                        "name": "syntheticAverageTick",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7925,
                                        "src": "5117:20:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "-=",
                                      "rightHandSide": {
                                        "id": 8064,
                                        "name": "averageTick",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7970,
                                        "src": "5141:11:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "5117:35:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "id": 8066,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5117:35:58"
                                  },
                                  {
                                    "expression": {
                                      "id": 8069,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 8067,
                                        "name": "syntheticCurrentTick",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7927,
                                        "src": "5170:20:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "-=",
                                      "rightHandSide": {
                                        "id": 8068,
                                        "name": "currentTick",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7973,
                                        "src": "5194:11:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "5170:35:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "id": 8070,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5170:35:58"
                                  }
                                ]
                              },
                              "id": 8072,
                              "nodeType": "IfStatement",
                              "src": "4963:257:58",
                              "trueBody": {
                                "id": 8062,
                                "nodeType": "Block",
                                "src": "4972:121:58",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 8056,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 8054,
                                        "name": "syntheticAverageTick",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7925,
                                        "src": "4990:20:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "id": 8055,
                                        "name": "averageTick",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7970,
                                        "src": "5014:11:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "4990:35:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "id": 8057,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4990:35:58"
                                  },
                                  {
                                    "expression": {
                                      "id": 8060,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 8058,
                                        "name": "syntheticCurrentTick",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7927,
                                        "src": "5043:20:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "id": 8059,
                                        "name": "currentTick",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7973,
                                        "src": "5067:11:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "5043:35:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "id": 8061,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5043:35:58"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7947,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7945,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7942,
                            "src": "3203:1:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 7946,
                            "name": "numPools",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7933,
                            "src": "3207:8:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3203:12:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8074,
                        "initializationExpression": {
                          "assignments": [
                            7942
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 7942,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 8074,
                              "src": "3188:9:58",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 7941,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "3188:7:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 7944,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 7943,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3200:1:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "3188:13:58"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 7949,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "3217:3:58",
                            "subExpression": {
                              "id": 7948,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7942,
                              "src": "3217:1:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7950,
                          "nodeType": "ExpressionStatement",
                          "src": "3217:3:58"
                        },
                        "nodeType": "ForStatement",
                        "src": "3183:2047:58"
                      },
                      {
                        "condition": {
                          "id": 8076,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "5344:19:58",
                          "subExpression": {
                            "id": 8075,
                            "name": "lowerTicksAreWorse",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7930,
                            "src": "5345:18:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8088,
                        "nodeType": "IfStatement",
                        "src": "5340:116:58",
                        "trueBody": {
                          "id": 8087,
                          "nodeType": "Block",
                          "src": "5365:91:58",
                          "statements": [
                            {
                              "expression": {
                                "id": 8080,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 8077,
                                  "name": "syntheticAverageTick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7925,
                                  "src": "5379:20:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "*=",
                                "rightHandSide": {
                                  "id": 8079,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "-",
                                  "prefix": true,
                                  "src": "5403:2:58",
                                  "subExpression": {
                                    "hexValue": "31",
                                    "id": 8078,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5404:1:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_minus_1_by_1",
                                    "typeString": "int_const -1"
                                  }
                                },
                                "src": "5379:26:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 8081,
                              "nodeType": "ExpressionStatement",
                              "src": "5379:26:58"
                            },
                            {
                              "expression": {
                                "id": 8085,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 8082,
                                  "name": "syntheticCurrentTick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7927,
                                  "src": "5419:20:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "*=",
                                "rightHandSide": {
                                  "id": 8084,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "-",
                                  "prefix": true,
                                  "src": "5443:2:58",
                                  "subExpression": {
                                    "hexValue": "31",
                                    "id": 8083,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5444:1:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_minus_1_by_1",
                                    "typeString": "int_const -1"
                                  }
                                },
                                "src": "5419:26:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 8086,
                              "nodeType": "ExpressionStatement",
                              "src": "5419:26:58"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7918,
                    "nodeType": "StructuredDocumentation",
                    "src": "2645:238:58",
                    "text": "@dev Returns the synthetic time-weighted average tick as of secondsAgo, as well as the current tick,\n for the given path. Returned synthetic ticks always represent tokenOut/tokenIn prices,\n meaning lower ticks are worse."
                  },
                  "id": 8090,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSyntheticTicks",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7923,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7920,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 8090,
                        "src": "2915:17:58",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7919,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2915:5:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7922,
                        "mutability": "mutable",
                        "name": "secondsAgo",
                        "nodeType": "VariableDeclaration",
                        "scope": 8090,
                        "src": "2934:17:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 7921,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2934:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2914:38:58"
                  },
                  "returnParameters": {
                    "id": 7928,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7925,
                        "mutability": "mutable",
                        "name": "syntheticAverageTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 8090,
                        "src": "3000:27:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7924,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3000:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7927,
                        "mutability": "mutable",
                        "name": "syntheticCurrentTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 8090,
                        "src": "3029:27:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 7926,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3029:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2999:58:58"
                  },
                  "scope": 8300,
                  "src": "2888:2574:58",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8110,
                    "nodeType": "Block",
                    "src": "5597:45:58",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 8107,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "id": 8104,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 8099,
                                      "name": "z",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8096,
                                      "src": "5616:1:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "id": 8102,
                                          "name": "y",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8093,
                                          "src": "5626:1:58",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        ],
                                        "id": 8101,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "5620:5:58",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_int24_$",
                                          "typeString": "type(int24)"
                                        },
                                        "typeName": {
                                          "id": 8100,
                                          "name": "int24",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "5620:5:58",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 8103,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5620:8:58",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    "src": "5616:12:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  }
                                ],
                                "id": 8105,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5615:14:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 8106,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8093,
                                "src": "5633:1:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "src": "5615:19:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 8098,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5607:7:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 8108,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5607:28:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8109,
                        "nodeType": "ExpressionStatement",
                        "src": "5607:28:58"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8091,
                    "nodeType": "StructuredDocumentation",
                    "src": "5468:66:58",
                    "text": "@dev Cast a int256 to a int24, revert on overflow or underflow"
                  },
                  "id": 8111,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8094,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8093,
                        "mutability": "mutable",
                        "name": "y",
                        "nodeType": "VariableDeclaration",
                        "scope": 8111,
                        "src": "5556:8:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8092,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5556:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5555:10:58"
                  },
                  "returnParameters": {
                    "id": 8097,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8096,
                        "mutability": "mutable",
                        "name": "z",
                        "nodeType": "VariableDeclaration",
                        "scope": 8111,
                        "src": "5588:7:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 8095,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "5588:5:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5587:9:58"
                  },
                  "scope": 8300,
                  "src": "5539:103:58",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 8233,
                    "nodeType": "Block",
                    "src": "6335:1050:58",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8132,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 8128,
                                  "name": "paths",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8115,
                                  "src": "6353:5:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "bytes memory[] memory"
                                  }
                                },
                                "id": 8129,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "6353:12:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "id": 8130,
                                  "name": "amounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8118,
                                  "src": "6369:7:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                    "typeString": "uint128[] memory"
                                  }
                                },
                                "id": 8131,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "6369:14:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6353:30:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 8127,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6345:7:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 8133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6345:39:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8134,
                        "nodeType": "ExpressionStatement",
                        "src": "6345:39:58"
                      },
                      {
                        "assignments": [
                          8139
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8139,
                            "mutability": "mutable",
                            "name": "weightedSyntheticAverageTicks",
                            "nodeType": "VariableDeclaration",
                            "scope": 8233,
                            "src": "6395:69:58",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct OracleLibrary.WeightedTickData[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 8137,
                                "name": "OracleLibrary.WeightedTickData",
                                "nodeType": "UserDefinedTypeName",
                                "referencedDeclaration": 3687,
                                "src": "6395:30:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_WeightedTickData_$3687_storage_ptr",
                                  "typeString": "struct OracleLibrary.WeightedTickData"
                                }
                              },
                              "id": 8138,
                              "nodeType": "ArrayTypeName",
                              "src": "6395:32:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_storage_$dyn_storage_ptr",
                                "typeString": "struct OracleLibrary.WeightedTickData[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8146,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 8143,
                                "name": "paths",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8115,
                                "src": "6516:5:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "bytes memory[] memory"
                                }
                              },
                              "id": 8144,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "6516:12:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8142,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "6479:36:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (struct OracleLibrary.WeightedTickData memory[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 8140,
                                "name": "OracleLibrary.WeightedTickData",
                                "nodeType": "UserDefinedTypeName",
                                "referencedDeclaration": 3687,
                                "src": "6483:30:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_WeightedTickData_$3687_storage_ptr",
                                  "typeString": "struct OracleLibrary.WeightedTickData"
                                }
                              },
                              "id": 8141,
                              "nodeType": "ArrayTypeName",
                              "src": "6483:32:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_storage_$dyn_storage_ptr",
                                "typeString": "struct OracleLibrary.WeightedTickData[]"
                              }
                            }
                          },
                          "id": 8145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6479:50:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6395:134:58"
                      },
                      {
                        "assignments": [
                          8151
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8151,
                            "mutability": "mutable",
                            "name": "weightedSyntheticCurrentTicks",
                            "nodeType": "VariableDeclaration",
                            "scope": 8233,
                            "src": "6539:69:58",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct OracleLibrary.WeightedTickData[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 8149,
                                "name": "OracleLibrary.WeightedTickData",
                                "nodeType": "UserDefinedTypeName",
                                "referencedDeclaration": 3687,
                                "src": "6539:30:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_WeightedTickData_$3687_storage_ptr",
                                  "typeString": "struct OracleLibrary.WeightedTickData"
                                }
                              },
                              "id": 8150,
                              "nodeType": "ArrayTypeName",
                              "src": "6539:32:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_storage_$dyn_storage_ptr",
                                "typeString": "struct OracleLibrary.WeightedTickData[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8158,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 8155,
                                "name": "paths",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8115,
                                "src": "6660:5:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "bytes memory[] memory"
                                }
                              },
                              "id": 8156,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "6660:12:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8154,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "6623:36:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (struct OracleLibrary.WeightedTickData memory[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 8152,
                                "name": "OracleLibrary.WeightedTickData",
                                "nodeType": "UserDefinedTypeName",
                                "referencedDeclaration": 3687,
                                "src": "6627:30:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_WeightedTickData_$3687_storage_ptr",
                                  "typeString": "struct OracleLibrary.WeightedTickData"
                                }
                              },
                              "id": 8153,
                              "nodeType": "ArrayTypeName",
                              "src": "6627:32:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_storage_$dyn_storage_ptr",
                                "typeString": "struct OracleLibrary.WeightedTickData[]"
                              }
                            }
                          },
                          "id": 8157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6623:50:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6539:134:58"
                      },
                      {
                        "body": {
                          "id": 8217,
                          "nodeType": "Block",
                          "src": "6727:423:58",
                          "statements": [
                            {
                              "assignments": [
                                8171,
                                8173
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8171,
                                  "mutability": "mutable",
                                  "name": "syntheticAverageTick",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8217,
                                  "src": "6742:27:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "typeName": {
                                    "id": 8170,
                                    "name": "int256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6742:6:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 8173,
                                  "mutability": "mutable",
                                  "name": "syntheticCurrentTick",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8217,
                                  "src": "6771:27:58",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "typeName": {
                                    "id": 8172,
                                    "name": "int256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6771:6:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8180,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 8175,
                                      "name": "paths",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8115,
                                      "src": "6820:5:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "bytes memory[] memory"
                                      }
                                    },
                                    "id": 8177,
                                    "indexExpression": {
                                      "id": 8176,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8160,
                                      "src": "6826:1:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6820:8:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  {
                                    "id": 8178,
                                    "name": "secondsAgo",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8120,
                                    "src": "6830:10:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  ],
                                  "id": 8174,
                                  "name": "getSyntheticTicks",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    8090,
                                    8234
                                  ],
                                  "referencedDeclaration": 8090,
                                  "src": "6802:17:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_uint32_$returns$_t_int256_$_t_int256_$",
                                    "typeString": "function (bytes memory,uint32) view returns (int256,int256)"
                                  }
                                },
                                "id": 8179,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6802:39:58",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                                  "typeString": "tuple(int256,int256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6741:100:58"
                            },
                            {
                              "expression": {
                                "id": 8188,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8181,
                                      "name": "weightedSyntheticAverageTicks",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8139,
                                      "src": "6855:29:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                                      }
                                    },
                                    "id": 8183,
                                    "indexExpression": {
                                      "id": 8182,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8160,
                                      "src": "6885:1:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6855:32:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_WeightedTickData_$3687_memory_ptr",
                                      "typeString": "struct OracleLibrary.WeightedTickData memory"
                                    }
                                  },
                                  "id": 8184,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "tick",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3684,
                                  "src": "6855:37:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 8186,
                                      "name": "syntheticAverageTick",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8171,
                                      "src": "6903:20:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 8185,
                                    "name": "toInt24",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8111,
                                    "src": "6895:7:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int24_$",
                                      "typeString": "function (int256) pure returns (int24)"
                                    }
                                  },
                                  "id": 8187,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6895:29:58",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "src": "6855:69:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "id": 8189,
                              "nodeType": "ExpressionStatement",
                              "src": "6855:69:58"
                            },
                            {
                              "expression": {
                                "id": 8197,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8190,
                                      "name": "weightedSyntheticCurrentTicks",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8151,
                                      "src": "6938:29:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                                      }
                                    },
                                    "id": 8192,
                                    "indexExpression": {
                                      "id": 8191,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8160,
                                      "src": "6968:1:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6938:32:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_WeightedTickData_$3687_memory_ptr",
                                      "typeString": "struct OracleLibrary.WeightedTickData memory"
                                    }
                                  },
                                  "id": 8193,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "tick",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3684,
                                  "src": "6938:37:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 8195,
                                      "name": "syntheticCurrentTick",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8173,
                                      "src": "6986:20:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 8194,
                                    "name": "toInt24",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8111,
                                    "src": "6978:7:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int24_$",
                                      "typeString": "function (int256) pure returns (int24)"
                                    }
                                  },
                                  "id": 8196,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6978:29:58",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "src": "6938:69:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "id": 8198,
                              "nodeType": "ExpressionStatement",
                              "src": "6938:69:58"
                            },
                            {
                              "expression": {
                                "id": 8206,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8199,
                                      "name": "weightedSyntheticAverageTicks",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8139,
                                      "src": "7021:29:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                                      }
                                    },
                                    "id": 8201,
                                    "indexExpression": {
                                      "id": 8200,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8160,
                                      "src": "7051:1:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7021:32:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_WeightedTickData_$3687_memory_ptr",
                                      "typeString": "struct OracleLibrary.WeightedTickData memory"
                                    }
                                  },
                                  "id": 8202,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "weight",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3686,
                                  "src": "7021:39:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 8203,
                                    "name": "amounts",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8118,
                                    "src": "7063:7:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                      "typeString": "uint128[] memory"
                                    }
                                  },
                                  "id": 8205,
                                  "indexExpression": {
                                    "id": 8204,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8160,
                                    "src": "7071:1:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "7063:10:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "src": "7021:52:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "id": 8207,
                              "nodeType": "ExpressionStatement",
                              "src": "7021:52:58"
                            },
                            {
                              "expression": {
                                "id": 8215,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8208,
                                      "name": "weightedSyntheticCurrentTicks",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8151,
                                      "src": "7087:29:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                                      }
                                    },
                                    "id": 8210,
                                    "indexExpression": {
                                      "id": 8209,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8160,
                                      "src": "7117:1:58",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7087:32:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_WeightedTickData_$3687_memory_ptr",
                                      "typeString": "struct OracleLibrary.WeightedTickData memory"
                                    }
                                  },
                                  "id": 8211,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "weight",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3686,
                                  "src": "7087:39:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 8212,
                                    "name": "amounts",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8118,
                                    "src": "7129:7:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                      "typeString": "uint128[] memory"
                                    }
                                  },
                                  "id": 8214,
                                  "indexExpression": {
                                    "id": 8213,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8160,
                                    "src": "7137:1:58",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "7129:10:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "src": "7087:52:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "id": 8216,
                              "nodeType": "ExpressionStatement",
                              "src": "7087:52:58"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8163,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8160,
                            "src": "6704:1:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 8164,
                              "name": "paths",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8115,
                              "src": "6708:5:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes memory[] memory"
                              }
                            },
                            "id": 8165,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "6708:12:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6704:16:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8218,
                        "initializationExpression": {
                          "assignments": [
                            8160
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 8160,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 8218,
                              "src": "6689:9:58",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 8159,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "6689:7:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 8162,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 8161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6701:1:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "6689:13:58"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 8168,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "6722:3:58",
                            "subExpression": {
                              "id": 8167,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8160,
                              "src": "6722:1:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8169,
                          "nodeType": "ExpressionStatement",
                          "src": "6722:3:58"
                        },
                        "nodeType": "ForStatement",
                        "src": "6684:466:58"
                      },
                      {
                        "expression": {
                          "id": 8224,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8219,
                            "name": "averageSyntheticAverageTick",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8123,
                            "src": "7160:27:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8222,
                                "name": "weightedSyntheticAverageTicks",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8139,
                                "src": "7234:29:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                                }
                              ],
                              "expression": {
                                "id": 8220,
                                "name": "OracleLibrary",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3829,
                                "src": "7190:13:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_OracleLibrary_$3829_$",
                                  "typeString": "type(library OracleLibrary)"
                                }
                              },
                              "id": 8221,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getWeightedArithmeticMeanTick",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3766,
                              "src": "7190:43:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr_$returns$_t_int24_$",
                                "typeString": "function (struct OracleLibrary.WeightedTickData memory[] memory) pure returns (int24)"
                              }
                            },
                            "id": 8223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7190:74:58",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "7160:104:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 8225,
                        "nodeType": "ExpressionStatement",
                        "src": "7160:104:58"
                      },
                      {
                        "expression": {
                          "id": 8231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8226,
                            "name": "averageSyntheticCurrentTick",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8125,
                            "src": "7274:27:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8229,
                                "name": "weightedSyntheticCurrentTicks",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8151,
                                "src": "7348:29:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct OracleLibrary.WeightedTickData memory[] memory"
                                }
                              ],
                              "expression": {
                                "id": 8227,
                                "name": "OracleLibrary",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3829,
                                "src": "7304:13:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_OracleLibrary_$3829_$",
                                  "typeString": "type(library OracleLibrary)"
                                }
                              },
                              "id": 8228,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getWeightedArithmeticMeanTick",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3766,
                              "src": "7304:43:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_WeightedTickData_$3687_memory_ptr_$dyn_memory_ptr_$returns$_t_int24_$",
                                "typeString": "function (struct OracleLibrary.WeightedTickData memory[] memory) pure returns (int24)"
                              }
                            },
                            "id": 8230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7304:74:58",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "7274:104:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 8232,
                        "nodeType": "ExpressionStatement",
                        "src": "7274:104:58"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8112,
                    "nodeType": "StructuredDocumentation",
                    "src": "5648:463:58",
                    "text": "@dev For each passed path, fetches the synthetic time-weighted average tick as of secondsAgo,\n as well as the current tick. Then, synthetic ticks from all paths are subjected to a weighted\n average, where the weights are the fraction of the total input amount allocated to each path.\n Returned synthetic ticks always represent tokenOut/tokenIn prices, meaning lower ticks are worse.\n Paths must all start and end in the same token."
                  },
                  "id": 8234,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSyntheticTicks",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8121,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8115,
                        "mutability": "mutable",
                        "name": "paths",
                        "nodeType": "VariableDeclaration",
                        "scope": 8234,
                        "src": "6152:20:58",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8113,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "6152:5:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 8114,
                          "nodeType": "ArrayTypeName",
                          "src": "6152:7:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8118,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nodeType": "VariableDeclaration",
                        "scope": 8234,
                        "src": "6182:24:58",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8116,
                            "name": "uint128",
                            "nodeType": "ElementaryTypeName",
                            "src": "6182:7:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "id": 8117,
                          "nodeType": "ArrayTypeName",
                          "src": "6182:9:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                            "typeString": "uint128[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8120,
                        "mutability": "mutable",
                        "name": "secondsAgo",
                        "nodeType": "VariableDeclaration",
                        "scope": 8234,
                        "src": "6216:17:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 8119,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6216:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6142:97:58"
                  },
                  "returnParameters": {
                    "id": 8126,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8123,
                        "mutability": "mutable",
                        "name": "averageSyntheticAverageTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 8234,
                        "src": "6263:34:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8122,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6263:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8125,
                        "mutability": "mutable",
                        "name": "averageSyntheticCurrentTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 8234,
                        "src": "6299:34:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8124,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6299:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6262:72:58"
                  },
                  "scope": 8300,
                  "src": "6116:1269:58",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    8803
                  ],
                  "body": {
                    "id": 8263,
                    "nodeType": "Block",
                    "src": "7577:205:58",
                    "statements": [
                      {
                        "assignments": [
                          8246,
                          8248
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8246,
                            "mutability": "mutable",
                            "name": "syntheticAverageTick",
                            "nodeType": "VariableDeclaration",
                            "scope": 8263,
                            "src": "7588:27:58",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 8245,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7588:6:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 8248,
                            "mutability": "mutable",
                            "name": "syntheticCurrentTick",
                            "nodeType": "VariableDeclaration",
                            "scope": 8263,
                            "src": "7617:27:58",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 8247,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7617:6:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8253,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 8250,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8237,
                              "src": "7666:4:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 8251,
                              "name": "secondsAgo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8241,
                              "src": "7672:10:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 8249,
                            "name": "getSyntheticTicks",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              8090,
                              8234
                            ],
                            "referencedDeclaration": 8090,
                            "src": "7648:17:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_uint32_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (bytes memory,uint32) view returns (int256,int256)"
                            }
                          },
                          "id": 8252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7648:35:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7587:96:58"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 8259,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 8257,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 8255,
                                  "name": "syntheticAverageTick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8246,
                                  "src": "7701:20:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 8256,
                                  "name": "syntheticCurrentTick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8248,
                                  "src": "7724:20:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "7701:43:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 8258,
                                "name": "maximumTickDivergence",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8239,
                                "src": "7747:21:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint24",
                                  "typeString": "uint24"
                                }
                              },
                              "src": "7701:67:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5444",
                              "id": 8260,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7770:4:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_df7085977c0a4e0ff243c8cdd75cc6add5df901d8b8ca4cde5e0319089f27136",
                                "typeString": "literal_string \"TD\""
                              },
                              "value": "TD"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_df7085977c0a4e0ff243c8cdd75cc6add5df901d8b8ca4cde5e0319089f27136",
                                "typeString": "literal_string \"TD\""
                              }
                            ],
                            "id": 8254,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7693:7:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7693:82:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8262,
                        "nodeType": "ExpressionStatement",
                        "src": "7693:82:58"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8235,
                    "nodeType": "StructuredDocumentation",
                    "src": "7391:31:58",
                    "text": "@inheritdoc IOracleSlippage"
                  },
                  "functionSelector": "f25801a7",
                  "id": 8264,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "checkOracleSlippage",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8243,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "7568:8:58"
                  },
                  "parameters": {
                    "id": 8242,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8237,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 8264,
                        "src": "7465:17:58",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 8236,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7465:5:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8239,
                        "mutability": "mutable",
                        "name": "maximumTickDivergence",
                        "nodeType": "VariableDeclaration",
                        "scope": 8264,
                        "src": "7492:28:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 8238,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "7492:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8241,
                        "mutability": "mutable",
                        "name": "secondsAgo",
                        "nodeType": "VariableDeclaration",
                        "scope": 8264,
                        "src": "7530:17:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 8240,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "7530:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7455:98:58"
                  },
                  "returnParameters": {
                    "id": 8244,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7577:0:58"
                  },
                  "scope": 8300,
                  "src": "7427:355:58",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8817
                  ],
                  "body": {
                    "id": 8298,
                    "nodeType": "Block",
                    "src": "8011:255:58",
                    "statements": [
                      {
                        "assignments": [
                          8280,
                          8282
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8280,
                            "mutability": "mutable",
                            "name": "averageSyntheticAverageTick",
                            "nodeType": "VariableDeclaration",
                            "scope": 8298,
                            "src": "8022:34:58",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 8279,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8022:6:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 8282,
                            "mutability": "mutable",
                            "name": "averageSyntheticCurrentTick",
                            "nodeType": "VariableDeclaration",
                            "scope": 8298,
                            "src": "8058:34:58",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 8281,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8058:6:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8288,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 8284,
                              "name": "paths",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8268,
                              "src": "8126:5:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes memory[] memory"
                              }
                            },
                            {
                              "id": 8285,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8271,
                              "src": "8133:7:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                "typeString": "uint128[] memory"
                              }
                            },
                            {
                              "id": 8286,
                              "name": "secondsAgo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8275,
                              "src": "8142:10:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes memory[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                "typeString": "uint128[] memory"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 8283,
                            "name": "getSyntheticTicks",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              8090,
                              8234
                            ],
                            "referencedDeclaration": 8234,
                            "src": "8108:17:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint128_$dyn_memory_ptr_$_t_uint32_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (bytes memory[] memory,uint128[] memory,uint32) view returns (int256,int256)"
                            }
                          },
                          "id": 8287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8108:45:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8021:132:58"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 8294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 8292,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 8290,
                                  "name": "averageSyntheticAverageTick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8280,
                                  "src": "8171:27:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 8291,
                                  "name": "averageSyntheticCurrentTick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8282,
                                  "src": "8201:27:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "8171:57:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 8293,
                                "name": "maximumTickDivergence",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8273,
                                "src": "8231:21:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint24",
                                  "typeString": "uint24"
                                }
                              },
                              "src": "8171:81:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5444",
                              "id": 8295,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8254:4:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_df7085977c0a4e0ff243c8cdd75cc6add5df901d8b8ca4cde5e0319089f27136",
                                "typeString": "literal_string \"TD\""
                              },
                              "value": "TD"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_df7085977c0a4e0ff243c8cdd75cc6add5df901d8b8ca4cde5e0319089f27136",
                                "typeString": "literal_string \"TD\""
                              }
                            ],
                            "id": 8289,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8163:7:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8163:96:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8297,
                        "nodeType": "ExpressionStatement",
                        "src": "8163:96:58"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8265,
                    "nodeType": "StructuredDocumentation",
                    "src": "7788:31:58",
                    "text": "@inheritdoc IOracleSlippage"
                  },
                  "functionSelector": "efdeed8e",
                  "id": 8299,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "checkOracleSlippage",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8277,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8002:8:58"
                  },
                  "parameters": {
                    "id": 8276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8268,
                        "mutability": "mutable",
                        "name": "paths",
                        "nodeType": "VariableDeclaration",
                        "scope": 8299,
                        "src": "7862:20:58",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8266,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "7862:5:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 8267,
                          "nodeType": "ArrayTypeName",
                          "src": "7862:7:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8271,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nodeType": "VariableDeclaration",
                        "scope": 8299,
                        "src": "7892:24:58",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8269,
                            "name": "uint128",
                            "nodeType": "ElementaryTypeName",
                            "src": "7892:7:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "id": 8270,
                          "nodeType": "ArrayTypeName",
                          "src": "7892:9:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                            "typeString": "uint128[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8273,
                        "mutability": "mutable",
                        "name": "maximumTickDivergence",
                        "nodeType": "VariableDeclaration",
                        "scope": 8299,
                        "src": "7926:28:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 8272,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "7926:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8275,
                        "mutability": "mutable",
                        "name": "secondsAgo",
                        "nodeType": "VariableDeclaration",
                        "scope": 8299,
                        "src": "7964:17:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 8274,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "7964:6:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7852:135:58"
                  },
                  "returnParameters": {
                    "id": 8278,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8011:0:58"
                  },
                  "scope": 8300,
                  "src": "7824:442:58",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8301,
              "src": "571:7697:58"
            }
          ],
          "src": "45:8224:58"
        },
        "id": 58
      },
      "contracts/base/PeripheryPaymentsExtended.sol": {
        "ast": {
          "absolutePath": "contracts/base/PeripheryPaymentsExtended.sol",
          "exportedSymbols": {
            "IERC20": [
              5876
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IPeripheryPayments": [
              2898
            ],
            "IPeripheryPaymentsExtended": [
              8853
            ],
            "ISAMB": [
              3059
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PeripheryPayments": [
              2244
            ],
            "PeripheryPaymentsExtended": [
              8380
            ],
            "TransferHelper": [
              4225
            ]
          },
          "id": 8381,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8302,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:59"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/PeripheryPayments.sol",
              "id": 8303,
              "nodeType": "ImportDirective",
              "scope": 8381,
              "sourceUnit": 2245,
              "src": "71:73:59",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/TransferHelper.sol",
              "id": 8304,
              "nodeType": "ImportDirective",
              "scope": 8381,
              "sourceUnit": 4226,
              "src": "145:75:59",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IPeripheryPaymentsExtended.sol",
              "file": "../interfaces/IPeripheryPaymentsExtended.sol",
              "id": 8305,
              "nodeType": "ImportDirective",
              "scope": 8381,
              "sourceUnit": 8854,
              "src": "222:54:59",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8306,
                    "name": "IPeripheryPaymentsExtended",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8853,
                    "src": "325:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPeripheryPaymentsExtended_$8853",
                      "typeString": "contract IPeripheryPaymentsExtended"
                    }
                  },
                  "id": 8307,
                  "nodeType": "InheritanceSpecifier",
                  "src": "325:26:59"
                },
                {
                  "baseName": {
                    "id": 8308,
                    "name": "PeripheryPayments",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2244,
                    "src": "353:17:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryPayments_$2244",
                      "typeString": "contract PeripheryPayments"
                    }
                  },
                  "id": 8309,
                  "nodeType": "InheritanceSpecifier",
                  "src": "353:17:59"
                }
              ],
              "contractDependencies": [
                2034,
                2244,
                2872,
                2898,
                8853
              ],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 8380,
              "linearizedBaseContracts": [
                8380,
                2244,
                2034,
                2872,
                8853,
                2898
              ],
              "name": "PeripheryPaymentsExtended",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    8830
                  ],
                  "body": {
                    "id": 8322,
                    "nodeType": "Block",
                    "src": "493:54:59",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8317,
                              "name": "amountMinimum",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8312,
                              "src": "514:13:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 8318,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "529:3:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8319,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "529:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 8316,
                            "name": "unwrapSAMB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2105,
                            "src": "503:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (uint256,address)"
                            }
                          },
                          "id": 8320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "503:37:59",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8321,
                        "nodeType": "ExpressionStatement",
                        "src": "503:37:59"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8310,
                    "nodeType": "StructuredDocumentation",
                    "src": "377:42:59",
                    "text": "@inheritdoc IPeripheryPaymentsExtended"
                  },
                  "functionSelector": "acf8a4ed",
                  "id": 8323,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unwrapSAMB",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8314,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "484:8:59"
                  },
                  "parameters": {
                    "id": 8313,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8312,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 8323,
                        "src": "444:21:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8311,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "444:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "443:23:59"
                  },
                  "returnParameters": {
                    "id": 8315,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "493:0:59"
                  },
                  "scope": 8380,
                  "src": "424:123:59",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8836
                  ],
                  "body": {
                    "id": 8338,
                    "nodeType": "Block",
                    "src": "658:52:59",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8331,
                                    "name": "SAMB",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2017,
                                    "src": "674:4:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 8330,
                                  "name": "ISAMB",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3059,
                                  "src": "668:5:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ISAMB_$3059_$",
                                    "typeString": "type(contract ISAMB)"
                                  }
                                },
                                "id": 8332,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "668:11:59",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ISAMB_$3059",
                                  "typeString": "contract ISAMB"
                                }
                              },
                              "id": 8333,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "deposit",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3052,
                              "src": "668:19:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_payable$__$returns$__$",
                                "typeString": "function () payable external"
                              }
                            },
                            "id": 8335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 8334,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8326,
                                "src": "695:5:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "668:33:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                              "typeString": "function () payable external"
                            }
                          },
                          "id": 8336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "668:35:59",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8337,
                        "nodeType": "ExpressionStatement",
                        "src": "668:35:59"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8324,
                    "nodeType": "StructuredDocumentation",
                    "src": "553:42:59",
                    "text": "@inheritdoc IPeripheryPaymentsExtended"
                  },
                  "functionSelector": "e4a40545",
                  "id": 8339,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "wrapAMB",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8328,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "649:8:59"
                  },
                  "parameters": {
                    "id": 8327,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8326,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 8339,
                        "src": "617:13:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8325,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "617:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "616:15:59"
                  },
                  "returnParameters": {
                    "id": 8329,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "658:0:59"
                  },
                  "scope": 8380,
                  "src": "600:110:59",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8844
                  ],
                  "body": {
                    "id": 8355,
                    "nodeType": "Block",
                    "src": "847:61:59",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8349,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8342,
                              "src": "868:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8350,
                              "name": "amountMinimum",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8344,
                              "src": "875:13:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 8351,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "890:3:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8352,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "890:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 8348,
                            "name": "sweepToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2149,
                            "src": "857:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (address,uint256,address)"
                            }
                          },
                          "id": 8353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "857:44:59",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8354,
                        "nodeType": "ExpressionStatement",
                        "src": "857:44:59"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8340,
                    "nodeType": "StructuredDocumentation",
                    "src": "716:42:59",
                    "text": "@inheritdoc IPeripheryPaymentsExtended"
                  },
                  "functionSelector": "e90a182f",
                  "id": 8356,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sweepToken",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8346,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "838:8:59"
                  },
                  "parameters": {
                    "id": 8345,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8342,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 8356,
                        "src": "783:13:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8341,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "783:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8344,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 8356,
                        "src": "798:21:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8343,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "798:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "782:38:59"
                  },
                  "returnParameters": {
                    "id": 8347,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "847:0:59"
                  },
                  "scope": 8380,
                  "src": "763:145:59",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8852
                  ],
                  "body": {
                    "id": 8378,
                    "nodeType": "Block",
                    "src": "1031:89:59",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8368,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8359,
                              "src": "1073:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 8369,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1080:3:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8370,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1080:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 8373,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1100:4:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PeripheryPaymentsExtended_$8380",
                                    "typeString": "contract PeripheryPaymentsExtended"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PeripheryPaymentsExtended_$8380",
                                    "typeString": "contract PeripheryPaymentsExtended"
                                  }
                                ],
                                "id": 8372,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1092:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 8371,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1092:7:59",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8374,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1092:13:59",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 8375,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8361,
                              "src": "1107:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 8365,
                              "name": "TransferHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4225,
                              "src": "1041:14:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_TransferHelper_$4225_$",
                                "typeString": "type(library TransferHelper)"
                              }
                            },
                            "id": 8367,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4106,
                            "src": "1041:31:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 8376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1041:72:59",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8377,
                        "nodeType": "ExpressionStatement",
                        "src": "1041:72:59"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8357,
                    "nodeType": "StructuredDocumentation",
                    "src": "914:42:59",
                    "text": "@inheritdoc IPeripheryPaymentsExtended"
                  },
                  "functionSelector": "f2d5d56b",
                  "id": 8379,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pull",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8363,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1022:8:59"
                  },
                  "parameters": {
                    "id": 8362,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8359,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 8379,
                        "src": "975:13:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8358,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "975:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8361,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 8379,
                        "src": "990:13:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8360,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "990:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "974:30:59"
                  },
                  "returnParameters": {
                    "id": 8364,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1031:0:59"
                  },
                  "scope": 8380,
                  "src": "961:159:59",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8381,
              "src": "278:844:59"
            }
          ],
          "src": "45:1078:59"
        },
        "id": 59
      },
      "contracts/base/PeripheryPaymentsWithFeeExtended.sol": {
        "ast": {
          "absolutePath": "contracts/base/PeripheryPaymentsWithFeeExtended.sol",
          "exportedSymbols": {
            "IERC20": [
              5876
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IPeripheryPayments": [
              2898
            ],
            "IPeripheryPaymentsExtended": [
              8853
            ],
            "IPeripheryPaymentsWithFee": [
              2931
            ],
            "IPeripheryPaymentsWithFeeExtended": [
              8885
            ],
            "ISAMB": [
              3059
            ],
            "LowGasSafeMath": [
              1043
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PeripheryPayments": [
              2244
            ],
            "PeripheryPaymentsExtended": [
              8380
            ],
            "PeripheryPaymentsWithFee": [
              2425
            ],
            "PeripheryPaymentsWithFeeExtended": [
              8435
            ],
            "TransferHelper": [
              4225
            ]
          },
          "id": 8436,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8382,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:60"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/PeripheryPaymentsWithFee.sol",
              "id": 8383,
              "nodeType": "ImportDirective",
              "scope": 8436,
              "sourceUnit": 2426,
              "src": "71:80:60",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol",
              "file": "../interfaces/IPeripheryPaymentsWithFeeExtended.sol",
              "id": 8384,
              "nodeType": "ImportDirective",
              "scope": 8436,
              "sourceUnit": 8886,
              "src": "153:61:60",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/base/PeripheryPaymentsExtended.sol",
              "file": "./PeripheryPaymentsExtended.sol",
              "id": 8385,
              "nodeType": "ImportDirective",
              "scope": 8436,
              "sourceUnit": 8381,
              "src": "215:41:60",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8386,
                    "name": "IPeripheryPaymentsWithFeeExtended",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8885,
                    "src": "316:33:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPeripheryPaymentsWithFeeExtended_$8885",
                      "typeString": "contract IPeripheryPaymentsWithFeeExtended"
                    }
                  },
                  "id": 8387,
                  "nodeType": "InheritanceSpecifier",
                  "src": "316:33:60"
                },
                {
                  "baseName": {
                    "id": 8388,
                    "name": "PeripheryPaymentsExtended",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8380,
                    "src": "355:25:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryPaymentsExtended_$8380",
                      "typeString": "contract PeripheryPaymentsExtended"
                    }
                  },
                  "id": 8389,
                  "nodeType": "InheritanceSpecifier",
                  "src": "355:25:60"
                },
                {
                  "baseName": {
                    "id": 8390,
                    "name": "PeripheryPaymentsWithFee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2425,
                    "src": "386:24:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryPaymentsWithFee_$2425",
                      "typeString": "contract PeripheryPaymentsWithFee"
                    }
                  },
                  "id": 8391,
                  "nodeType": "InheritanceSpecifier",
                  "src": "386:24:60"
                }
              ],
              "contractDependencies": [
                2034,
                2244,
                2425,
                2872,
                2898,
                2931,
                8380,
                8853,
                8885
              ],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 8435,
              "linearizedBaseContracts": [
                8435,
                2425,
                8380,
                8885,
                2931,
                2244,
                2034,
                2872,
                8853,
                2898
              ],
              "name": "PeripheryPaymentsWithFeeExtended",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    8872
                  ],
                  "body": {
                    "id": 8410,
                    "nodeType": "Block",
                    "src": "616:84:60",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8403,
                              "name": "amountMinimum",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8394,
                              "src": "644:13:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 8404,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "659:3:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8405,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "659:10:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 8406,
                              "name": "feeBips",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8396,
                              "src": "671:7:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 8407,
                              "name": "feeRecipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8398,
                              "src": "680:12:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8402,
                            "name": "unwrapSAMBWithFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2343,
                            "src": "626:17:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (uint256,address,uint256,address)"
                            }
                          },
                          "id": 8408,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "626:67:60",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8409,
                        "nodeType": "ExpressionStatement",
                        "src": "626:67:60"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8392,
                    "nodeType": "StructuredDocumentation",
                    "src": "417:49:60",
                    "text": "@inheritdoc IPeripheryPaymentsWithFeeExtended"
                  },
                  "functionSelector": "bc122a54",
                  "id": 8411,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unwrapSAMBWithFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8400,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "607:8:60"
                  },
                  "parameters": {
                    "id": 8399,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8394,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 8411,
                        "src": "507:21:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8393,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "507:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8396,
                        "mutability": "mutable",
                        "name": "feeBips",
                        "nodeType": "VariableDeclaration",
                        "scope": 8411,
                        "src": "538:15:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8395,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "538:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8398,
                        "mutability": "mutable",
                        "name": "feeRecipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 8411,
                        "src": "563:20:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8397,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "563:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "497:92:60"
                  },
                  "returnParameters": {
                    "id": 8401,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "616:0:60"
                  },
                  "scope": 8435,
                  "src": "471:229:60",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8884
                  ],
                  "body": {
                    "id": 8433,
                    "nodeType": "Block",
                    "src": "928:91:60",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8425,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8414,
                              "src": "956:5:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8426,
                              "name": "amountMinimum",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8416,
                              "src": "963:13:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 8427,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "978:3:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8428,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "978:10:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 8429,
                              "name": "feeBips",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8418,
                              "src": "990:7:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 8430,
                              "name": "feeRecipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8420,
                              "src": "999:12:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8424,
                            "name": "sweepTokenWithFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2424,
                            "src": "938:17:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (address,uint256,address,uint256,address)"
                            }
                          },
                          "id": 8431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "938:74:60",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8432,
                        "nodeType": "ExpressionStatement",
                        "src": "938:74:60"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8412,
                    "nodeType": "StructuredDocumentation",
                    "src": "706:49:60",
                    "text": "@inheritdoc IPeripheryPaymentsWithFeeExtended"
                  },
                  "functionSelector": "3068c554",
                  "id": 8434,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sweepTokenWithFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8422,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "919:8:60"
                  },
                  "parameters": {
                    "id": 8421,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8414,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 8434,
                        "src": "796:13:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8413,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "796:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8416,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 8434,
                        "src": "819:21:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8415,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "819:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8418,
                        "mutability": "mutable",
                        "name": "feeBips",
                        "nodeType": "VariableDeclaration",
                        "scope": 8434,
                        "src": "850:15:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8417,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "850:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8420,
                        "mutability": "mutable",
                        "name": "feeRecipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 8434,
                        "src": "875:20:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8419,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "875:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "786:115:60"
                  },
                  "returnParameters": {
                    "id": 8423,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "928:0:60"
                  },
                  "scope": 8435,
                  "src": "760:259:60",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8436,
              "src": "258:763:60"
            }
          ],
          "src": "45:977:60"
        },
        "id": 60
      },
      "contracts/base/PeripheryValidationExtended.sol": {
        "ast": {
          "absolutePath": "contracts/base/PeripheryValidationExtended.sol",
          "exportedSymbols": {
            "BlockTimestamp": [
              1918
            ],
            "PeripheryValidation": [
              2445
            ],
            "PeripheryValidationExtended": [
              8459
            ]
          },
          "id": 8460,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8437,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:61"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/PeripheryValidation.sol",
              "id": 8438,
              "nodeType": "ImportDirective",
              "scope": 8460,
              "sourceUnit": 2446,
              "src": "70:75:61",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8439,
                    "name": "PeripheryValidation",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2445,
                    "src": "196:19:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryValidation_$2445",
                      "typeString": "contract PeripheryValidation"
                    }
                  },
                  "id": 8440,
                  "nodeType": "InheritanceSpecifier",
                  "src": "196:19:61"
                }
              ],
              "contractDependencies": [
                1918,
                2445
              ],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 8459,
              "linearizedBaseContracts": [
                8459,
                2445,
                1918
              ],
              "name": "PeripheryValidationExtended",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 8457,
                    "nodeType": "Block",
                    "src": "281:98:61",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 8452,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 8449,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 8446,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "309:5:61",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 8447,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "number",
                                      "nodeType": "MemberAccess",
                                      "src": "309:12:61",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 8448,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "324:1:61",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "309:16:61",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8445,
                                  "name": "blockhash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -5,
                                  "src": "299:9:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$",
                                    "typeString": "function (uint256) view returns (bytes32)"
                                  }
                                },
                                "id": 8450,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "299:27:61",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 8451,
                                "name": "previousBlockhash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8442,
                                "src": "330:17:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "299:48:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "426c6f636b68617368",
                              "id": 8453,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "349:11:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_46d8abb9552766132026156d7c22c2b7c9e11624b63ac207deaf1a158b20a89f",
                                "typeString": "literal_string \"Blockhash\""
                              },
                              "value": "Blockhash"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_46d8abb9552766132026156d7c22c2b7c9e11624b63ac207deaf1a158b20a89f",
                                "typeString": "literal_string \"Blockhash\""
                              }
                            ],
                            "id": 8444,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "291:7:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "291:70:61",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8455,
                        "nodeType": "ExpressionStatement",
                        "src": "291:70:61"
                      },
                      {
                        "id": 8456,
                        "nodeType": "PlaceholderStatement",
                        "src": "371:1:61"
                      }
                    ]
                  },
                  "id": 8458,
                  "name": "checkPreviousBlockhash",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 8443,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8442,
                        "mutability": "mutable",
                        "name": "previousBlockhash",
                        "nodeType": "VariableDeclaration",
                        "scope": 8458,
                        "src": "254:25:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 8441,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "254:7:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "253:27:61"
                  },
                  "src": "222:157:61",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 8460,
              "src": "147:234:61"
            }
          ],
          "src": "45:337:61"
        },
        "id": 61
      },
      "contracts/interfaces/IApproveAndCall.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IApproveAndCall.sol",
          "exportedSymbols": {
            "IApproveAndCall": [
              8555
            ]
          },
          "id": 8556,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8461,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:62"
            },
            {
              "id": 8462,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:62"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 8555,
              "linearizedBaseContracts": [
                8555
              ],
              "name": "IApproveAndCall",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "IApproveAndCall.ApprovalType",
                  "id": 8468,
                  "members": [
                    {
                      "id": 8463,
                      "name": "NOT_REQUIRED",
                      "nodeType": "EnumValue",
                      "src": "141:12:62"
                    },
                    {
                      "id": 8464,
                      "name": "MAX",
                      "nodeType": "EnumValue",
                      "src": "155:3:62"
                    },
                    {
                      "id": 8465,
                      "name": "MAX_MINUS_ONE",
                      "nodeType": "EnumValue",
                      "src": "160:13:62"
                    },
                    {
                      "id": 8466,
                      "name": "ZERO_THEN_MAX",
                      "nodeType": "EnumValue",
                      "src": "175:13:62"
                    },
                    {
                      "id": 8467,
                      "name": "ZERO_THEN_MAX_MINUS_ONE",
                      "nodeType": "EnumValue",
                      "src": "190:23:62"
                    }
                  ],
                  "name": "ApprovalType",
                  "nodeType": "EnumDefinition",
                  "src": "122:92:62"
                },
                {
                  "documentation": {
                    "id": 8469,
                    "nodeType": "StructuredDocumentation",
                    "src": "220:245:62",
                    "text": "@dev Lens to be called off-chain to determine which (if any) of the relevant approval functions should be called\n @param token The token to approve\n @param amount The amount to approve\n @return The required approval type"
                  },
                  "functionSelector": "dee00f35",
                  "id": 8478,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getApprovalType",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8474,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8471,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 8478,
                        "src": "495:13:62",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8470,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "495:7:62",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8473,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 8478,
                        "src": "510:14:62",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8472,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "510:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "494:31:62"
                  },
                  "returnParameters": {
                    "id": 8477,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8476,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 8478,
                        "src": "544:12:62",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ApprovalType_$8468",
                          "typeString": "enum IApproveAndCall.ApprovalType"
                        },
                        "typeName": {
                          "id": 8475,
                          "name": "ApprovalType",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8468,
                          "src": "544:12:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_ApprovalType_$8468",
                            "typeString": "enum IApproveAndCall.ApprovalType"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "543:14:62"
                  },
                  "scope": 8555,
                  "src": "470:88:62",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8479,
                    "nodeType": "StructuredDocumentation",
                    "src": "564:102:62",
                    "text": "@notice Approves a token for the maximum possible amount\n @param token The token to approve"
                  },
                  "functionSelector": "571ac8b0",
                  "id": 8484,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveMax",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8482,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8481,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 8484,
                        "src": "691:13:62",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8480,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "691:7:62",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "690:15:62"
                  },
                  "returnParameters": {
                    "id": 8483,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "722:0:62"
                  },
                  "scope": 8555,
                  "src": "671:52:62",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8485,
                    "nodeType": "StructuredDocumentation",
                    "src": "729:112:62",
                    "text": "@notice Approves a token for the maximum possible amount minus one\n @param token The token to approve"
                  },
                  "functionSelector": "cab372ce",
                  "id": 8490,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveMaxMinusOne",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8488,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8487,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 8490,
                        "src": "874:13:62",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8486,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "874:7:62",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "873:15:62"
                  },
                  "returnParameters": {
                    "id": 8489,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "905:0:62"
                  },
                  "scope": 8555,
                  "src": "846:60:62",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8491,
                    "nodeType": "StructuredDocumentation",
                    "src": "912:113:62",
                    "text": "@notice Approves a token for zero, then the maximum possible amount\n @param token The token to approve"
                  },
                  "functionSelector": "639d71a9",
                  "id": 8496,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveZeroThenMax",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8494,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8493,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 8496,
                        "src": "1058:13:62",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8492,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1058:7:62",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1057:15:62"
                  },
                  "returnParameters": {
                    "id": 8495,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1089:0:62"
                  },
                  "scope": 8555,
                  "src": "1030:60:62",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8497,
                    "nodeType": "StructuredDocumentation",
                    "src": "1096:123:62",
                    "text": "@notice Approves a token for zero, then the maximum possible amount minus one\n @param token The token to approve"
                  },
                  "functionSelector": "ab3fdd50",
                  "id": 8502,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveZeroThenMaxMinusOne",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8500,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8499,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 8502,
                        "src": "1260:13:62",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8498,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1260:7:62",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1259:15:62"
                  },
                  "returnParameters": {
                    "id": 8501,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1291:0:62"
                  },
                  "scope": 8555,
                  "src": "1224:68:62",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8503,
                    "nodeType": "StructuredDocumentation",
                    "src": "1298:177:62",
                    "text": "@notice Calls the position manager with arbitrary calldata\n @param data Calldata to pass along to the position manager\n @return result The result from the call"
                  },
                  "functionSelector": "b3a2af13",
                  "id": 8510,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "callPositionManager",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8506,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8505,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 8510,
                        "src": "1509:17:62",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 8504,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1509:5:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1508:19:62"
                  },
                  "returnParameters": {
                    "id": 8509,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8508,
                        "mutability": "mutable",
                        "name": "result",
                        "nodeType": "VariableDeclaration",
                        "scope": 8510,
                        "src": "1554:19:62",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 8507,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1554:5:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1553:21:62"
                  },
                  "scope": 8555,
                  "src": "1480:95:62",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "IApproveAndCall.MintParams",
                  "id": 8527,
                  "members": [
                    {
                      "constant": false,
                      "id": 8512,
                      "mutability": "mutable",
                      "name": "token0",
                      "nodeType": "VariableDeclaration",
                      "scope": 8527,
                      "src": "1609:14:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8511,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1609:7:62",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8514,
                      "mutability": "mutable",
                      "name": "token1",
                      "nodeType": "VariableDeclaration",
                      "scope": 8527,
                      "src": "1633:14:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8513,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1633:7:62",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8516,
                      "mutability": "mutable",
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "scope": 8527,
                      "src": "1657:10:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint24",
                        "typeString": "uint24"
                      },
                      "typeName": {
                        "id": 8515,
                        "name": "uint24",
                        "nodeType": "ElementaryTypeName",
                        "src": "1657:6:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8518,
                      "mutability": "mutable",
                      "name": "tickLower",
                      "nodeType": "VariableDeclaration",
                      "scope": 8527,
                      "src": "1677:15:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      },
                      "typeName": {
                        "id": 8517,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "1677:5:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8520,
                      "mutability": "mutable",
                      "name": "tickUpper",
                      "nodeType": "VariableDeclaration",
                      "scope": 8527,
                      "src": "1702:15:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      },
                      "typeName": {
                        "id": 8519,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "1702:5:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8522,
                      "mutability": "mutable",
                      "name": "amount0Min",
                      "nodeType": "VariableDeclaration",
                      "scope": 8527,
                      "src": "1727:18:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8521,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1727:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8524,
                      "mutability": "mutable",
                      "name": "amount1Min",
                      "nodeType": "VariableDeclaration",
                      "scope": 8527,
                      "src": "1755:18:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8523,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1755:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8526,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nodeType": "VariableDeclaration",
                      "scope": 8527,
                      "src": "1783:17:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8525,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1783:7:62",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "MintParams",
                  "nodeType": "StructDefinition",
                  "scope": 8555,
                  "src": "1581:226:62",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 8528,
                    "nodeType": "StructuredDocumentation",
                    "src": "1813:171:62",
                    "text": "@notice Calls the position manager's mint function\n @param params Calldata to pass along to the position manager\n @return result The result from the call"
                  },
                  "functionSelector": "11ed56c9",
                  "id": 8535,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8531,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8530,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 8535,
                        "src": "2003:26:62",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintParams_$8527_calldata_ptr",
                          "typeString": "struct IApproveAndCall.MintParams"
                        },
                        "typeName": {
                          "id": 8529,
                          "name": "MintParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8527,
                          "src": "2003:10:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintParams_$8527_storage_ptr",
                            "typeString": "struct IApproveAndCall.MintParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2002:28:62"
                  },
                  "returnParameters": {
                    "id": 8534,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8533,
                        "mutability": "mutable",
                        "name": "result",
                        "nodeType": "VariableDeclaration",
                        "scope": 8535,
                        "src": "2057:19:62",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 8532,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2057:5:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2056:21:62"
                  },
                  "scope": 8555,
                  "src": "1989:89:62",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "IApproveAndCall.IncreaseLiquidityParams",
                  "id": 8546,
                  "members": [
                    {
                      "constant": false,
                      "id": 8537,
                      "mutability": "mutable",
                      "name": "token0",
                      "nodeType": "VariableDeclaration",
                      "scope": 8546,
                      "src": "2125:14:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8536,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2125:7:62",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8539,
                      "mutability": "mutable",
                      "name": "token1",
                      "nodeType": "VariableDeclaration",
                      "scope": 8546,
                      "src": "2149:14:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8538,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2149:7:62",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8541,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 8546,
                      "src": "2173:15:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8540,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2173:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8543,
                      "mutability": "mutable",
                      "name": "amount0Min",
                      "nodeType": "VariableDeclaration",
                      "scope": 8546,
                      "src": "2198:18:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8542,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2198:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8545,
                      "mutability": "mutable",
                      "name": "amount1Min",
                      "nodeType": "VariableDeclaration",
                      "scope": 8546,
                      "src": "2226:18:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8544,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2226:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "IncreaseLiquidityParams",
                  "nodeType": "StructDefinition",
                  "scope": 8555,
                  "src": "2084:167:62",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 8547,
                    "nodeType": "StructuredDocumentation",
                    "src": "2257:184:62",
                    "text": "@notice Calls the position manager's increaseLiquidity function\n @param params Calldata to pass along to the position manager\n @return result The result from the call"
                  },
                  "functionSelector": "f100b205",
                  "id": 8554,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseLiquidity",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8550,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8549,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 8554,
                        "src": "2473:39:62",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$8546_calldata_ptr",
                          "typeString": "struct IApproveAndCall.IncreaseLiquidityParams"
                        },
                        "typeName": {
                          "id": 8548,
                          "name": "IncreaseLiquidityParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8546,
                          "src": "2473:23:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IncreaseLiquidityParams_$8546_storage_ptr",
                            "typeString": "struct IApproveAndCall.IncreaseLiquidityParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2472:41:62"
                  },
                  "returnParameters": {
                    "id": 8553,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8552,
                        "mutability": "mutable",
                        "name": "result",
                        "nodeType": "VariableDeclaration",
                        "scope": 8554,
                        "src": "2540:19:62",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 8551,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2540:5:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2539:21:62"
                  },
                  "scope": 8555,
                  "src": "2446:115:62",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8556,
              "src": "90:2473:62"
            }
          ],
          "src": "45:2519:62"
        },
        "id": 62
      },
      "contracts/interfaces/ICLSwapRouter.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/ICLSwapRouter.sol",
          "exportedSymbols": {
            "IAstraCLSwapCallback": [
              41
            ],
            "ICLSwapRouter": [
              8643
            ]
          },
          "id": 8644,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8557,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:63"
            },
            {
              "id": 8558,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:63"
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol",
              "id": 8559,
              "nodeType": "ImportDirective",
              "scope": 8644,
              "sourceUnit": 42,
              "src": "91:86:63",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8561,
                    "name": "IAstraCLSwapCallback",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 41,
                    "src": "308:20:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLSwapCallback_$41",
                      "typeString": "contract IAstraCLSwapCallback"
                    }
                  },
                  "id": 8562,
                  "nodeType": "InheritanceSpecifier",
                  "src": "308:20:63"
                }
              ],
              "contractDependencies": [
                41
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 8560,
                "nodeType": "StructuredDocumentation",
                "src": "179:102:63",
                "text": "@title Router token swapping functionality\n @notice Functions for swapping tokens via Astra CL"
              },
              "fullyImplemented": false,
              "id": 8643,
              "linearizedBaseContracts": [
                8643,
                41
              ],
              "name": "ICLSwapRouter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "ICLSwapRouter.ExactInputSingleParams",
                  "id": 8577,
                  "members": [
                    {
                      "constant": false,
                      "id": 8564,
                      "mutability": "mutable",
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8577,
                      "src": "375:15:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8563,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "375:7:63",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8566,
                      "mutability": "mutable",
                      "name": "tokenOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 8577,
                      "src": "400:16:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8565,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "400:7:63",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8568,
                      "mutability": "mutable",
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "scope": 8577,
                      "src": "426:10:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint24",
                        "typeString": "uint24"
                      },
                      "typeName": {
                        "id": 8567,
                        "name": "uint24",
                        "nodeType": "ElementaryTypeName",
                        "src": "426:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8570,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nodeType": "VariableDeclaration",
                      "scope": 8577,
                      "src": "446:17:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8569,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "446:7:63",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8572,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8577,
                      "src": "473:16:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8571,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "473:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8574,
                      "mutability": "mutable",
                      "name": "amountOutMinimum",
                      "nodeType": "VariableDeclaration",
                      "scope": 8577,
                      "src": "499:24:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8573,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "499:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8576,
                      "mutability": "mutable",
                      "name": "sqrtPriceLimitX96",
                      "nodeType": "VariableDeclaration",
                      "scope": 8577,
                      "src": "533:25:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "typeName": {
                        "id": 8575,
                        "name": "uint160",
                        "nodeType": "ElementaryTypeName",
                        "src": "533:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "ExactInputSingleParams",
                  "nodeType": "StructDefinition",
                  "scope": 8643,
                  "src": "335:230:63",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 8578,
                    "nodeType": "StructuredDocumentation",
                    "src": "571:439:63",
                    "text": "@notice Swaps `amountIn` of one token for as much as possible of another token\n @dev Setting `amountIn` to 0 will cause the contract to look up its own balance,\n and swap the entire amount, enabling contracts to send tokens before calling this function.\n @param params The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata\n @return amountOut The amount of the received token"
                  },
                  "functionSelector": "04e45aaf",
                  "id": 8585,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exactInputSingle",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8581,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8580,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 8585,
                        "src": "1041:38:63",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_calldata_ptr",
                          "typeString": "struct ICLSwapRouter.ExactInputSingleParams"
                        },
                        "typeName": {
                          "id": 8579,
                          "name": "ExactInputSingleParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8577,
                          "src": "1041:22:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExactInputSingleParams_$8577_storage_ptr",
                            "typeString": "struct ICLSwapRouter.ExactInputSingleParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1040:40:63"
                  },
                  "returnParameters": {
                    "id": 8584,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8583,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8585,
                        "src": "1107:17:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8582,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1107:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1106:19:63"
                  },
                  "scope": 8643,
                  "src": "1015:111:63",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "ICLSwapRouter.ExactInputParams",
                  "id": 8594,
                  "members": [
                    {
                      "constant": false,
                      "id": 8587,
                      "mutability": "mutable",
                      "name": "path",
                      "nodeType": "VariableDeclaration",
                      "scope": 8594,
                      "src": "1166:10:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 8586,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1166:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8589,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nodeType": "VariableDeclaration",
                      "scope": 8594,
                      "src": "1186:17:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8588,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1186:7:63",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8591,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8594,
                      "src": "1213:16:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8590,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1213:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8593,
                      "mutability": "mutable",
                      "name": "amountOutMinimum",
                      "nodeType": "VariableDeclaration",
                      "scope": 8594,
                      "src": "1239:24:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8592,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1239:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "ExactInputParams",
                  "nodeType": "StructDefinition",
                  "scope": 8643,
                  "src": "1132:138:63",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 8595,
                    "nodeType": "StructuredDocumentation",
                    "src": "1276:462:63",
                    "text": "@notice Swaps `amountIn` of one token for as much as possible of another along the specified path\n @dev Setting `amountIn` to 0 will cause the contract to look up its own balance,\n and swap the entire amount, enabling contracts to send tokens before calling this function.\n @param params The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata\n @return amountOut The amount of the received token"
                  },
                  "functionSelector": "b858183f",
                  "id": 8602,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exactInput",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8598,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8597,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 8602,
                        "src": "1763:32:63",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExactInputParams_$8594_calldata_ptr",
                          "typeString": "struct ICLSwapRouter.ExactInputParams"
                        },
                        "typeName": {
                          "id": 8596,
                          "name": "ExactInputParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8594,
                          "src": "1763:16:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExactInputParams_$8594_storage_ptr",
                            "typeString": "struct ICLSwapRouter.ExactInputParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1762:34:63"
                  },
                  "returnParameters": {
                    "id": 8601,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8600,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8602,
                        "src": "1823:17:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8599,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1823:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1822:19:63"
                  },
                  "scope": 8643,
                  "src": "1743:99:63",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "ICLSwapRouter.ExactOutputSingleParams",
                  "id": 8617,
                  "members": [
                    {
                      "constant": false,
                      "id": 8604,
                      "mutability": "mutable",
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8617,
                      "src": "1889:15:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8603,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1889:7:63",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8606,
                      "mutability": "mutable",
                      "name": "tokenOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 8617,
                      "src": "1914:16:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8605,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1914:7:63",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8608,
                      "mutability": "mutable",
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "scope": 8617,
                      "src": "1940:10:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint24",
                        "typeString": "uint24"
                      },
                      "typeName": {
                        "id": 8607,
                        "name": "uint24",
                        "nodeType": "ElementaryTypeName",
                        "src": "1940:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8610,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nodeType": "VariableDeclaration",
                      "scope": 8617,
                      "src": "1960:17:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8609,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1960:7:63",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8612,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 8617,
                      "src": "1987:17:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8611,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1987:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8614,
                      "mutability": "mutable",
                      "name": "amountInMaximum",
                      "nodeType": "VariableDeclaration",
                      "scope": 8617,
                      "src": "2014:23:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8613,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2014:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8616,
                      "mutability": "mutable",
                      "name": "sqrtPriceLimitX96",
                      "nodeType": "VariableDeclaration",
                      "scope": 8617,
                      "src": "2047:25:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "typeName": {
                        "id": 8615,
                        "name": "uint160",
                        "nodeType": "ElementaryTypeName",
                        "src": "2047:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "ExactOutputSingleParams",
                  "nodeType": "StructDefinition",
                  "scope": 8643,
                  "src": "1848:231:63",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 8618,
                    "nodeType": "StructuredDocumentation",
                    "src": "2085:304:63",
                    "text": "@notice Swaps as little as possible of one token for `amountOut` of another token\n that may remain in the router after the swap.\n @param params The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata\n @return amountIn The amount of the input token"
                  },
                  "functionSelector": "5023b4df",
                  "id": 8625,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exactOutputSingle",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8621,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8620,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 8625,
                        "src": "2421:39:63",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExactOutputSingleParams_$8617_calldata_ptr",
                          "typeString": "struct ICLSwapRouter.ExactOutputSingleParams"
                        },
                        "typeName": {
                          "id": 8619,
                          "name": "ExactOutputSingleParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8617,
                          "src": "2421:23:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExactOutputSingleParams_$8617_storage_ptr",
                            "typeString": "struct ICLSwapRouter.ExactOutputSingleParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2420:41:63"
                  },
                  "returnParameters": {
                    "id": 8624,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8623,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8625,
                        "src": "2488:16:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8622,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2488:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2487:18:63"
                  },
                  "scope": 8643,
                  "src": "2394:112:63",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "ICLSwapRouter.ExactOutputParams",
                  "id": 8634,
                  "members": [
                    {
                      "constant": false,
                      "id": 8627,
                      "mutability": "mutable",
                      "name": "path",
                      "nodeType": "VariableDeclaration",
                      "scope": 8634,
                      "src": "2547:10:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 8626,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2547:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8629,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nodeType": "VariableDeclaration",
                      "scope": 8634,
                      "src": "2567:17:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8628,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2567:7:63",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8631,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 8634,
                      "src": "2594:17:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8630,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2594:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8633,
                      "mutability": "mutable",
                      "name": "amountInMaximum",
                      "nodeType": "VariableDeclaration",
                      "scope": 8634,
                      "src": "2621:23:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8632,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2621:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "ExactOutputParams",
                  "nodeType": "StructDefinition",
                  "scope": 8643,
                  "src": "2512:139:63",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 8635,
                    "nodeType": "StructuredDocumentation",
                    "src": "2657:338:63",
                    "text": "@notice Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed)\n that may remain in the router after the swap.\n @param params The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata\n @return amountIn The amount of the input token"
                  },
                  "functionSelector": "09b81346",
                  "id": 8642,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exactOutput",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8638,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8637,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 8642,
                        "src": "3021:33:63",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExactOutputParams_$8634_calldata_ptr",
                          "typeString": "struct ICLSwapRouter.ExactOutputParams"
                        },
                        "typeName": {
                          "id": 8636,
                          "name": "ExactOutputParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8634,
                          "src": "3021:17:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExactOutputParams_$8634_storage_ptr",
                            "typeString": "struct ICLSwapRouter.ExactOutputParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3020:35:63"
                  },
                  "returnParameters": {
                    "id": 8641,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8640,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8642,
                        "src": "3082:16:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8639,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3082:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3081:18:63"
                  },
                  "scope": 8643,
                  "src": "3000:100:63",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8644,
              "src": "281:2821:63"
            }
          ],
          "src": "45:3058:63"
        },
        "id": 63
      },
      "contracts/interfaces/IClassicSwapRouter.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IClassicSwapRouter.sol",
          "exportedSymbols": {
            "IClassicSwapRouter": [
              8678
            ]
          },
          "id": 8679,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8645,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:64"
            },
            {
              "id": 8646,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:64"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 8647,
                "nodeType": "StructuredDocumentation",
                "src": "91:107:64",
                "text": "@title Router token swapping functionality\n @notice Functions for swapping tokens via Astra Classic"
              },
              "fullyImplemented": false,
              "id": 8678,
              "linearizedBaseContracts": [
                8678
              ],
              "name": "IClassicSwapRouter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 8648,
                    "nodeType": "StructuredDocumentation",
                    "src": "233:564:64",
                    "text": "@notice Swaps `amountIn` of one token for as much as possible of another token\n @dev Setting `amountIn` to 0 will cause the contract to look up its own balance,\n and swap the entire amount, enabling contracts to send tokens before calling this function.\n @param amountIn The amount of token to swap\n @param amountOutMin The minimum amount of output that must be received\n @param path The ordered list of tokens to swap through\n @param to The recipient address\n @return amountOut The amount of the received token"
                  },
                  "functionSelector": "472b43f3",
                  "id": 8662,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swapExactTokensForTokens",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8658,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8650,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8662,
                        "src": "845:16:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8649,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "845:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8652,
                        "mutability": "mutable",
                        "name": "amountOutMin",
                        "nodeType": "VariableDeclaration",
                        "scope": 8662,
                        "src": "871:20:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8651,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "871:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8655,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 8662,
                        "src": "901:23:64",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8653,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "901:7:64",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 8654,
                          "nodeType": "ArrayTypeName",
                          "src": "901:9:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8657,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 8662,
                        "src": "934:10:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8656,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "934:7:64",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "835:115:64"
                  },
                  "returnParameters": {
                    "id": 8661,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8660,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8662,
                        "src": "977:17:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8659,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "977:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "976:19:64"
                  },
                  "scope": 8678,
                  "src": "802:194:64",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8663,
                    "nodeType": "StructuredDocumentation",
                    "src": "1002:381:64",
                    "text": "@notice Swaps as little as possible of one token for an exact amount of another token\n @param amountOut The amount of token to swap for\n @param amountInMax The maximum amount of input that the caller will pay\n @param path The ordered list of tokens to swap through\n @param to The recipient address\n @return amountIn The amount of token to pay"
                  },
                  "functionSelector": "42712a67",
                  "id": 8677,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swapTokensForExactTokens",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8673,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8665,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8677,
                        "src": "1431:17:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8664,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1431:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8667,
                        "mutability": "mutable",
                        "name": "amountInMax",
                        "nodeType": "VariableDeclaration",
                        "scope": 8677,
                        "src": "1458:19:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8666,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1458:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8670,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 8677,
                        "src": "1487:23:64",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8668,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1487:7:64",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 8669,
                          "nodeType": "ArrayTypeName",
                          "src": "1487:9:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8672,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "scope": 8677,
                        "src": "1520:10:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8671,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1520:7:64",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1421:115:64"
                  },
                  "returnParameters": {
                    "id": 8676,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8675,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8677,
                        "src": "1563:16:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8674,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1563:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1562:18:64"
                  },
                  "scope": 8678,
                  "src": "1388:193:64",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8679,
              "src": "198:1385:64"
            }
          ],
          "src": "45:1539:64"
        },
        "id": 64
      },
      "contracts/interfaces/IImmutableState.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IImmutableState.sol",
          "exportedSymbols": {
            "IImmutableState": [
              8694
            ]
          },
          "id": 8695,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8680,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:65"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 8681,
                "nodeType": "StructuredDocumentation",
                "src": "71:91:65",
                "text": "@title Immutable state\n @notice Functions that return immutable state of the router"
              },
              "fullyImplemented": false,
              "id": 8694,
              "linearizedBaseContracts": [
                8694
              ],
              "name": "IImmutableState",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 8682,
                    "nodeType": "StructuredDocumentation",
                    "src": "194:60:65",
                    "text": "@return Returns the address of the Astra Classic factory"
                  },
                  "functionSelector": "4f04a0db",
                  "id": 8687,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factoryClassic",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8683,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "282:2:65"
                  },
                  "returnParameters": {
                    "id": 8686,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8685,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 8687,
                        "src": "308:7:65",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8684,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "308:7:65",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "307:9:65"
                  },
                  "scope": 8694,
                  "src": "259:58:65",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8688,
                    "nodeType": "StructuredDocumentation",
                    "src": "323:64:65",
                    "text": "@return Returns the address of Astra CL NFT position manager"
                  },
                  "functionSelector": "791b98bc",
                  "id": 8693,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "positionManager",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8689,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "416:2:65"
                  },
                  "returnParameters": {
                    "id": 8692,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8691,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 8693,
                        "src": "442:7:65",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8690,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "442:7:65",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "441:9:65"
                  },
                  "scope": 8694,
                  "src": "392:59:65",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8695,
              "src": "162:291:65"
            }
          ],
          "src": "45:409:65"
        },
        "id": 65
      },
      "contracts/interfaces/IMixedRouteQuoterV1.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IMixedRouteQuoterV1.sol",
          "exportedSymbols": {
            "IMixedRouteQuoterV1": [
              8757
            ]
          },
          "id": 8758,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8696,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:66"
            },
            {
              "id": 8697,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:66"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 8698,
                "nodeType": "StructuredDocumentation",
                "src": "91:516:66",
                "text": "@title MixedRouteQuoterV1 Interface\n @notice Supports quoting the calculated amounts for exact input swaps. Is specialized for routes containing a mix of Classic and CL liquidity.\n @notice For each pool also tells you the number of initialized ticks crossed and the sqrt price of the pool after the swap.\n @dev These functions are not marked view because they rely on calling non-view functions and reverting\n to compute the result. They are also not gas efficient and should not be called on-chain."
              },
              "fullyImplemented": false,
              "id": 8757,
              "linearizedBaseContracts": [
                8757
              ],
              "name": "IMixedRouteQuoterV1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 8699,
                    "nodeType": "StructuredDocumentation",
                    "src": "643:681:66",
                    "text": "@notice Returns the amount out received for a given exact input swap without executing the swap\n @param path The path of the swap, i.e. each token pair and the pool fee\n @param amountIn The amount of the first token to swap\n @return amountOut The amount of the last token that would be received\n @return CLSqrtPriceX96AfterList List of the sqrt price after the swap for each v3 pool in the path, 0 for v2 pools\n @return CLInitializedTicksCrossedList List of the initialized ticks that the swap crossed for each v3 pool in the path, 0 for v2 pools\n @return CLSwapGasEstimate The estimate of the gas that the v3 swaps in the path consume"
                  },
                  "functionSelector": "cdca1753",
                  "id": 8716,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInput",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8704,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8701,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 8716,
                        "src": "1354:17:66",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 8700,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1354:5:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8703,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8716,
                        "src": "1373:16:66",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8702,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1373:7:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1353:37:66"
                  },
                  "returnParameters": {
                    "id": 8715,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8706,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8716,
                        "src": "1438:17:66",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8705,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1438:7:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8709,
                        "mutability": "mutable",
                        "name": "CLSqrtPriceX96AfterList",
                        "nodeType": "VariableDeclaration",
                        "scope": 8716,
                        "src": "1469:40:66",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                          "typeString": "uint160[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8707,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "1469:7:66",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "id": 8708,
                          "nodeType": "ArrayTypeName",
                          "src": "1469:9:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                            "typeString": "uint160[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8712,
                        "mutability": "mutable",
                        "name": "CLInitializedTicksCrossedList",
                        "nodeType": "VariableDeclaration",
                        "scope": 8716,
                        "src": "1523:45:66",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8710,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1523:6:66",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 8711,
                          "nodeType": "ArrayTypeName",
                          "src": "1523:8:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8714,
                        "mutability": "mutable",
                        "name": "CLSwapGasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 8716,
                        "src": "1582:25:66",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8713,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1582:7:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1424:193:66"
                  },
                  "scope": 8757,
                  "src": "1329:289:66",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "IMixedRouteQuoterV1.QuoteExactInputSingleCLParams",
                  "id": 8727,
                  "members": [
                    {
                      "constant": false,
                      "id": 8718,
                      "mutability": "mutable",
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8727,
                      "src": "1671:15:66",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8717,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1671:7:66",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8720,
                      "mutability": "mutable",
                      "name": "tokenOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 8727,
                      "src": "1696:16:66",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8719,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1696:7:66",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8722,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8727,
                      "src": "1722:16:66",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8721,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1722:7:66",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8724,
                      "mutability": "mutable",
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "scope": 8727,
                      "src": "1748:10:66",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint24",
                        "typeString": "uint24"
                      },
                      "typeName": {
                        "id": 8723,
                        "name": "uint24",
                        "nodeType": "ElementaryTypeName",
                        "src": "1748:6:66",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8726,
                      "mutability": "mutable",
                      "name": "sqrtPriceLimitX96",
                      "nodeType": "VariableDeclaration",
                      "scope": 8727,
                      "src": "1768:25:66",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "typeName": {
                        "id": 8725,
                        "name": "uint160",
                        "nodeType": "ElementaryTypeName",
                        "src": "1768:7:66",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "QuoteExactInputSingleCLParams",
                  "nodeType": "StructDefinition",
                  "scope": 8757,
                  "src": "1624:176:66",
                  "visibility": "public"
                },
                {
                  "canonicalName": "IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams",
                  "id": 8734,
                  "members": [
                    {
                      "constant": false,
                      "id": 8729,
                      "mutability": "mutable",
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8734,
                      "src": "1858:15:66",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8728,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1858:7:66",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8731,
                      "mutability": "mutable",
                      "name": "tokenOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 8734,
                      "src": "1883:16:66",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8730,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1883:7:66",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8733,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8734,
                      "src": "1909:16:66",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8732,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1909:7:66",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "QuoteExactInputSingleClassicParams",
                  "nodeType": "StructDefinition",
                  "scope": 8757,
                  "src": "1806:126:66",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 8735,
                    "nodeType": "StructuredDocumentation",
                    "src": "1938:792:66",
                    "text": "@notice Returns the amount out received for a given exact input but for a swap of a single pool\n @param params The params for the quote, encoded as `QuoteExactInputSingleCLParams`\n tokenIn The token being swapped in\n tokenOut The token being swapped out\n fee The fee of the token pool to consider for the pair\n amountIn The desired input amount\n sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n @return amountOut The amount of `tokenOut` that would be received\n @return sqrtPriceX96After The sqrt price of the pool after the swap\n @return initializedTicksCrossed The number of initialized ticks that the swap crossed\n @return gasEstimate The estimate of the gas that the swap consumes"
                  },
                  "functionSelector": "5bccbdf7",
                  "id": 8748,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInputSingleCL",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8738,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8737,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 8748,
                        "src": "2768:43:66",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                          "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams"
                        },
                        "typeName": {
                          "id": 8736,
                          "name": "QuoteExactInputSingleCLParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8727,
                          "src": "2768:29:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_storage_ptr",
                            "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2767:45:66"
                  },
                  "returnParameters": {
                    "id": 8747,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8740,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8748,
                        "src": "2860:17:66",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8739,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2860:7:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8742,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96After",
                        "nodeType": "VariableDeclaration",
                        "scope": 8748,
                        "src": "2891:25:66",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 8741,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2891:7:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8744,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossed",
                        "nodeType": "VariableDeclaration",
                        "scope": 8748,
                        "src": "2930:30:66",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 8743,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2930:6:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8746,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 8748,
                        "src": "2974:19:66",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8745,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2974:7:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2846:157:66"
                  },
                  "scope": 8757,
                  "src": "2735:269:66",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8749,
                    "nodeType": "StructuredDocumentation",
                    "src": "3010:402:66",
                    "text": "@notice Returns the amount out received for a given exact input but for a swap of a single V2 pool\n @param params The params for the quote, encoded as `QuoteExactInputSingleClassicParams`\n tokenIn The token being swapped in\n tokenOut The token being swapped out\n amountIn The desired input amount\n @return amountOut The amount of `tokenOut` that would be received"
                  },
                  "functionSelector": "6f9fbc82",
                  "id": 8756,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInputSingleClassic",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8752,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8751,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 8756,
                        "src": "3455:48:66",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_QuoteExactInputSingleClassicParams_$8734_memory_ptr",
                          "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams"
                        },
                        "typeName": {
                          "id": 8750,
                          "name": "QuoteExactInputSingleClassicParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8734,
                          "src": "3455:34:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_QuoteExactInputSingleClassicParams_$8734_storage_ptr",
                            "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3454:50:66"
                  },
                  "returnParameters": {
                    "id": 8755,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8754,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8756,
                        "src": "3539:17:66",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8753,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3539:7:66",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3538:19:66"
                  },
                  "scope": 8757,
                  "src": "3417:141:66",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8758,
              "src": "607:3207:66"
            }
          ],
          "src": "45:3770:66"
        },
        "id": 66
      },
      "contracts/interfaces/IMulticallExtended.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IMulticallExtended.sol",
          "exportedSymbols": {
            "IMulticall": [
              2662
            ],
            "IMulticallExtended": [
              8789
            ]
          },
          "id": 8790,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8759,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:67"
            },
            {
              "id": 8760,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:67"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol",
              "file": "@airdao/astra-cl-periphery/contracts/interfaces/IMulticall.sol",
              "id": 8761,
              "nodeType": "ImportDirective",
              "scope": 8790,
              "sourceUnit": 2663,
              "src": "91:72:67",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8763,
                    "name": "IMulticall",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2662,
                    "src": "339:10:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IMulticall_$2662",
                      "typeString": "contract IMulticall"
                    }
                  },
                  "id": 8764,
                  "nodeType": "InheritanceSpecifier",
                  "src": "339:10:67"
                }
              ],
              "contractDependencies": [
                2662
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 8762,
                "nodeType": "StructuredDocumentation",
                "src": "165:142:67",
                "text": "@title MulticallExtended interface\n @notice Enables calling multiple methods in a single call to the contract with optional validation"
              },
              "fullyImplemented": false,
              "id": 8789,
              "linearizedBaseContracts": [
                8789,
                2662
              ],
              "name": "IMulticallExtended",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 8765,
                    "nodeType": "StructuredDocumentation",
                    "src": "356:464:67",
                    "text": "@notice Call multiple functions in the current contract and return the data from all of them if they all succeed\n @dev The `msg.value` should not be trusted for any method callable from multicall.\n @param deadline The time by which this function must be called before failing\n @param data The encoded function data for each of the calls to make to this contract\n @return results The results from each of the calls passed in via data"
                  },
                  "functionSelector": "5ae401dc",
                  "id": 8776,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "multicall",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8771,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8767,
                        "mutability": "mutable",
                        "name": "deadline",
                        "nodeType": "VariableDeclaration",
                        "scope": 8776,
                        "src": "844:16:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8766,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "844:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8770,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 8776,
                        "src": "862:21:67",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8768,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "862:5:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 8769,
                          "nodeType": "ArrayTypeName",
                          "src": "862:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "843:41:67"
                  },
                  "returnParameters": {
                    "id": 8775,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8774,
                        "mutability": "mutable",
                        "name": "results",
                        "nodeType": "VariableDeclaration",
                        "scope": 8776,
                        "src": "911:22:67",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8772,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "911:5:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 8773,
                          "nodeType": "ArrayTypeName",
                          "src": "911:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "910:24:67"
                  },
                  "scope": 8789,
                  "src": "825:110:67",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8777,
                    "nodeType": "StructuredDocumentation",
                    "src": "941:441:67",
                    "text": "@notice Call multiple functions in the current contract and return the data from all of them if they all succeed\n @dev The `msg.value` should not be trusted for any method callable from multicall.\n @param previousBlockhash The expected parent blockHash\n @param data The encoded function data for each of the calls to make to this contract\n @return results The results from each of the calls passed in via data"
                  },
                  "functionSelector": "1f0464d1",
                  "id": 8788,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "multicall",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8783,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8779,
                        "mutability": "mutable",
                        "name": "previousBlockhash",
                        "nodeType": "VariableDeclaration",
                        "scope": 8788,
                        "src": "1406:25:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 8778,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1406:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8782,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 8788,
                        "src": "1433:21:67",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8780,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "1433:5:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 8781,
                          "nodeType": "ArrayTypeName",
                          "src": "1433:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1405:50:67"
                  },
                  "returnParameters": {
                    "id": 8787,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8786,
                        "mutability": "mutable",
                        "name": "results",
                        "nodeType": "VariableDeclaration",
                        "scope": 8788,
                        "src": "1506:22:67",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8784,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "1506:5:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 8785,
                          "nodeType": "ArrayTypeName",
                          "src": "1506:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1505:24:67"
                  },
                  "scope": 8789,
                  "src": "1387:143:67",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8790,
              "src": "307:1225:67"
            }
          ],
          "src": "45:1488:67"
        },
        "id": 67
      },
      "contracts/interfaces/IOracleSlippage.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IOracleSlippage.sol",
          "exportedSymbols": {
            "IOracleSlippage": [
              8818
            ]
          },
          "id": 8819,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8791,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:68"
            },
            {
              "id": 8792,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:68"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 8793,
                "nodeType": "StructuredDocumentation",
                "src": "91:94:68",
                "text": "@title OracleSlippage interface\n @notice Enables slippage checks against oracle prices"
              },
              "fullyImplemented": false,
              "id": 8818,
              "linearizedBaseContracts": [
                8818
              ],
              "name": "IOracleSlippage",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 8794,
                    "nodeType": "StructuredDocumentation",
                    "src": "217:393:68",
                    "text": "@notice Ensures that the current (synthetic) tick over the path is no worse than\n `maximumTickDivergence` ticks away from the average as of `secondsAgo`\n @param path The path to fetch prices over\n @param maximumTickDivergence The maximum number of ticks that the price can degrade by\n @param secondsAgo The number of seconds ago to compute oracle prices against"
                  },
                  "functionSelector": "f25801a7",
                  "id": 8803,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "checkOracleSlippage",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8801,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8796,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 8803,
                        "src": "653:17:68",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 8795,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "653:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8798,
                        "mutability": "mutable",
                        "name": "maximumTickDivergence",
                        "nodeType": "VariableDeclaration",
                        "scope": 8803,
                        "src": "680:28:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 8797,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "680:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8800,
                        "mutability": "mutable",
                        "name": "secondsAgo",
                        "nodeType": "VariableDeclaration",
                        "scope": 8803,
                        "src": "718:17:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 8799,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "718:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "643:98:68"
                  },
                  "returnParameters": {
                    "id": 8802,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "755:0:68"
                  },
                  "scope": 8818,
                  "src": "615:141:68",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8804,
                    "nodeType": "StructuredDocumentation",
                    "src": "762:473:68",
                    "text": "@notice Ensures that the weighted average current (synthetic) tick over the path is no\n worse than `maximumTickDivergence` ticks away from the average as of `secondsAgo`\n @param paths The paths to fetch prices over\n @param amounts The weights for each entry in `paths`\n @param maximumTickDivergence The maximum number of ticks that the price can degrade by\n @param secondsAgo The number of seconds ago to compute oracle prices against"
                  },
                  "functionSelector": "efdeed8e",
                  "id": 8817,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "checkOracleSlippage",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8815,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8807,
                        "mutability": "mutable",
                        "name": "paths",
                        "nodeType": "VariableDeclaration",
                        "scope": 8817,
                        "src": "1278:20:68",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8805,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "1278:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 8806,
                          "nodeType": "ArrayTypeName",
                          "src": "1278:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8810,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nodeType": "VariableDeclaration",
                        "scope": 8817,
                        "src": "1308:24:68",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8808,
                            "name": "uint128",
                            "nodeType": "ElementaryTypeName",
                            "src": "1308:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "id": 8809,
                          "nodeType": "ArrayTypeName",
                          "src": "1308:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                            "typeString": "uint128[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8812,
                        "mutability": "mutable",
                        "name": "maximumTickDivergence",
                        "nodeType": "VariableDeclaration",
                        "scope": 8817,
                        "src": "1342:28:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 8811,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1342:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8814,
                        "mutability": "mutable",
                        "name": "secondsAgo",
                        "nodeType": "VariableDeclaration",
                        "scope": 8817,
                        "src": "1380:17:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 8813,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1380:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1268:135:68"
                  },
                  "returnParameters": {
                    "id": 8816,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1417:0:68"
                  },
                  "scope": 8818,
                  "src": "1240:178:68",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8819,
              "src": "185:1235:68"
            }
          ],
          "src": "45:1376:68"
        },
        "id": 68
      },
      "contracts/interfaces/IPeripheryPaymentsExtended.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IPeripheryPaymentsExtended.sol",
          "exportedSymbols": {
            "IPeripheryPayments": [
              2898
            ],
            "IPeripheryPaymentsExtended": [
              8853
            ]
          },
          "id": 8854,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8820,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:69"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol",
              "file": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPayments.sol",
              "id": 8821,
              "nodeType": "ImportDirective",
              "scope": 8854,
              "sourceUnit": 2899,
              "src": "71:80:69",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8823,
                    "name": "IPeripheryPayments",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2898,
                    "src": "305:18:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPeripheryPayments_$2898",
                      "typeString": "contract IPeripheryPayments"
                    }
                  },
                  "id": 8824,
                  "nodeType": "InheritanceSpecifier",
                  "src": "305:18:69"
                }
              ],
              "contractDependencies": [
                2898
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 8822,
                "nodeType": "StructuredDocumentation",
                "src": "153:112:69",
                "text": "@title Periphery Payments Extended\n @notice Functions to ease deposits and withdrawals of AMB and tokens"
              },
              "fullyImplemented": false,
              "id": 8853,
              "linearizedBaseContracts": [
                8853,
                2898
              ],
              "name": "IPeripheryPaymentsExtended",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 8825,
                    "nodeType": "StructuredDocumentation",
                    "src": "330:249:69",
                    "text": "@notice Unwraps the contract's SAMB balance and sends it to msg.sender as AMB.\n @dev The amountMinimum parameter prevents malicious contracts from stealing SAMB from users.\n @param amountMinimum The minimum amount of SAMB to unwrap"
                  },
                  "functionSelector": "acf8a4ed",
                  "id": 8830,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unwrapSAMB",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8828,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8827,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 8830,
                        "src": "604:21:69",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8826,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "604:7:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "603:23:69"
                  },
                  "returnParameters": {
                    "id": 8829,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "643:0:69"
                  },
                  "scope": 8853,
                  "src": "584:60:69",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8831,
                    "nodeType": "StructuredDocumentation",
                    "src": "650:200:69",
                    "text": "@notice Wraps the contract's AMB balance into SAMB\n @dev The resulting SAMB is custodied by the router, thus will require further distribution\n @param value The amount of AMB to wrap"
                  },
                  "functionSelector": "e4a40545",
                  "id": 8836,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "wrapAMB",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8834,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8833,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 8836,
                        "src": "872:13:69",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8832,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "872:7:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "871:15:69"
                  },
                  "returnParameters": {
                    "id": 8835,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "903:0:69"
                  },
                  "scope": 8853,
                  "src": "855:49:69",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8837,
                    "nodeType": "StructuredDocumentation",
                    "src": "910:365:69",
                    "text": "@notice Transfers the full amount of a token held by this contract to msg.sender\n @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users\n @param token The contract address of the token which will be transferred to msg.sender\n @param amountMinimum The minimum amount of token required for a transfer"
                  },
                  "functionSelector": "e90a182f",
                  "id": 8844,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sweepToken",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8842,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8839,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 8844,
                        "src": "1300:13:69",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8838,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1300:7:69",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8841,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 8844,
                        "src": "1315:21:69",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8840,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1315:7:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1299:38:69"
                  },
                  "returnParameters": {
                    "id": 8843,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1354:0:69"
                  },
                  "scope": 8853,
                  "src": "1280:75:69",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8845,
                    "nodeType": "StructuredDocumentation",
                    "src": "1361:168:69",
                    "text": "@notice Transfers the specified amount of a token from the msg.sender to address(this)\n @param token The token to pull\n @param value The amount to pay"
                  },
                  "functionSelector": "f2d5d56b",
                  "id": 8852,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pull",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8850,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8847,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 8852,
                        "src": "1548:13:69",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8846,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1548:7:69",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8849,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "scope": 8852,
                        "src": "1563:13:69",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8848,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1563:7:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1547:30:69"
                  },
                  "returnParameters": {
                    "id": 8851,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1594:0:69"
                  },
                  "scope": 8853,
                  "src": "1534:61:69",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8854,
              "src": "265:1332:69"
            }
          ],
          "src": "45:1553:69"
        },
        "id": 69
      },
      "contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol",
          "exportedSymbols": {
            "IPeripheryPayments": [
              2898
            ],
            "IPeripheryPaymentsExtended": [
              8853
            ],
            "IPeripheryPaymentsWithFee": [
              2931
            ],
            "IPeripheryPaymentsWithFeeExtended": [
              8885
            ]
          },
          "id": 8886,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8855,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:70"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol",
              "file": "@airdao/astra-cl-periphery/contracts/interfaces/IPeripheryPaymentsWithFee.sol",
              "id": 8856,
              "nodeType": "ImportDirective",
              "scope": 8886,
              "sourceUnit": 2932,
              "src": "71:87:70",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IPeripheryPaymentsExtended.sol",
              "file": "./IPeripheryPaymentsExtended.sol",
              "id": 8857,
              "nodeType": "ImportDirective",
              "scope": 8886,
              "sourceUnit": 8854,
              "src": "160:42:70",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8859,
                    "name": "IPeripheryPaymentsExtended",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8853,
                    "src": "361:26:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPeripheryPaymentsExtended_$8853",
                      "typeString": "contract IPeripheryPaymentsExtended"
                    }
                  },
                  "id": 8860,
                  "nodeType": "InheritanceSpecifier",
                  "src": "361:26:70"
                },
                {
                  "baseName": {
                    "id": 8861,
                    "name": "IPeripheryPaymentsWithFee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2931,
                    "src": "389:25:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPeripheryPaymentsWithFee_$2931",
                      "typeString": "contract IPeripheryPaymentsWithFee"
                    }
                  },
                  "id": 8862,
                  "nodeType": "InheritanceSpecifier",
                  "src": "389:25:70"
                }
              ],
              "contractDependencies": [
                2898,
                2931,
                8853
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 8858,
                "nodeType": "StructuredDocumentation",
                "src": "204:110:70",
                "text": "@title Periphery Payments With Fee Extended\n @notice Functions to ease deposits and withdrawals of AMB"
              },
              "fullyImplemented": false,
              "id": 8885,
              "linearizedBaseContracts": [
                8885,
                2931,
                8853,
                2898
              ],
              "name": "IPeripheryPaymentsWithFeeExtended",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 8863,
                    "nodeType": "StructuredDocumentation",
                    "src": "421:272:70",
                    "text": "@notice Unwraps the contract's SAMB balance and sends it to msg.sender as AMB, with a percentage between\n 0 (exclusive), and 1 (inclusive) going to feeRecipient\n @dev The amountMinimum parameter prevents malicious contracts from stealing SAMB from users."
                  },
                  "functionSelector": "bc122a54",
                  "id": 8872,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unwrapSAMBWithFee",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8870,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8865,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 8872,
                        "src": "734:21:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8864,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "734:7:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8867,
                        "mutability": "mutable",
                        "name": "feeBips",
                        "nodeType": "VariableDeclaration",
                        "scope": 8872,
                        "src": "765:15:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8866,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "765:7:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8869,
                        "mutability": "mutable",
                        "name": "feeRecipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 8872,
                        "src": "790:20:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8868,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "790:7:70",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "724:92:70"
                  },
                  "returnParameters": {
                    "id": 8871,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "833:0:70"
                  },
                  "scope": 8885,
                  "src": "698:136:70",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8873,
                    "nodeType": "StructuredDocumentation",
                    "src": "840:278:70",
                    "text": "@notice Transfers the full amount of a token held by this contract to msg.sender, with a percentage between\n 0 (exclusive) and 1 (inclusive) going to feeRecipient\n @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users"
                  },
                  "functionSelector": "3068c554",
                  "id": 8884,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sweepTokenWithFee",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8882,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8875,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 8884,
                        "src": "1159:13:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8874,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1159:7:70",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8877,
                        "mutability": "mutable",
                        "name": "amountMinimum",
                        "nodeType": "VariableDeclaration",
                        "scope": 8884,
                        "src": "1182:21:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8876,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1182:7:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8879,
                        "mutability": "mutable",
                        "name": "feeBips",
                        "nodeType": "VariableDeclaration",
                        "scope": 8884,
                        "src": "1213:15:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8878,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1213:7:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8881,
                        "mutability": "mutable",
                        "name": "feeRecipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 8884,
                        "src": "1238:20:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8880,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1238:7:70",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1149:115:70"
                  },
                  "returnParameters": {
                    "id": 8883,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1281:0:70"
                  },
                  "scope": 8885,
                  "src": "1123:159:70",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8886,
              "src": "314:970:70"
            }
          ],
          "src": "45:1240:70"
        },
        "id": 70
      },
      "contracts/interfaces/IQuoter.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IQuoter.sol",
          "exportedSymbols": {
            "IQuoter": [
              8942
            ]
          },
          "id": 8943,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8887,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:71"
            },
            {
              "id": 8888,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:71"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 8889,
                "nodeType": "StructuredDocumentation",
                "src": "91:320:71",
                "text": "@title Quoter Interface\n @notice Supports quoting the calculated amounts from exact input or exact output swaps\n @dev These functions are not marked view because they rely on calling non-view functions and reverting\n to compute the result. They are also not gas efficient and should not be called on-chain."
              },
              "fullyImplemented": false,
              "id": 8942,
              "linearizedBaseContracts": [
                8942
              ],
              "name": "IQuoter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 8890,
                    "nodeType": "StructuredDocumentation",
                    "src": "435:319:71",
                    "text": "@notice Returns the amount out received for a given exact input swap without executing the swap\n @param path The path of the swap, i.e. each token pair and the pool fee\n @param amountIn The amount of the first token to swap\n @return amountOut The amount of the last token that would be received"
                  },
                  "functionSelector": "cdca1753",
                  "id": 8899,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInput",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8895,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8892,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 8899,
                        "src": "784:17:71",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 8891,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "784:5:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8894,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8899,
                        "src": "803:16:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8893,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "803:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "783:37:71"
                  },
                  "returnParameters": {
                    "id": 8898,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8897,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8899,
                        "src": "839:17:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8896,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "839:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "838:19:71"
                  },
                  "scope": 8942,
                  "src": "759:99:71",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8900,
                    "nodeType": "StructuredDocumentation",
                    "src": "864:491:71",
                    "text": "@notice Returns the amount out received for a given exact input but for a swap of a single pool\n @param tokenIn The token being swapped in\n @param tokenOut The token being swapped out\n @param fee The fee of the token pool to consider for the pair\n @param amountIn The desired input amount\n @param sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n @return amountOut The amount of `tokenOut` that would be received"
                  },
                  "functionSelector": "f7729d43",
                  "id": 8915,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInputSingle",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8911,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8902,
                        "mutability": "mutable",
                        "name": "tokenIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8915,
                        "src": "1400:15:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8901,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1400:7:71",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8904,
                        "mutability": "mutable",
                        "name": "tokenOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8915,
                        "src": "1425:16:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8903,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1425:7:71",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8906,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 8915,
                        "src": "1451:10:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 8905,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1451:6:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8908,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8915,
                        "src": "1471:16:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8907,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1471:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8910,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 8915,
                        "src": "1497:25:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 8909,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1497:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1390:138:71"
                  },
                  "returnParameters": {
                    "id": 8914,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8913,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8915,
                        "src": "1547:17:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8912,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1547:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1546:19:71"
                  },
                  "scope": 8942,
                  "src": "1360:206:71",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8916,
                    "nodeType": "StructuredDocumentation",
                    "src": "1572:355:71",
                    "text": "@notice Returns the amount in required for a given exact output swap without executing the swap\n @param path The path of the swap, i.e. each token pair and the pool fee. Path must be provided in reverse order\n @param amountOut The amount of the last token to receive\n @return amountIn The amount of first token required to be paid"
                  },
                  "functionSelector": "2f80bb1d",
                  "id": 8925,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactOutput",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8921,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8918,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 8925,
                        "src": "1958:17:71",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 8917,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1958:5:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8920,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8925,
                        "src": "1977:17:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8919,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1977:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1957:38:71"
                  },
                  "returnParameters": {
                    "id": 8924,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8923,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8925,
                        "src": "2014:16:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8922,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2014:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2013:18:71"
                  },
                  "scope": 8942,
                  "src": "1932:100:71",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8926,
                    "nodeType": "StructuredDocumentation",
                    "src": "2038:538:71",
                    "text": "@notice Returns the amount in required to receive the given exact output amount but for a swap of a single pool\n @param tokenIn The token being swapped in\n @param tokenOut The token being swapped out\n @param fee The fee of the token pool to consider for the pair\n @param amountOut The desired output amount\n @param sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n @return amountIn The amount required as the input for the swap in order to receive `amountOut`"
                  },
                  "functionSelector": "30d07f21",
                  "id": 8941,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactOutputSingle",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8937,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8928,
                        "mutability": "mutable",
                        "name": "tokenIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8941,
                        "src": "2622:15:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8927,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2622:7:71",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8930,
                        "mutability": "mutable",
                        "name": "tokenOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8941,
                        "src": "2647:16:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8929,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2647:7:71",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8932,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 8941,
                        "src": "2673:10:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 8931,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2673:6:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8934,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8941,
                        "src": "2693:17:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8933,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2693:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8936,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 8941,
                        "src": "2720:25:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 8935,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2720:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2612:139:71"
                  },
                  "returnParameters": {
                    "id": 8940,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8939,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8941,
                        "src": "2770:16:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8938,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2770:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2769:18:71"
                  },
                  "scope": 8942,
                  "src": "2581:207:71",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8943,
              "src": "411:2379:71"
            }
          ],
          "src": "45:2746:71"
        },
        "id": 71
      },
      "contracts/interfaces/IQuoterV2.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IQuoterV2.sol",
          "exportedSymbols": {
            "IQuoterV2": [
              9033
            ]
          },
          "id": 9034,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8944,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:72"
            },
            {
              "id": 8945,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:72"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 8946,
                "nodeType": "StructuredDocumentation",
                "src": "91:451:72",
                "text": "@title QuoterV2 Interface\n @notice Supports quoting the calculated amounts from exact input or exact output swaps.\n @notice For each pool also tells you the number of initialized ticks crossed and the sqrt price of the pool after the swap.\n @dev These functions are not marked view because they rely on calling non-view functions and reverting\n to compute the result. They are also not gas efficient and should not be called on-chain."
              },
              "fullyImplemented": false,
              "id": 9033,
              "linearizedBaseContracts": [
                9033
              ],
              "name": "IQuoterV2",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 8947,
                    "nodeType": "StructuredDocumentation",
                    "src": "568:618:72",
                    "text": "@notice Returns the amount out received for a given exact input swap without executing the swap\n @param path The path of the swap, i.e. each token pair and the pool fee\n @param amountIn The amount of the first token to swap\n @return amountOut The amount of the last token that would be received\n @return sqrtPriceX96AfterList List of the sqrt price after the swap for each pool in the path\n @return initializedTicksCrossedList List of the initialized ticks that the swap crossed for each pool in the path\n @return gasEstimate The estimate of the gas that the swap consumes"
                  },
                  "functionSelector": "cdca1753",
                  "id": 8964,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInput",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8952,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8949,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 8964,
                        "src": "1216:17:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 8948,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1216:5:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8951,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 8964,
                        "src": "1235:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8950,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1235:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1215:37:72"
                  },
                  "returnParameters": {
                    "id": 8963,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8954,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8964,
                        "src": "1300:17:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8953,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1300:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8957,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96AfterList",
                        "nodeType": "VariableDeclaration",
                        "scope": 8964,
                        "src": "1331:38:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                          "typeString": "uint160[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8955,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "1331:7:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "id": 8956,
                          "nodeType": "ArrayTypeName",
                          "src": "1331:9:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                            "typeString": "uint160[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8960,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossedList",
                        "nodeType": "VariableDeclaration",
                        "scope": 8964,
                        "src": "1383:43:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8958,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1383:6:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 8959,
                          "nodeType": "ArrayTypeName",
                          "src": "1383:8:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8962,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 8964,
                        "src": "1440:19:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8961,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1440:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1286:183:72"
                  },
                  "scope": 9033,
                  "src": "1191:279:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "IQuoterV2.QuoteExactInputSingleParams",
                  "id": 8975,
                  "members": [
                    {
                      "constant": false,
                      "id": 8966,
                      "mutability": "mutable",
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8975,
                      "src": "1521:15:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8965,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1521:7:72",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8968,
                      "mutability": "mutable",
                      "name": "tokenOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 8975,
                      "src": "1546:16:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8967,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1546:7:72",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8970,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8975,
                      "src": "1572:16:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8969,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1572:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8972,
                      "mutability": "mutable",
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "scope": 8975,
                      "src": "1598:10:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint24",
                        "typeString": "uint24"
                      },
                      "typeName": {
                        "id": 8971,
                        "name": "uint24",
                        "nodeType": "ElementaryTypeName",
                        "src": "1598:6:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8974,
                      "mutability": "mutable",
                      "name": "sqrtPriceLimitX96",
                      "nodeType": "VariableDeclaration",
                      "scope": 8975,
                      "src": "1618:25:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "typeName": {
                        "id": 8973,
                        "name": "uint160",
                        "nodeType": "ElementaryTypeName",
                        "src": "1618:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "QuoteExactInputSingleParams",
                  "nodeType": "StructDefinition",
                  "scope": 9033,
                  "src": "1476:174:72",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 8976,
                    "nodeType": "StructuredDocumentation",
                    "src": "1656:790:72",
                    "text": "@notice Returns the amount out received for a given exact input but for a swap of a single pool\n @param params The params for the quote, encoded as `QuoteExactInputSingleParams`\n tokenIn The token being swapped in\n tokenOut The token being swapped out\n fee The fee of the token pool to consider for the pair\n amountIn The desired input amount\n sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n @return amountOut The amount of `tokenOut` that would be received\n @return sqrtPriceX96After The sqrt price of the pool after the swap\n @return initializedTicksCrossed The number of initialized ticks that the swap crossed\n @return gasEstimate The estimate of the gas that the swap consumes"
                  },
                  "functionSelector": "c6a5026a",
                  "id": 8989,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInputSingle",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8979,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8978,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 8989,
                        "src": "2482:41:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                          "typeString": "struct IQuoterV2.QuoteExactInputSingleParams"
                        },
                        "typeName": {
                          "id": 8977,
                          "name": "QuoteExactInputSingleParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8975,
                          "src": "2482:27:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_storage_ptr",
                            "typeString": "struct IQuoterV2.QuoteExactInputSingleParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2481:43:72"
                  },
                  "returnParameters": {
                    "id": 8988,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8981,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 8989,
                        "src": "2572:17:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8980,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2572:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8983,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96After",
                        "nodeType": "VariableDeclaration",
                        "scope": 8989,
                        "src": "2603:25:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 8982,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2603:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8985,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossed",
                        "nodeType": "VariableDeclaration",
                        "scope": 8989,
                        "src": "2642:30:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 8984,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2642:6:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8987,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 8989,
                        "src": "2686:19:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8986,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2686:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2558:157:72"
                  },
                  "scope": 9033,
                  "src": "2451:265:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 8990,
                    "nodeType": "StructuredDocumentation",
                    "src": "2722:654:72",
                    "text": "@notice Returns the amount in required for a given exact output swap without executing the swap\n @param path The path of the swap, i.e. each token pair and the pool fee. Path must be provided in reverse order\n @param amountOut The amount of the last token to receive\n @return amountIn The amount of first token required to be paid\n @return sqrtPriceX96AfterList List of the sqrt price after the swap for each pool in the path\n @return initializedTicksCrossedList List of the initialized ticks that the swap crossed for each pool in the path\n @return gasEstimate The estimate of the gas that the swap consumes"
                  },
                  "functionSelector": "2f80bb1d",
                  "id": 9007,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactOutput",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8995,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8992,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 9007,
                        "src": "3407:17:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 8991,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3407:5:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8994,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 9007,
                        "src": "3426:17:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8993,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3426:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3406:38:72"
                  },
                  "returnParameters": {
                    "id": 9006,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8997,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 9007,
                        "src": "3492:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8996,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3492:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9000,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96AfterList",
                        "nodeType": "VariableDeclaration",
                        "scope": 9007,
                        "src": "3522:38:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                          "typeString": "uint160[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 8998,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "3522:7:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "id": 8999,
                          "nodeType": "ArrayTypeName",
                          "src": "3522:9:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                            "typeString": "uint160[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9003,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossedList",
                        "nodeType": "VariableDeclaration",
                        "scope": 9007,
                        "src": "3574:43:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9001,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "3574:6:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 9002,
                          "nodeType": "ArrayTypeName",
                          "src": "3574:8:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9005,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 9007,
                        "src": "3631:19:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9004,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3631:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3478:182:72"
                  },
                  "scope": 9033,
                  "src": "3381:280:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "IQuoterV2.QuoteExactOutputSingleParams",
                  "id": 9018,
                  "members": [
                    {
                      "constant": false,
                      "id": 9009,
                      "mutability": "mutable",
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 9018,
                      "src": "3713:15:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9008,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3713:7:72",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 9011,
                      "mutability": "mutable",
                      "name": "tokenOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 9018,
                      "src": "3738:16:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9010,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3738:7:72",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 9013,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 9018,
                      "src": "3764:14:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9012,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3764:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 9015,
                      "mutability": "mutable",
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "scope": 9018,
                      "src": "3788:10:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint24",
                        "typeString": "uint24"
                      },
                      "typeName": {
                        "id": 9014,
                        "name": "uint24",
                        "nodeType": "ElementaryTypeName",
                        "src": "3788:6:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 9017,
                      "mutability": "mutable",
                      "name": "sqrtPriceLimitX96",
                      "nodeType": "VariableDeclaration",
                      "scope": 9018,
                      "src": "3808:25:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "typeName": {
                        "id": 9016,
                        "name": "uint160",
                        "nodeType": "ElementaryTypeName",
                        "src": "3808:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "QuoteExactOutputSingleParams",
                  "nodeType": "StructDefinition",
                  "scope": 9033,
                  "src": "3667:173:72",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 9019,
                    "nodeType": "StructuredDocumentation",
                    "src": "3846:838:72",
                    "text": "@notice Returns the amount in required to receive the given exact output amount but for a swap of a single pool\n @param params The params for the quote, encoded as `QuoteExactOutputSingleParams`\n tokenIn The token being swapped in\n tokenOut The token being swapped out\n fee The fee of the token pool to consider for the pair\n amountOut The desired output amount\n sqrtPriceLimitX96 The price limit of the pool that cannot be exceeded by the swap\n @return amountIn The amount required as the input for the swap in order to receive `amountOut`\n @return sqrtPriceX96After The sqrt price of the pool after the swap\n @return initializedTicksCrossed The number of initialized ticks that the swap crossed\n @return gasEstimate The estimate of the gas that the swap consumes"
                  },
                  "functionSelector": "bd21704a",
                  "id": 9032,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactOutputSingle",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9022,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9021,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 9032,
                        "src": "4721:42:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                          "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams"
                        },
                        "typeName": {
                          "id": 9020,
                          "name": "QuoteExactOutputSingleParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 9018,
                          "src": "4721:28:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_storage_ptr",
                            "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4720:44:72"
                  },
                  "returnParameters": {
                    "id": 9031,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9024,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 9032,
                        "src": "4812:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9023,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4812:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9026,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96After",
                        "nodeType": "VariableDeclaration",
                        "scope": 9032,
                        "src": "4842:25:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 9025,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "4842:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9028,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossed",
                        "nodeType": "VariableDeclaration",
                        "scope": 9032,
                        "src": "4881:30:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 9027,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4881:6:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9030,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 9032,
                        "src": "4925:19:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9029,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4925:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4798:156:72"
                  },
                  "scope": 9033,
                  "src": "4689:266:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 9034,
              "src": "542:4415:72"
            }
          ],
          "src": "45:4913:72"
        },
        "id": 72
      },
      "contracts/interfaces/ISwapRouter02.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/ISwapRouter02.sol",
          "exportedSymbols": {
            "IApproveAndCall": [
              8555
            ],
            "IAstraCLSwapCallback": [
              41
            ],
            "ICLSwapRouter": [
              8643
            ],
            "IClassicSwapRouter": [
              8678
            ],
            "IMulticall": [
              2662
            ],
            "IMulticallExtended": [
              8789
            ],
            "ISelfPermit": [
              3018
            ],
            "ISwapRouter02": [
              9053
            ]
          },
          "id": 9054,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9035,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:73"
            },
            {
              "id": 9036,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:73"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol",
              "file": "@airdao/astra-cl-periphery/contracts/interfaces/ISelfPermit.sol",
              "id": 9037,
              "nodeType": "ImportDirective",
              "scope": 9054,
              "sourceUnit": 3019,
              "src": "91:73:73",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IClassicSwapRouter.sol",
              "file": "./IClassicSwapRouter.sol",
              "id": 9038,
              "nodeType": "ImportDirective",
              "scope": 9054,
              "sourceUnit": 8679,
              "src": "166:34:73",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/ICLSwapRouter.sol",
              "file": "./ICLSwapRouter.sol",
              "id": 9039,
              "nodeType": "ImportDirective",
              "scope": 9054,
              "sourceUnit": 8644,
              "src": "201:29:73",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IApproveAndCall.sol",
              "file": "./IApproveAndCall.sol",
              "id": 9040,
              "nodeType": "ImportDirective",
              "scope": 9054,
              "sourceUnit": 8556,
              "src": "231:31:73",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IMulticallExtended.sol",
              "file": "./IMulticallExtended.sol",
              "id": 9041,
              "nodeType": "ImportDirective",
              "scope": 9054,
              "sourceUnit": 8790,
              "src": "263:34:73",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9043,
                    "name": "IClassicSwapRouter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8678,
                    "src": "373:18:73",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IClassicSwapRouter_$8678",
                      "typeString": "contract IClassicSwapRouter"
                    }
                  },
                  "id": 9044,
                  "nodeType": "InheritanceSpecifier",
                  "src": "373:18:73"
                },
                {
                  "baseName": {
                    "id": 9045,
                    "name": "ICLSwapRouter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8643,
                    "src": "393:13:73",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICLSwapRouter_$8643",
                      "typeString": "contract ICLSwapRouter"
                    }
                  },
                  "id": 9046,
                  "nodeType": "InheritanceSpecifier",
                  "src": "393:13:73"
                },
                {
                  "baseName": {
                    "id": 9047,
                    "name": "IApproveAndCall",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8555,
                    "src": "408:15:73",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IApproveAndCall_$8555",
                      "typeString": "contract IApproveAndCall"
                    }
                  },
                  "id": 9048,
                  "nodeType": "InheritanceSpecifier",
                  "src": "408:15:73"
                },
                {
                  "baseName": {
                    "id": 9049,
                    "name": "IMulticallExtended",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8789,
                    "src": "425:18:73",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IMulticallExtended_$8789",
                      "typeString": "contract IMulticallExtended"
                    }
                  },
                  "id": 9050,
                  "nodeType": "InheritanceSpecifier",
                  "src": "425:18:73"
                },
                {
                  "baseName": {
                    "id": 9051,
                    "name": "ISelfPermit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3018,
                    "src": "445:11:73",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISelfPermit_$3018",
                      "typeString": "contract ISelfPermit"
                    }
                  },
                  "id": 9052,
                  "nodeType": "InheritanceSpecifier",
                  "src": "445:11:73"
                }
              ],
              "contractDependencies": [
                41,
                2662,
                3018,
                8555,
                8643,
                8678,
                8789
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 9042,
                "nodeType": "StructuredDocumentation",
                "src": "299:47:73",
                "text": "@title Router token swapping functionality"
              },
              "fullyImplemented": false,
              "id": 9053,
              "linearizedBaseContracts": [
                9053,
                3018,
                8789,
                2662,
                8555,
                8643,
                41,
                8678
              ],
              "name": "ISwapRouter02",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 9054,
              "src": "346:115:73"
            }
          ],
          "src": "45:417:73"
        },
        "id": 73
      },
      "contracts/interfaces/ITokenValidator.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/ITokenValidator.sol",
          "exportedSymbols": {
            "ITokenValidator": [
              9090
            ]
          },
          "id": 9091,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9055,
              "literals": [
                "solidity",
                ">=",
                "0.7",
                ".5"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:74"
            },
            {
              "id": 9056,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "70:19:74"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 9057,
                "nodeType": "StructuredDocumentation",
                "src": "91:1147:74",
                "text": "@notice Validates tokens by flash borrowing from the token/<base token> pool on V2.\n @notice Returns\n     Status.FOT if we detected a fee is taken on transfer.\n     Status.STF if transfer failed for the token.\n     Status.UNKN if we did not detect any issues with the token.\n @notice A return value of Status.UNKN does not mean the token is definitely not a fee on transfer token\n     or definitely has no problems with its transfer. It just means we cant say for sure that it has any\n     issues.\n @dev We can not guarantee the result of this lens is correct for a few reasons:\n @dev 1/ Some tokens take fees or allow transfers under specific conditions, for example some have an allowlist\n @dev    of addresses that do/dont require fees. Therefore the result is not guaranteed to be correct\n @dev    in all circumstances.\n @dev 2/ It is possible that the token does not have any pools on V2 therefore we are not able to perform\n @dev    a flashloan to test the token.\n @dev These functions are not marked view because they rely on calling non-view functions and reverting\n to compute the result."
              },
              "fullyImplemented": false,
              "id": 9090,
              "linearizedBaseContracts": [
                9090
              ],
              "name": "ITokenValidator",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "ITokenValidator.Status",
                  "id": 9061,
                  "members": [
                    {
                      "id": 9058,
                      "name": "UNKN",
                      "nodeType": "EnumValue",
                      "src": "1441:4:74"
                    },
                    {
                      "id": 9059,
                      "name": "FOT",
                      "nodeType": "EnumValue",
                      "src": "1447:3:74"
                    },
                    {
                      "id": 9060,
                      "name": "STF",
                      "nodeType": "EnumValue",
                      "src": "1452:3:74"
                    }
                  ],
                  "name": "Status",
                  "nodeType": "EnumDefinition",
                  "src": "1428:28:74"
                },
                {
                  "documentation": {
                    "id": 9062,
                    "nodeType": "StructuredDocumentation",
                    "src": "1462:415:74",
                    "text": "@notice Validates a token by detecting if its transferable or takes a fee on transfer\n @param token The address of the token to check for fee on transfer\n @param baseTokens The addresses of the tokens to try pairing with\n token when looking for a pool to flash loan from.\n @param amountToBorrow The amount to try flash borrowing from the pools\n @return The status of the token"
                  },
                  "functionSelector": "0143aace",
                  "id": 9074,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "validate",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9070,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9064,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 9074,
                        "src": "1909:13:74",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9063,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1909:7:74",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9067,
                        "mutability": "mutable",
                        "name": "baseTokens",
                        "nodeType": "VariableDeclaration",
                        "scope": 9074,
                        "src": "1932:29:74",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9065,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1932:7:74",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 9066,
                          "nodeType": "ArrayTypeName",
                          "src": "1932:9:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9069,
                        "mutability": "mutable",
                        "name": "amountToBorrow",
                        "nodeType": "VariableDeclaration",
                        "scope": 9074,
                        "src": "1971:22:74",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9068,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1971:7:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1899:100:74"
                  },
                  "returnParameters": {
                    "id": 9073,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9072,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 9074,
                        "src": "2018:6:74",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Status_$9061",
                          "typeString": "enum ITokenValidator.Status"
                        },
                        "typeName": {
                          "id": 9071,
                          "name": "Status",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 9061,
                          "src": "2018:6:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Status_$9061",
                            "typeString": "enum ITokenValidator.Status"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2017:8:74"
                  },
                  "scope": 9090,
                  "src": "1882:144:74",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 9075,
                    "nodeType": "StructuredDocumentation",
                    "src": "2032:422:74",
                    "text": "@notice Validates each token by detecting if its transferable or takes a fee on transfer\n @param tokens The addresses of the tokens to check for fee on transfer\n @param baseTokens The addresses of the tokens to try pairing with\n token when looking for a pool to flash loan from.\n @param amountToBorrow The amount to try flash borrowing from the pools\n @return The status of the token"
                  },
                  "functionSelector": "be7672e5",
                  "id": 9089,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "batchValidate",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9084,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9078,
                        "mutability": "mutable",
                        "name": "tokens",
                        "nodeType": "VariableDeclaration",
                        "scope": 9089,
                        "src": "2491:25:74",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9076,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2491:7:74",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 9077,
                          "nodeType": "ArrayTypeName",
                          "src": "2491:9:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9081,
                        "mutability": "mutable",
                        "name": "baseTokens",
                        "nodeType": "VariableDeclaration",
                        "scope": 9089,
                        "src": "2526:29:74",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9079,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2526:7:74",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 9080,
                          "nodeType": "ArrayTypeName",
                          "src": "2526:9:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9083,
                        "mutability": "mutable",
                        "name": "amountToBorrow",
                        "nodeType": "VariableDeclaration",
                        "scope": 9089,
                        "src": "2565:22:74",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9082,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2565:7:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2481:112:74"
                  },
                  "returnParameters": {
                    "id": 9088,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9087,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 9089,
                        "src": "2612:15:74",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_enum$_Status_$9061_$dyn_memory_ptr",
                          "typeString": "enum ITokenValidator.Status[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9085,
                            "name": "Status",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 9061,
                            "src": "2612:6:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Status_$9061",
                              "typeString": "enum ITokenValidator.Status"
                            }
                          },
                          "id": 9086,
                          "nodeType": "ArrayTypeName",
                          "src": "2612:8:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_enum$_Status_$9061_$dyn_storage_ptr",
                            "typeString": "enum ITokenValidator.Status[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2611:17:74"
                  },
                  "scope": 9090,
                  "src": "2459:170:74",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 9091,
              "src": "1238:1393:74"
            }
          ],
          "src": "45:2587:74"
        },
        "id": 74
      },
      "contracts/lens/MixedRouteQuoterV1.sol": {
        "ast": {
          "absolutePath": "contracts/lens/MixedRouteQuoterV1.sol",
          "exportedSymbols": {
            "AstraClassicLibrary": [
              11656
            ],
            "BitMath": [
              740
            ],
            "BytesLib": [
              3178
            ],
            "CallbackValidation": [
              3240
            ],
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "IAstraCLSwapCallback": [
              41
            ],
            "IAstraPair": [
              4481
            ],
            "IImmutableState": [
              8694
            ],
            "IMixedRouteQuoterV1": [
              8757
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "ImmutableState": [
              7710
            ],
            "LowGasSafeMath": [
              1043
            ],
            "MixedRouteQuoterV1": [
              9660
            ],
            "Path": [
              3962
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PoolAddress": [
              4054
            ],
            "PoolTicksCounter": [
              11986
            ],
            "SafeCast": [
              1113
            ],
            "TickBitmap": [
              1369
            ],
            "TickMath": [
              1904
            ]
          },
          "id": 9661,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9092,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:75"
            },
            {
              "id": 9093,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:75"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "id": 9094,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 2035,
              "src": "90:79:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol",
              "id": 9095,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 1114,
              "src": "170:64:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/TickMath.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/TickMath.sol",
              "id": 9096,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 1905,
              "src": "235:64:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol",
              "id": 9097,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 1370,
              "src": "300:66:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "id": 9098,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 28,
              "src": "367:69:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol",
              "id": 9099,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 42,
              "src": "437:86:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/Path.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/Path.sol",
              "id": 9100,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 3963,
              "src": "524:65:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
              "id": 9101,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 4055,
              "src": "590:72:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol",
              "id": 9102,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 3241,
              "src": "663:79:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol",
              "file": "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol",
              "id": 9103,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 4482,
              "src": "743:74:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/base/ImmutableState.sol",
              "file": "../base/ImmutableState.sol",
              "id": 9104,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 7711,
              "src": "819:36:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IMixedRouteQuoterV1.sol",
              "file": "../interfaces/IMixedRouteQuoterV1.sol",
              "id": 9105,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 8758,
              "src": "856:47:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/libraries/PoolTicksCounter.sol",
              "file": "../libraries/PoolTicksCounter.sol",
              "id": 9106,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 11987,
              "src": "904:43:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/libraries/AstraClassicLibrary.sol",
              "file": "../libraries/AstraClassicLibrary.sol",
              "id": 9107,
              "nodeType": "ImportDirective",
              "scope": 9661,
              "sourceUnit": 11657,
              "src": "948:46:75",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9109,
                    "name": "IMixedRouteQuoterV1",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8757,
                    "src": "1497:19:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IMixedRouteQuoterV1_$8757",
                      "typeString": "contract IMixedRouteQuoterV1"
                    }
                  },
                  "id": 9110,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1497:19:75"
                },
                {
                  "baseName": {
                    "id": 9111,
                    "name": "IAstraCLSwapCallback",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 41,
                    "src": "1518:20:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLSwapCallback_$41",
                      "typeString": "contract IAstraCLSwapCallback"
                    }
                  },
                  "id": 9112,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1518:20:75"
                },
                {
                  "baseName": {
                    "id": 9113,
                    "name": "PeripheryImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2034,
                    "src": "1540:23:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryImmutableState_$2034",
                      "typeString": "contract PeripheryImmutableState"
                    }
                  },
                  "id": 9114,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1540:23:75"
                }
              ],
              "contractDependencies": [
                41,
                2034,
                2872,
                8757
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 9108,
                "nodeType": "StructuredDocumentation",
                "src": "996:470:75",
                "text": "@title Provides on chain quotes for CL, Classic, and MixedRoute exact input swaps\n @notice Allows getting the expected amount out for a given swap without executing the swap\n @notice Does not support exact output swaps since using the contract balance between exactOut swaps is not supported\n @dev These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute\n the swap and check the amounts in the callback."
              },
              "fullyImplemented": true,
              "id": 9660,
              "linearizedBaseContracts": [
                9660,
                2034,
                2872,
                41,
                8757
              ],
              "name": "MixedRouteQuoterV1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 9117,
                  "libraryName": {
                    "id": 9115,
                    "name": "Path",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3962,
                    "src": "1576:4:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Path_$3962",
                      "typeString": "library Path"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1570:21:75",
                  "typeName": {
                    "id": 9116,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1585:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  }
                },
                {
                  "id": 9120,
                  "libraryName": {
                    "id": 9118,
                    "name": "SafeCast",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1113,
                    "src": "1602:8:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeCast_$1113",
                      "typeString": "library SafeCast"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1596:27:75",
                  "typeName": {
                    "id": 9119,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1615:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 9123,
                  "libraryName": {
                    "id": 9121,
                    "name": "PoolTicksCounter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 11986,
                    "src": "1634:16:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PoolTicksCounter_$11986",
                      "typeString": "library PoolTicksCounter"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1628:40:75",
                  "typeName": {
                    "id": 9122,
                    "name": "IAstraCLPool",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27,
                    "src": "1655:12:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                      "typeString": "contract IAstraCLPool"
                    }
                  }
                },
                {
                  "constant": false,
                  "functionSelector": "4f04a0db",
                  "id": 9125,
                  "mutability": "immutable",
                  "name": "factoryClassic",
                  "nodeType": "VariableDeclaration",
                  "scope": 9660,
                  "src": "1673:39:75",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9124,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1673:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 9126,
                    "nodeType": "StructuredDocumentation",
                    "src": "1718:76:75",
                    "text": "@dev Value to bit mask with path fee to determine if Classic or CL route"
                  },
                  "id": 9129,
                  "mutability": "constant",
                  "name": "flagBitmask",
                  "nodeType": "VariableDeclaration",
                  "scope": 9660,
                  "src": "1941:45:75",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 9127,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "1941:6:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "value": {
                    "hexValue": "38333838363038",
                    "id": 9128,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1979:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_8388608_by_1",
                      "typeString": "int_const 8388608"
                    },
                    "value": "8388608"
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 9130,
                    "nodeType": "StructuredDocumentation",
                    "src": "1993:91:75",
                    "text": "@dev Transient storage variable used to check a safety condition in exact output swaps."
                  },
                  "id": 9132,
                  "mutability": "mutable",
                  "name": "amountOutCached",
                  "nodeType": "VariableDeclaration",
                  "scope": 9660,
                  "src": "2089:31:75",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9131,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2089:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 9149,
                    "nodeType": "Block",
                    "src": "2268:49:75",
                    "statements": [
                      {
                        "expression": {
                          "id": 9147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9145,
                            "name": "factoryClassic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9125,
                            "src": "2278:14:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 9146,
                            "name": "_factoryClassic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9136,
                            "src": "2295:15:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2278:32:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 9148,
                        "nodeType": "ExpressionStatement",
                        "src": "2278:32:75"
                      }
                    ]
                  },
                  "id": 9150,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 9141,
                          "name": "_factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9134,
                          "src": "2251:8:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 9142,
                          "name": "_SAMB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9138,
                          "src": "2261:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 9143,
                      "modifierName": {
                        "id": 9140,
                        "name": "PeripheryImmutableState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2034,
                        "src": "2227:23:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PeripheryImmutableState_$2034_$",
                          "typeString": "type(contract PeripheryImmutableState)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2227:40:75"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9139,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9134,
                        "mutability": "mutable",
                        "name": "_factory",
                        "nodeType": "VariableDeclaration",
                        "scope": 9150,
                        "src": "2148:16:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9133,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2148:7:75",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9136,
                        "mutability": "mutable",
                        "name": "_factoryClassic",
                        "nodeType": "VariableDeclaration",
                        "scope": 9150,
                        "src": "2174:23:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9135,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2174:7:75",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9138,
                        "mutability": "mutable",
                        "name": "_SAMB",
                        "nodeType": "VariableDeclaration",
                        "scope": 9150,
                        "src": "2207:13:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9137,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2207:7:75",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2138:88:75"
                  },
                  "returnParameters": {
                    "id": 9144,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2268:0:75"
                  },
                  "scope": 9660,
                  "src": "2127:190:75",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9174,
                    "nodeType": "Block",
                    "src": "2450:118:75",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 9164,
                                  "name": "factory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2013,
                                  "src": "2507:7:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 9167,
                                      "name": "tokenA",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9152,
                                      "src": "2539:6:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 9168,
                                      "name": "tokenB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9154,
                                      "src": "2547:6:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 9169,
                                      "name": "fee",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9156,
                                      "src": "2555:3:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      }
                                    ],
                                    "expression": {
                                      "id": 9165,
                                      "name": "PoolAddress",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4054,
                                      "src": "2516:11:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                        "typeString": "type(library PoolAddress)"
                                      }
                                    },
                                    "id": 9166,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "getPoolKey",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4006,
                                    "src": "2516:22:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint24_$returns$_t_struct$_PoolKey_$3975_memory_ptr_$",
                                      "typeString": "function (address,address,uint24) pure returns (struct PoolAddress.PoolKey memory)"
                                    }
                                  },
                                  "id": 9170,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2516:43:75",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                ],
                                "expression": {
                                  "id": 9162,
                                  "name": "PoolAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4054,
                                  "src": "2480:11:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                    "typeString": "type(library PoolAddress)"
                                  }
                                },
                                "id": 9163,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "computeAddress",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4053,
                                "src": "2480:26:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$_t_struct$_PoolKey_$3975_memory_ptr_$returns$_t_address_$",
                                  "typeString": "function (address,struct PoolAddress.PoolKey memory) pure returns (address)"
                                }
                              },
                              "id": 9171,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2480:80:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 9161,
                            "name": "IAstraCLPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27,
                            "src": "2467:12:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "type(contract IAstraCLPool)"
                            }
                          },
                          "id": 9172,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2467:94:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "functionReturnParameters": 9160,
                        "id": 9173,
                        "nodeType": "Return",
                        "src": "2460:101:75"
                      }
                    ]
                  },
                  "id": 9175,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPool",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9157,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9152,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 9175,
                        "src": "2349:14:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9151,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2349:7:75",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9154,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 9175,
                        "src": "2373:14:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9153,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2373:7:75",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9156,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 9175,
                        "src": "2397:10:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 9155,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2397:6:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2339:74:75"
                  },
                  "returnParameters": {
                    "id": 9160,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9159,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 9175,
                        "src": "2436:12:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 9158,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "2436:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2435:14:75"
                  },
                  "scope": 9660,
                  "src": "2323:245:75",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 9205,
                    "nodeType": "Block",
                    "src": "2807:207:75",
                    "statements": [
                      {
                        "assignments": [
                          9188,
                          9190
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9188,
                            "mutability": "mutable",
                            "name": "reserveIn",
                            "nodeType": "VariableDeclaration",
                            "scope": 9205,
                            "src": "2818:17:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9187,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2818:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 9190,
                            "mutability": "mutable",
                            "name": "reserveOut",
                            "nodeType": "VariableDeclaration",
                            "scope": 9205,
                            "src": "2837:18:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9189,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2837:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9197,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 9193,
                              "name": "factoryClassic",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9125,
                              "src": "2891:14:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9194,
                              "name": "tokenIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9180,
                              "src": "2907:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9195,
                              "name": "tokenOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9182,
                              "src": "2916:8:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 9191,
                              "name": "AstraClassicLibrary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11656,
                              "src": "2859:19:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_AstraClassicLibrary_$11656_$",
                                "typeString": "type(library AstraClassicLibrary)"
                              }
                            },
                            "id": 9192,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getReserves",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11453,
                            "src": "2859:31:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function (address,address,address) view returns (uint256,uint256)"
                            }
                          },
                          "id": 9196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2859:66:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2817:108:75"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9200,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9178,
                              "src": "2975:8:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 9201,
                              "name": "reserveIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9188,
                              "src": "2985:9:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 9202,
                              "name": "reserveOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9190,
                              "src": "2996:10:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 9198,
                              "name": "AstraClassicLibrary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11656,
                              "src": "2942:19:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_AstraClassicLibrary_$11656_$",
                                "typeString": "type(library AstraClassicLibrary)"
                              }
                            },
                            "id": 9199,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAmountOut",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11512,
                            "src": "2942:32:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 9203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2942:65:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 9186,
                        "id": 9204,
                        "nodeType": "Return",
                        "src": "2935:72:75"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9176,
                    "nodeType": "StructuredDocumentation",
                    "src": "2574:88:75",
                    "text": "@dev Given an amountIn, fetch the reserves of the Classic pair and get the amountOut"
                  },
                  "id": 9206,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPairAmountOut",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9183,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9178,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 9206,
                        "src": "2702:16:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9177,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2702:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9180,
                        "mutability": "mutable",
                        "name": "tokenIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 9206,
                        "src": "2728:15:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9179,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2728:7:75",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9182,
                        "mutability": "mutable",
                        "name": "tokenOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 9206,
                        "src": "2753:16:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9181,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2753:7:75",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2692:83:75"
                  },
                  "returnParameters": {
                    "id": 9186,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9185,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 9206,
                        "src": "2798:7:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9184,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2798:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2797:9:75"
                  },
                  "scope": 9660,
                  "src": "2667:347:75",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    40
                  ],
                  "body": {
                    "id": 9298,
                    "nodeType": "Block",
                    "src": "3204:1077:75",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 9224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 9220,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9218,
                                  "name": "amount0Delta",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9209,
                                  "src": "3222:12:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 9219,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3237:1:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3222:16:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 9223,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9221,
                                  "name": "amount1Delta",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9211,
                                  "src": "3242:12:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 9222,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3257:1:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3242:16:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "3222:36:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 9217,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3214:7:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 9225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3214:45:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9226,
                        "nodeType": "ExpressionStatement",
                        "src": "3214:45:75"
                      },
                      {
                        "assignments": [
                          9228,
                          9230,
                          9232
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9228,
                            "mutability": "mutable",
                            "name": "tokenIn",
                            "nodeType": "VariableDeclaration",
                            "scope": 9298,
                            "src": "3333:15:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 9227,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3333:7:75",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 9230,
                            "mutability": "mutable",
                            "name": "tokenOut",
                            "nodeType": "VariableDeclaration",
                            "scope": 9298,
                            "src": "3350:16:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 9229,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3350:7:75",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 9232,
                            "mutability": "mutable",
                            "name": "fee",
                            "nodeType": "VariableDeclaration",
                            "scope": 9298,
                            "src": "3368:10:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            },
                            "typeName": {
                              "id": 9231,
                              "name": "uint24",
                              "nodeType": "ElementaryTypeName",
                              "src": "3368:6:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9236,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 9233,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9213,
                              "src": "3382:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 9234,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "decodeFirstPool",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3928,
                            "src": "3382:20:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                            }
                          },
                          "id": 9235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3382:22:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                            "typeString": "tuple(address,address,uint24)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3332:72:75"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9240,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2013,
                              "src": "3448:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9241,
                              "name": "tokenIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9228,
                              "src": "3457:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9242,
                              "name": "tokenOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9230,
                              "src": "3466:8:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9243,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9232,
                              "src": "3476:3:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            ],
                            "expression": {
                              "id": 9237,
                              "name": "CallbackValidation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3240,
                              "src": "3414:18:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_CallbackValidation_$3240_$",
                                "typeString": "type(library CallbackValidation)"
                              }
                            },
                            "id": 9239,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "verifyCallback",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3208,
                            "src": "3414:33:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "function (address,address,address,uint24) view returns (contract IAstraCLPool)"
                            }
                          },
                          "id": 9244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3414:66:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "id": 9245,
                        "nodeType": "ExpressionStatement",
                        "src": "3414:66:75"
                      },
                      {
                        "assignments": [
                          9247,
                          9249
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9247,
                            "mutability": "mutable",
                            "name": "isExactInput",
                            "nodeType": "VariableDeclaration",
                            "scope": 9298,
                            "src": "3492:17:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 9246,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3492:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 9249,
                            "mutability": "mutable",
                            "name": "amountReceived",
                            "nodeType": "VariableDeclaration",
                            "scope": 9298,
                            "src": "3511:22:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9248,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3511:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9272,
                        "initialValue": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "id": 9252,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 9250,
                              "name": "amount0Delta",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9209,
                              "src": "3549:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 9251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3564:1:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "3549:16:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 9264,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9262,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9230,
                                  "src": "3648:8:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 9263,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9228,
                                  "src": "3659:7:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "3648:18:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 9268,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "3676:13:75",
                                    "subExpression": {
                                      "id": 9267,
                                      "name": "amount0Delta",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9209,
                                      "src": "3677:12:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9266,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3668:7:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 9265,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3668:7:75",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 9269,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3668:22:75",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 9270,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "3647:44:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                              "typeString": "tuple(bool,uint256)"
                            }
                          },
                          "id": 9271,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "3549:142:75",
                          "trueExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 9255,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9253,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9228,
                                  "src": "3585:7:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 9254,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9230,
                                  "src": "3595:8:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "3585:18:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 9259,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "3613:13:75",
                                    "subExpression": {
                                      "id": 9258,
                                      "name": "amount1Delta",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9211,
                                      "src": "3614:12:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9257,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3605:7:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 9256,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3605:7:75",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 9260,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3605:22:75",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 9261,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "3584:44:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                              "typeString": "tuple(bool,uint256)"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3491:200:75"
                      },
                      {
                        "assignments": [
                          9274
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9274,
                            "mutability": "mutable",
                            "name": "pool",
                            "nodeType": "VariableDeclaration",
                            "scope": 9298,
                            "src": "3702:17:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            },
                            "typeName": {
                              "id": 9273,
                              "name": "IAstraCLPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 27,
                              "src": "3702:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9280,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 9276,
                              "name": "tokenIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9228,
                              "src": "3730:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9277,
                              "name": "tokenOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9230,
                              "src": "3739:8:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9278,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9232,
                              "src": "3749:3:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            ],
                            "id": 9275,
                            "name": "getPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9175,
                            "src": "3722:7:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "function (address,address,uint24) view returns (contract IAstraCLPool)"
                            }
                          },
                          "id": 9279,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3722:31:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3702:51:75"
                      },
                      {
                        "assignments": [
                          9282,
                          9284,
                          null,
                          null,
                          null,
                          null,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9282,
                            "mutability": "mutable",
                            "name": "CLSqrtPriceX96After",
                            "nodeType": "VariableDeclaration",
                            "scope": 9298,
                            "src": "3764:27:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "typeName": {
                              "id": 9281,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "3764:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 9284,
                            "mutability": "mutable",
                            "name": "tickAfter",
                            "nodeType": "VariableDeclaration",
                            "scope": 9298,
                            "src": "3793:15:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 9283,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "3793:5:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          },
                          null,
                          null,
                          null,
                          null,
                          null
                        ],
                        "id": 9288,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 9285,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9274,
                              "src": "3822:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 9286,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "slot0",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 374,
                            "src": "3822:10:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                              "typeString": "function () view external returns (uint160,int24,uint16,uint16,uint16,uint8,bool)"
                            }
                          },
                          "id": 9287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3822:12:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                            "typeString": "tuple(uint160,int24,uint16,uint16,uint16,uint8,bool)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3763:71:75"
                      },
                      {
                        "condition": {
                          "id": 9289,
                          "name": "isExactInput",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9247,
                          "src": "3849:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 9296,
                          "nodeType": "Block",
                          "src": "4144:131:75",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "4578616374206f75747075742071756f7465206e6f7420737570706f72746564",
                                    "id": 9293,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4229:34:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_f7a55993d4eb382512b201c519dd56fdec259588ab4c60b5eb31e24ad5650add",
                                      "typeString": "literal_string \"Exact output quote not supported\""
                                    },
                                    "value": "Exact output quote not supported"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_f7a55993d4eb382512b201c519dd56fdec259588ab4c60b5eb31e24ad5650add",
                                      "typeString": "literal_string \"Exact output quote not supported\""
                                    }
                                  ],
                                  "id": 9292,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "4222:6:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 9294,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4222:42:75",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9295,
                              "nodeType": "ExpressionStatement",
                              "src": "4222:42:75"
                            }
                          ]
                        },
                        "id": 9297,
                        "nodeType": "IfStatement",
                        "src": "3845:430:75",
                        "trueBody": {
                          "id": 9291,
                          "nodeType": "Block",
                          "src": "3863:275:75",
                          "statements": [
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "3886:242:75",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "3904:22:75",
                                    "value": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3921:4:75",
                                          "type": "",
                                          "value": "0x40"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "3915:5:75"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3915:11:75"
                                    },
                                    "variables": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulTypedName",
                                        "src": "3908:3:75",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "3950:3:75"
                                        },
                                        {
                                          "name": "amountReceived",
                                          "nodeType": "YulIdentifier",
                                          "src": "3955:14:75"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3943:6:75"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3943:27:75"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3943:27:75"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "3998:3:75"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "4003:4:75",
                                              "type": "",
                                              "value": "0x20"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "3994:3:75"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3994:14:75"
                                        },
                                        {
                                          "name": "CLSqrtPriceX96After",
                                          "nodeType": "YulIdentifier",
                                          "src": "4010:19:75"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3987:6:75"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3987:43:75"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3987:43:75"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "4058:3:75"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "4063:4:75",
                                              "type": "",
                                              "value": "0x40"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "4054:3:75"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4054:14:75"
                                        },
                                        {
                                          "name": "tickAfter",
                                          "nodeType": "YulIdentifier",
                                          "src": "4070:9:75"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "4047:6:75"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4047:33:75"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4047:33:75"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "4104:3:75"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4109:4:75",
                                          "type": "",
                                          "value": "0x60"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4097:6:75"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4097:17:75"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4097:17:75"
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 9282,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "4010:19:75",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 9249,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "3955:14:75",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 9284,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "4070:9:75",
                                  "valueSize": 1
                                }
                              ],
                              "id": 9290,
                              "nodeType": "InlineAssembly",
                              "src": "3877:251:75"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9207,
                    "nodeType": "StructuredDocumentation",
                    "src": "3020:36:75",
                    "text": "@inheritdoc IAstraCLSwapCallback"
                  },
                  "functionSelector": "11c17848",
                  "id": 9299,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "astraCLSwapCallback",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9215,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3195:8:75"
                  },
                  "parameters": {
                    "id": 9214,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9209,
                        "mutability": "mutable",
                        "name": "amount0Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 9299,
                        "src": "3099:19:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9208,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3099:6:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9211,
                        "mutability": "mutable",
                        "name": "amount1Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 9299,
                        "src": "3128:19:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9210,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3128:6:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9213,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 9299,
                        "src": "3157:17:75",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 9212,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3157:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3089:91:75"
                  },
                  "returnParameters": {
                    "id": 9216,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3204:0:75"
                  },
                  "scope": 9660,
                  "src": "3061:1220:75",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9349,
                    "nodeType": "Block",
                    "src": "4565:313:75",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 9311,
                              "name": "reason",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9302,
                              "src": "4579:6:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 9312,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "4579:13:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30783630",
                            "id": 9313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4596:4:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_96_by_1",
                              "typeString": "int_const 96"
                            },
                            "value": "0x60"
                          },
                          "src": "4579:21:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9336,
                        "nodeType": "IfStatement",
                        "src": "4575:235:75",
                        "trueBody": {
                          "id": 9335,
                          "nodeType": "Block",
                          "src": "4602:208:75",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 9318,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 9315,
                                    "name": "reason",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9302,
                                    "src": "4620:6:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 9316,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "4620:13:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "30783434",
                                  "id": 9317,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4636:4:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_68_by_1",
                                    "typeString": "int_const 68"
                                  },
                                  "value": "0x44"
                                },
                                "src": "4620:20:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 9323,
                              "nodeType": "IfStatement",
                              "src": "4616:52:75",
                              "trueBody": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "hexValue": "556e6578706563746564206572726f72",
                                      "id": 9320,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4649:18:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff",
                                        "typeString": "literal_string \"Unexpected error\""
                                      },
                                      "value": "Unexpected error"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff",
                                        "typeString": "literal_string \"Unexpected error\""
                                      }
                                    ],
                                    "id": 9319,
                                    "name": "revert",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -19,
                                      -19
                                    ],
                                    "referencedDeclaration": -19,
                                    "src": "4642:6:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                      "typeString": "function (string memory) pure"
                                    }
                                  },
                                  "id": 9321,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4642:26:75",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 9322,
                                "nodeType": "ExpressionStatement",
                                "src": "4642:26:75"
                              }
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "4691:59:75",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4709:27:75",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "reason",
                                          "nodeType": "YulIdentifier",
                                          "src": "4723:6:75"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4731:4:75",
                                          "type": "",
                                          "value": "0x04"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4719:3:75"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4719:17:75"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "reason",
                                        "nodeType": "YulIdentifier",
                                        "src": "4709:6:75"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 9302,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "4709:6:75",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 9302,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "4723:6:75",
                                  "valueSize": 1
                                }
                              ],
                              "id": 9324,
                              "nodeType": "InlineAssembly",
                              "src": "4682:68:75"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 9328,
                                        "name": "reason",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9302,
                                        "src": "4781:6:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "components": [
                                          {
                                            "id": 9330,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "4790:6:75",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                              "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                              "id": 9329,
                                              "name": "string",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "4790:6:75",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "id": 9331,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "4789:8:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      ],
                                      "expression": {
                                        "id": 9326,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "4770:3:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 9327,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "src": "4770:10:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 9332,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4770:28:75",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 9325,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "4763:6:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 9333,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4763:36:75",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9334,
                              "nodeType": "ExpressionStatement",
                              "src": "4763:36:75"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9339,
                              "name": "reason",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9302,
                              "src": "4837:6:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 9341,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4846:7:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 9340,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4846:7:75",
                                    "typeDescriptions": {}
                                  }
                                },
                                {
                                  "id": 9343,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4855:7:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  },
                                  "typeName": {
                                    "id": 9342,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4855:7:75",
                                    "typeDescriptions": {}
                                  }
                                },
                                {
                                  "id": 9345,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4864:5:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_int24_$",
                                    "typeString": "type(int24)"
                                  },
                                  "typeName": {
                                    "id": 9344,
                                    "name": "int24",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4864:5:75",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "id": 9346,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "4845:25:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint160_$_$_t_type$_t_int24_$_$",
                                "typeString": "tuple(type(uint256),type(uint160),type(int24))"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint160_$_$_t_type$_t_int24_$_$",
                                "typeString": "tuple(type(uint256),type(uint160),type(int24))"
                              }
                            ],
                            "expression": {
                              "id": 9337,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "4826:3:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 9338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "4826:10:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 9347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4826:45:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_int24_$",
                            "typeString": "tuple(uint256,uint160,int24)"
                          }
                        },
                        "functionReturnParameters": 9310,
                        "id": 9348,
                        "nodeType": "Return",
                        "src": "4819:52:75"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9300,
                    "nodeType": "StructuredDocumentation",
                    "src": "4287:69:75",
                    "text": "@dev Parses a revert reason that should contain the numeric quote"
                  },
                  "id": 9350,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseRevertReason",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9303,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9302,
                        "mutability": "mutable",
                        "name": "reason",
                        "nodeType": "VariableDeclaration",
                        "scope": 9350,
                        "src": "4388:19:75",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 9301,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4388:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4387:21:75"
                  },
                  "returnParameters": {
                    "id": 9310,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9305,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 9350,
                        "src": "4468:14:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9304,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4468:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9307,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96After",
                        "nodeType": "VariableDeclaration",
                        "scope": 9350,
                        "src": "4496:25:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 9306,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "4496:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9309,
                        "mutability": "mutable",
                        "name": "tickAfter",
                        "nodeType": "VariableDeclaration",
                        "scope": 9350,
                        "src": "4535:15:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 9308,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "4535:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4454:106:75"
                  },
                  "scope": 9660,
                  "src": "4361:517:75",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 9403,
                    "nodeType": "Block",
                    "src": "5191:359:75",
                    "statements": [
                      {
                        "assignments": [
                          9368
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9368,
                            "mutability": "mutable",
                            "name": "tickBefore",
                            "nodeType": "VariableDeclaration",
                            "scope": 9403,
                            "src": "5201:16:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 9367,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "5201:5:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9369,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5201:16:75"
                      },
                      {
                        "assignments": [
                          9371
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9371,
                            "mutability": "mutable",
                            "name": "tickAfter",
                            "nodeType": "VariableDeclaration",
                            "scope": 9403,
                            "src": "5227:15:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 9370,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "5227:5:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9372,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5227:15:75"
                      },
                      {
                        "expression": {
                          "id": 9378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              null,
                              {
                                "id": 9373,
                                "name": "tickBefore",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9368,
                                "src": "5255:10:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              null,
                              null,
                              null,
                              null,
                              null
                            ],
                            "id": 9374,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "5252:24:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$_t_int24_$__$__$__$__$__$",
                              "typeString": "tuple(,int24,,,,,)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 9375,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9354,
                                "src": "5279:4:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                  "typeString": "contract IAstraCLPool"
                                }
                              },
                              "id": 9376,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "slot0",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 374,
                              "src": "5279:10:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                                "typeString": "function () view external returns (uint160,int24,uint16,uint16,uint16,uint8,bool)"
                              }
                            },
                            "id": 9377,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5279:12:75",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                              "typeString": "tuple(uint160,int24,uint16,uint16,uint16,uint8,bool)"
                            }
                          },
                          "src": "5252:39:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9379,
                        "nodeType": "ExpressionStatement",
                        "src": "5252:39:75"
                      },
                      {
                        "expression": {
                          "id": 9387,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 9380,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9359,
                                "src": "5302:6:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 9381,
                                "name": "sqrtPriceX96After",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9361,
                                "src": "5310:17:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "id": 9382,
                                "name": "tickAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9371,
                                "src": "5329:9:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              }
                            ],
                            "id": 9383,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "5301:38:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_int24_$",
                              "typeString": "tuple(uint256,uint160,int24)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9385,
                                "name": "reason",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9352,
                                "src": "5360:6:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 9384,
                              "name": "parseRevertReason",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9350,
                              "src": "5342:17:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_uint160_$_t_int24_$",
                                "typeString": "function (bytes memory) pure returns (uint256,uint160,int24)"
                              }
                            },
                            "id": 9386,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5342:25:75",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_int24_$",
                              "typeString": "tuple(uint256,uint160,int24)"
                            }
                          },
                          "src": "5301:66:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9388,
                        "nodeType": "ExpressionStatement",
                        "src": "5301:66:75"
                      },
                      {
                        "expression": {
                          "id": 9395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9389,
                            "name": "initializedTicksCrossed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9363,
                            "src": "5378:23:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9392,
                                "name": "tickBefore",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9368,
                                "src": "5438:10:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              {
                                "id": 9393,
                                "name": "tickAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9371,
                                "src": "5450:9:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              ],
                              "expression": {
                                "id": 9390,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9354,
                                "src": "5404:4:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                  "typeString": "contract IAstraCLPool"
                                }
                              },
                              "id": 9391,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "countInitializedTicksCrossed",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11956,
                              "src": "5404:33:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_contract$_IAstraCLPool_$27_$_t_int24_$_t_int24_$returns$_t_uint32_$bound_to$_t_contract$_IAstraCLPool_$27_$",
                                "typeString": "function (contract IAstraCLPool,int24,int24) view returns (uint32)"
                              }
                            },
                            "id": 9394,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5404:56:75",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "5378:82:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 9396,
                        "nodeType": "ExpressionStatement",
                        "src": "5378:82:75"
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "id": 9397,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9359,
                              "src": "5479:6:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 9398,
                              "name": "sqrtPriceX96After",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9361,
                              "src": "5487:17:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "id": 9399,
                              "name": "initializedTicksCrossed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9363,
                              "src": "5506:23:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 9400,
                              "name": "gasEstimate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9356,
                              "src": "5531:11:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 9401,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5478:65:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint160,uint32,uint256)"
                          }
                        },
                        "functionReturnParameters": 9366,
                        "id": 9402,
                        "nodeType": "Return",
                        "src": "5471:72:75"
                      }
                    ]
                  },
                  "id": 9404,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "handleCLRevert",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9357,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9352,
                        "mutability": "mutable",
                        "name": "reason",
                        "nodeType": "VariableDeclaration",
                        "scope": 9404,
                        "src": "4917:19:75",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 9351,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4917:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9354,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 9404,
                        "src": "4946:17:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 9353,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "4946:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9356,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 9404,
                        "src": "4973:19:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9355,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4973:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4907:91:75"
                  },
                  "returnParameters": {
                    "id": 9366,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9359,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 9404,
                        "src": "5058:14:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9358,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5058:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9361,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96After",
                        "nodeType": "VariableDeclaration",
                        "scope": 9404,
                        "src": "5086:25:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 9360,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "5086:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9363,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossed",
                        "nodeType": "VariableDeclaration",
                        "scope": 9404,
                        "src": "5125:30:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 9362,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5125:6:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9365,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 9404,
                        "src": "5169:7:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9364,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5169:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5044:142:75"
                  },
                  "scope": 9660,
                  "src": "4884:666:75",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    8748
                  ],
                  "body": {
                    "id": 9503,
                    "nodeType": "Block",
                    "src": "5903:820:75",
                    "statements": [
                      {
                        "assignments": [
                          9420
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9420,
                            "mutability": "mutable",
                            "name": "zeroForOne",
                            "nodeType": "VariableDeclaration",
                            "scope": 9503,
                            "src": "5913:15:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 9419,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5913:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9426,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9425,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 9421,
                              "name": "params",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9407,
                              "src": "5931:6:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                              }
                            },
                            "id": 9422,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "tokenIn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8718,
                            "src": "5931:14:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 9423,
                              "name": "params",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9407,
                              "src": "5948:6:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                              }
                            },
                            "id": 9424,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "tokenOut",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8720,
                            "src": "5948:15:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5931:32:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5913:50:75"
                      },
                      {
                        "assignments": [
                          9428
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9428,
                            "mutability": "mutable",
                            "name": "pool",
                            "nodeType": "VariableDeclaration",
                            "scope": 9503,
                            "src": "5973:17:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            },
                            "typeName": {
                              "id": 9427,
                              "name": "IAstraCLPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 27,
                              "src": "5973:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9437,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9430,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9407,
                                "src": "6001:6:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                  "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                                }
                              },
                              "id": 9431,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenIn",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8718,
                              "src": "6001:14:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 9432,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9407,
                                "src": "6017:6:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                  "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                                }
                              },
                              "id": 9433,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenOut",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8720,
                              "src": "6017:15:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 9434,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9407,
                                "src": "6034:6:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                  "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                                }
                              },
                              "id": 9435,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "fee",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8724,
                              "src": "6034:10:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            ],
                            "id": 9429,
                            "name": "getPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9175,
                            "src": "5993:7:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "function (address,address,uint24) view returns (contract IAstraCLPool)"
                            }
                          },
                          "id": 9436,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5993:52:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5973:72:75"
                      },
                      {
                        "assignments": [
                          9439
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9439,
                            "mutability": "mutable",
                            "name": "gasBefore",
                            "nodeType": "VariableDeclaration",
                            "scope": 9503,
                            "src": "6056:17:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9438,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6056:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9442,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9440,
                            "name": "gasleft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -7,
                            "src": "6076:7:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 9441,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6076:9:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6056:29:75"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 9482,
                              "nodeType": "Block",
                              "src": "6564:2:75",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 9483,
                            "nodeType": "TryCatchClause",
                            "src": "6564:2:75"
                          },
                          {
                            "block": {
                              "id": 9500,
                              "nodeType": "Block",
                              "src": "6595:122:75",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 9492,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 9487,
                                      "name": "gasEstimate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9417,
                                      "src": "6609:11:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 9491,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 9488,
                                        "name": "gasBefore",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9439,
                                        "src": "6623:9:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "id": 9489,
                                          "name": "gasleft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -7,
                                          "src": "6635:7:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                            "typeString": "function () view returns (uint256)"
                                          }
                                        },
                                        "id": 9490,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6635:9:75",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "6623:21:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "6609:35:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 9493,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6609:35:75"
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 9495,
                                        "name": "reason",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9485,
                                        "src": "6680:6:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "id": 9496,
                                        "name": "pool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9428,
                                        "src": "6688:4:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                          "typeString": "contract IAstraCLPool"
                                        }
                                      },
                                      {
                                        "id": 9497,
                                        "name": "gasEstimate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9417,
                                        "src": "6694:11:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                          "typeString": "contract IAstraCLPool"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 9494,
                                      "name": "handleCLRevert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9404,
                                      "src": "6665:14:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_contract$_IAstraCLPool_$27_$_t_uint256_$returns$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                        "typeString": "function (bytes memory,contract IAstraCLPool,uint256) view returns (uint256,uint160,uint32,uint256)"
                                      }
                                    },
                                    "id": 9498,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6665:41:75",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                      "typeString": "tuple(uint256,uint160,uint32,uint256)"
                                    }
                                  },
                                  "functionReturnParameters": 9418,
                                  "id": 9499,
                                  "nodeType": "Return",
                                  "src": "6658:48:75"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 9501,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 9486,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 9485,
                                  "mutability": "mutable",
                                  "name": "reason",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 9501,
                                  "src": "6574:19:75",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 9484,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6574:5:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "6573:21:75"
                            },
                            "src": "6567:150:75"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 9447,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "6146:4:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_MixedRouteQuoterV1_$9660",
                                    "typeString": "contract MixedRouteQuoterV1"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_MixedRouteQuoterV1_$9660",
                                    "typeString": "contract MixedRouteQuoterV1"
                                  }
                                ],
                                "id": 9446,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6138:7:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 9445,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6138:7:75",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 9448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6138:13:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9449,
                              "name": "zeroForOne",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9420,
                              "src": "6219:10:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "expression": {
                                    "id": 9450,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9407,
                                    "src": "6247:6:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                      "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                                    }
                                  },
                                  "id": 9451,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "amountIn",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8722,
                                  "src": "6247:15:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 9452,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1112,
                                "src": "6247:24:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 9453,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6247:26:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 9457,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 9454,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9407,
                                    "src": "6291:6:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                      "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                                    }
                                  },
                                  "id": 9455,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sqrtPriceLimitX96",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8726,
                                  "src": "6291:24:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 9456,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6319:1:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "6291:29:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "expression": {
                                  "id": 9469,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9407,
                                  "src": "6438:6:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                    "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                                  }
                                },
                                "id": 9470,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sqrtPriceLimitX96",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8726,
                                "src": "6438:24:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "id": 9471,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "6291:171:75",
                              "trueExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "id": 9458,
                                      "name": "zeroForOne",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9420,
                                      "src": "6344:10:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 9466,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 9463,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "6387:8:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 9464,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MAX_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1390,
                                        "src": "6387:23:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 9465,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6413:1:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "6387:27:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "id": 9467,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "6344:70:75",
                                    "trueExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 9462,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 9459,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "6357:8:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 9460,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MIN_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1386,
                                        "src": "6357:23:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 9461,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6383:1:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "6357:27:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  }
                                ],
                                "id": 9468,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "6343:72:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 9474,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9407,
                                    "src": "6497:6:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                      "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                                    }
                                  },
                                  "id": 9475,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenIn",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8718,
                                  "src": "6497:14:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 9476,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9407,
                                    "src": "6513:6:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                      "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                                    }
                                  },
                                  "id": 9477,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "fee",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8724,
                                  "src": "6513:10:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 9478,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9407,
                                    "src": "6525:6:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                      "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                                    }
                                  },
                                  "id": 9479,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenOut",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8720,
                                  "src": "6525:15:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 9472,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "6480:3:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 9473,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "6480:16:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 9480,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6480:61:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 9443,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9428,
                              "src": "6111:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 9444,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 118,
                            "src": "6111:9:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            }
                          },
                          "id": 9481,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6111:444:75",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "id": 9502,
                        "nodeType": "TryStatement",
                        "src": "6095:622:75"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9405,
                    "nodeType": "StructuredDocumentation",
                    "src": "5556:54:75",
                    "text": "@dev Fetch an exactIn quote for a CL Pool on chain"
                  },
                  "functionSelector": "5bccbdf7",
                  "id": 9504,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInputSingleCL",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9409,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "5716:8:75"
                  },
                  "parameters": {
                    "id": 9408,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9407,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 9504,
                        "src": "5648:43:75",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                          "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams"
                        },
                        "typeName": {
                          "id": 9406,
                          "name": "QuoteExactInputSingleCLParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8727,
                          "src": "5648:29:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_storage_ptr",
                            "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5647:45:75"
                  },
                  "returnParameters": {
                    "id": 9418,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9411,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 9504,
                        "src": "5755:17:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9410,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5755:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9413,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96After",
                        "nodeType": "VariableDeclaration",
                        "scope": 9504,
                        "src": "5786:25:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 9412,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "5786:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9415,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossed",
                        "nodeType": "VariableDeclaration",
                        "scope": 9504,
                        "src": "5825:30:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 9414,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5825:6:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9417,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 9504,
                        "src": "5869:19:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9416,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5869:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5741:157:75"
                  },
                  "scope": 9660,
                  "src": "5615:1108:75",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    8756
                  ],
                  "body": {
                    "id": 9524,
                    "nodeType": "Block",
                    "src": "6966:95:75",
                    "statements": [
                      {
                        "expression": {
                          "id": 9522,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9513,
                            "name": "amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9511,
                            "src": "6976:9:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 9515,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9507,
                                  "src": "7005:6:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_QuoteExactInputSingleClassicParams_$8734_memory_ptr",
                                    "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams memory"
                                  }
                                },
                                "id": 9516,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amountIn",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8733,
                                "src": "7005:15:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "expression": {
                                  "id": 9517,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9507,
                                  "src": "7022:6:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_QuoteExactInputSingleClassicParams_$8734_memory_ptr",
                                    "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams memory"
                                  }
                                },
                                "id": 9518,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "tokenIn",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8729,
                                "src": "7022:14:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "expression": {
                                  "id": 9519,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9507,
                                  "src": "7038:6:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_QuoteExactInputSingleClassicParams_$8734_memory_ptr",
                                    "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams memory"
                                  }
                                },
                                "id": 9520,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "tokenOut",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8731,
                                "src": "7038:15:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 9514,
                              "name": "getPairAmountOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9206,
                              "src": "6988:16:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (uint256,address,address) view returns (uint256)"
                              }
                            },
                            "id": 9521,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6988:66:75",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6976:78:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9523,
                        "nodeType": "ExpressionStatement",
                        "src": "6976:78:75"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9505,
                    "nodeType": "StructuredDocumentation",
                    "src": "6729:59:75",
                    "text": "@dev Fetch an exactIn quote for a Classic pair on chain"
                  },
                  "functionSelector": "6f9fbc82",
                  "id": 9525,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInputSingleClassic",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9509,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "6917:8:75"
                  },
                  "parameters": {
                    "id": 9508,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9507,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 9525,
                        "src": "6831:48:75",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_QuoteExactInputSingleClassicParams_$8734_memory_ptr",
                          "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams"
                        },
                        "typeName": {
                          "id": 9506,
                          "name": "QuoteExactInputSingleClassicParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8734,
                          "src": "6831:34:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_QuoteExactInputSingleClassicParams_$8734_storage_ptr",
                            "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6830:50:75"
                  },
                  "returnParameters": {
                    "id": 9512,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9511,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 9525,
                        "src": "6943:17:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9510,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6943:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6942:19:75"
                  },
                  "scope": 9660,
                  "src": "6793:268:75",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    8716
                  ],
                  "body": {
                    "id": 9658,
                    "nodeType": "Block",
                    "src": "7604:1775:75",
                    "statements": [
                      {
                        "expression": {
                          "id": 9552,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9544,
                            "name": "CLSqrtPriceX96AfterList",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9537,
                            "src": "7614:23:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                              "typeString": "uint160[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 9548,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9528,
                                    "src": "7654:4:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 9549,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "numPools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3894,
                                  "src": "7654:13:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (uint256)"
                                  }
                                },
                                "id": 9550,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7654:15:75",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 9547,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "7640:13:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint160_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (uint160[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 9545,
                                  "name": "uint160",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7644:7:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "id": 9546,
                                "nodeType": "ArrayTypeName",
                                "src": "7644:9:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                                  "typeString": "uint160[]"
                                }
                              }
                            },
                            "id": 9551,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7640:30:75",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                              "typeString": "uint160[] memory"
                            }
                          },
                          "src": "7614:56:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                            "typeString": "uint160[] memory"
                          }
                        },
                        "id": 9553,
                        "nodeType": "ExpressionStatement",
                        "src": "7614:56:75"
                      },
                      {
                        "expression": {
                          "id": 9562,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9554,
                            "name": "CLInitializedTicksCrossedList",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9540,
                            "src": "7680:29:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 9558,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9528,
                                    "src": "7725:4:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 9559,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "numPools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3894,
                                  "src": "7725:13:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (uint256)"
                                  }
                                },
                                "id": 9560,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7725:15:75",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 9557,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "7712:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (uint32[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 9555,
                                  "name": "uint32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7716:6:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "id": 9556,
                                "nodeType": "ArrayTypeName",
                                "src": "7716:8:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                  "typeString": "uint32[]"
                                }
                              }
                            },
                            "id": 9561,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7712:29:75",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "src": "7680:61:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        },
                        "id": 9563,
                        "nodeType": "ExpressionStatement",
                        "src": "7680:61:75"
                      },
                      {
                        "assignments": [
                          9565
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9565,
                            "mutability": "mutable",
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 9658,
                            "src": "7752:9:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9564,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7752:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9567,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 9566,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7764:1:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7752:13:75"
                      },
                      {
                        "body": {
                          "id": 9656,
                          "nodeType": "Block",
                          "src": "7788:1585:75",
                          "statements": [
                            {
                              "assignments": [
                                9570,
                                9572,
                                9574
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 9570,
                                  "mutability": "mutable",
                                  "name": "tokenIn",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 9656,
                                  "src": "7803:15:75",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 9569,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7803:7:75",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 9572,
                                  "mutability": "mutable",
                                  "name": "tokenOut",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 9656,
                                  "src": "7820:16:75",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 9571,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7820:7:75",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 9574,
                                  "mutability": "mutable",
                                  "name": "fee",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 9656,
                                  "src": "7838:10:75",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  "typeName": {
                                    "id": 9573,
                                    "name": "uint24",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7838:6:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint24",
                                      "typeString": "uint24"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 9578,
                              "initialValue": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 9575,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9528,
                                    "src": "7852:4:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 9576,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decodeFirstPool",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3928,
                                  "src": "7852:20:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                                  }
                                },
                                "id": 9577,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7852:22:75",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                                  "typeString": "tuple(address,address,uint24)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7802:72:75"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint24",
                                  "typeString": "uint24"
                                },
                                "id": 9583,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  "id": 9581,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 9579,
                                    "name": "fee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9574,
                                    "src": "7893:3:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint24",
                                      "typeString": "uint24"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "id": 9580,
                                    "name": "flagBitmask",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9129,
                                    "src": "7899:11:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint24",
                                      "typeString": "uint24"
                                    }
                                  },
                                  "src": "7893:17:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 9582,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7914:1:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "7893:22:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 9633,
                                "nodeType": "Block",
                                "src": "8129:931:75",
                                "statements": [
                                  {
                                    "assignments": [
                                      9596,
                                      9598,
                                      9600,
                                      9602
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 9596,
                                        "mutability": "mutable",
                                        "name": "_amountOut",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 9633,
                                        "src": "8253:18:75",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "typeName": {
                                          "id": 9595,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "8253:7:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "visibility": "internal"
                                      },
                                      {
                                        "constant": false,
                                        "id": 9598,
                                        "mutability": "mutable",
                                        "name": "_sqrtPriceX96After",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 9633,
                                        "src": "8293:26:75",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        "typeName": {
                                          "id": 9597,
                                          "name": "uint160",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "8293:7:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint160",
                                            "typeString": "uint160"
                                          }
                                        },
                                        "visibility": "internal"
                                      },
                                      {
                                        "constant": false,
                                        "id": 9600,
                                        "mutability": "mutable",
                                        "name": "_initializedTicksCrossed",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 9633,
                                        "src": "8341:31:75",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        },
                                        "typeName": {
                                          "id": 9599,
                                          "name": "uint32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "8341:6:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        },
                                        "visibility": "internal"
                                      },
                                      {
                                        "constant": false,
                                        "id": 9602,
                                        "mutability": "mutable",
                                        "name": "_gasEstimate",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 9633,
                                        "src": "8394:20:75",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "typeName": {
                                          "id": 9601,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "8394:7:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 9612,
                                    "initialValue": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "id": 9605,
                                              "name": "tokenIn",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 9570,
                                              "src": "8573:7:75",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            {
                                              "id": 9606,
                                              "name": "tokenOut",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 9572,
                                              "src": "8620:8:75",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            {
                                              "id": 9607,
                                              "name": "fee",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 9574,
                                              "src": "8663:3:75",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint24",
                                                "typeString": "uint24"
                                              }
                                            },
                                            {
                                              "id": 9608,
                                              "name": "amountIn",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 9530,
                                              "src": "8706:8:75",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            {
                                              "hexValue": "30",
                                              "id": 9609,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "8763:1:75",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                              },
                                              "value": "0"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              },
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              },
                                              {
                                                "typeIdentifier": "t_uint24",
                                                "typeString": "uint24"
                                              },
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                              }
                                            ],
                                            "id": 9604,
                                            "name": "QuoteExactInputSingleCLParams",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8727,
                                            "src": "8504:29:75",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_struct$_QuoteExactInputSingleCLParams_$8727_storage_ptr_$",
                                              "typeString": "type(struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams storage pointer)"
                                            }
                                          },
                                          "id": 9610,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "structConstructorCall",
                                          "lValueRequested": false,
                                          "names": [
                                            "tokenIn",
                                            "tokenOut",
                                            "fee",
                                            "amountIn",
                                            "sqrtPriceLimitX96"
                                          ],
                                          "nodeType": "FunctionCall",
                                          "src": "8504:287:75",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                            "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr",
                                            "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory"
                                          }
                                        ],
                                        "id": 9603,
                                        "name": "quoteExactInputSingleCL",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9504,
                                        "src": "8455:23:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_QuoteExactInputSingleCLParams_$8727_memory_ptr_$returns$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                          "typeString": "function (struct IMixedRouteQuoterV1.QuoteExactInputSingleCLParams memory) returns (uint256,uint160,uint32,uint256)"
                                        }
                                      },
                                      "id": 9611,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8455:358:75",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint160,uint32,uint256)"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "8231:582:75"
                                  },
                                  {
                                    "expression": {
                                      "id": 9617,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 9613,
                                          "name": "CLSqrtPriceX96AfterList",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9537,
                                          "src": "8831:23:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                                            "typeString": "uint160[] memory"
                                          }
                                        },
                                        "id": 9615,
                                        "indexExpression": {
                                          "id": 9614,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9565,
                                          "src": "8855:1:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "8831:26:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 9616,
                                        "name": "_sqrtPriceX96After",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9598,
                                        "src": "8860:18:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "src": "8831:47:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "id": 9618,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8831:47:75"
                                  },
                                  {
                                    "expression": {
                                      "id": 9623,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 9619,
                                          "name": "CLInitializedTicksCrossedList",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9540,
                                          "src": "8896:29:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                            "typeString": "uint32[] memory"
                                          }
                                        },
                                        "id": 9621,
                                        "indexExpression": {
                                          "id": 9620,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9565,
                                          "src": "8926:1:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "8896:32:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 9622,
                                        "name": "_initializedTicksCrossed",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9600,
                                        "src": "8931:24:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      },
                                      "src": "8896:59:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    },
                                    "id": 9624,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8896:59:75"
                                  },
                                  {
                                    "expression": {
                                      "id": 9627,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 9625,
                                        "name": "CLSwapGasEstimate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9542,
                                        "src": "8973:17:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "id": 9626,
                                        "name": "_gasEstimate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9602,
                                        "src": "8994:12:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8973:33:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 9628,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8973:33:75"
                                  },
                                  {
                                    "expression": {
                                      "id": 9631,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 9629,
                                        "name": "amountIn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9530,
                                        "src": "9024:8:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 9630,
                                        "name": "_amountOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9596,
                                        "src": "9035:10:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "9024:21:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 9632,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9024:21:75"
                                  }
                                ]
                              },
                              "id": 9634,
                              "nodeType": "IfStatement",
                              "src": "7889:1171:75",
                              "trueBody": {
                                "id": 9594,
                                "nodeType": "Block",
                                "src": "7917:206:75",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 9592,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 9584,
                                        "name": "amountIn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9530,
                                        "src": "7935:8:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "id": 9587,
                                                "name": "tokenIn",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 9570,
                                                "src": "8041:7:75",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              {
                                                "id": 9588,
                                                "name": "tokenOut",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 9572,
                                                "src": "8060:8:75",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              {
                                                "id": 9589,
                                                "name": "amountIn",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 9530,
                                                "src": "8080:8:75",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "id": 9586,
                                              "name": "QuoteExactInputSingleClassicParams",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8734,
                                              "src": "7996:34:75",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_struct$_QuoteExactInputSingleClassicParams_$8734_storage_ptr_$",
                                                "typeString": "type(struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams storage pointer)"
                                              }
                                            },
                                            "id": 9590,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "structConstructorCall",
                                            "lValueRequested": false,
                                            "names": [
                                              "tokenIn",
                                              "tokenOut",
                                              "amountIn"
                                            ],
                                            "nodeType": "FunctionCall",
                                            "src": "7996:94:75",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_QuoteExactInputSingleClassicParams_$8734_memory_ptr",
                                              "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_struct$_QuoteExactInputSingleClassicParams_$8734_memory_ptr",
                                              "typeString": "struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams memory"
                                            }
                                          ],
                                          "id": 9585,
                                          "name": "quoteExactInputSingleClassic",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9525,
                                          "src": "7946:28:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_view$_t_struct$_QuoteExactInputSingleClassicParams_$8734_memory_ptr_$returns$_t_uint256_$",
                                            "typeString": "function (struct IMixedRouteQuoterV1.QuoteExactInputSingleClassicParams memory) view returns (uint256)"
                                          }
                                        },
                                        "id": 9591,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7946:162:75",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7935:173:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 9593,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7935:173:75"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "id": 9636,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "9073:3:75",
                                "subExpression": {
                                  "id": 9635,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9565,
                                  "src": "9073:1:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9637,
                              "nodeType": "ExpressionStatement",
                              "src": "9073:3:75"
                            },
                            {
                              "condition": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 9638,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9528,
                                    "src": "9151:4:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 9639,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "hasMultiplePools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3876,
                                  "src": "9151:21:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (bool)"
                                  }
                                },
                                "id": 9640,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9151:23:75",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 9654,
                                "nodeType": "Block",
                                "src": "9238:125:75",
                                "statements": [
                                  {
                                    "expression": {
                                      "components": [
                                        {
                                          "id": 9648,
                                          "name": "amountIn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9530,
                                          "src": "9264:8:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 9649,
                                          "name": "CLSqrtPriceX96AfterList",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9537,
                                          "src": "9274:23:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                                            "typeString": "uint160[] memory"
                                          }
                                        },
                                        {
                                          "id": 9650,
                                          "name": "CLInitializedTicksCrossedList",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9540,
                                          "src": "9299:29:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                            "typeString": "uint32[] memory"
                                          }
                                        },
                                        {
                                          "id": 9651,
                                          "name": "CLSwapGasEstimate",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9542,
                                          "src": "9330:17:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 9652,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "9263:85:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint160_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint160[] memory,uint32[] memory,uint256)"
                                      }
                                    },
                                    "functionReturnParameters": 9543,
                                    "id": 9653,
                                    "nodeType": "Return",
                                    "src": "9256:92:75"
                                  }
                                ]
                              },
                              "id": 9655,
                              "nodeType": "IfStatement",
                              "src": "9147:216:75",
                              "trueBody": {
                                "id": 9647,
                                "nodeType": "Block",
                                "src": "9176:56:75",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 9645,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 9641,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9528,
                                        "src": "9194:4:75",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "id": 9642,
                                            "name": "path",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 9528,
                                            "src": "9201:4:75",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 9643,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "skipToken",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3961,
                                          "src": "9201:14:75",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                            "typeString": "function (bytes memory) pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 9644,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9201:16:75",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "src": "9194:23:75",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 9646,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9194:23:75"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "hexValue": "74727565",
                          "id": 9568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7782:4:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "id": 9657,
                        "nodeType": "WhileStatement",
                        "src": "7775:1598:75"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9526,
                    "nodeType": "StructuredDocumentation",
                    "src": "7067:224:75",
                    "text": "@dev Get the quote for an exactIn swap between an array of Classic and/or CL pools\n @notice To encode a Classic pair within the path, use 0x800000 (hex value of 8388608) for the fee between the two token addresses"
                  },
                  "functionSelector": "cdca1753",
                  "id": 9659,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInput",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9532,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "7381:8:75"
                  },
                  "parameters": {
                    "id": 9531,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9528,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 9659,
                        "src": "7321:17:75",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 9527,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7321:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9530,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 9659,
                        "src": "7340:16:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9529,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7340:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7320:37:75"
                  },
                  "returnParameters": {
                    "id": 9543,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9534,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 9659,
                        "src": "7420:17:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9533,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7420:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9537,
                        "mutability": "mutable",
                        "name": "CLSqrtPriceX96AfterList",
                        "nodeType": "VariableDeclaration",
                        "scope": 9659,
                        "src": "7451:40:75",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                          "typeString": "uint160[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9535,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "7451:7:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "id": 9536,
                          "nodeType": "ArrayTypeName",
                          "src": "7451:9:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                            "typeString": "uint160[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9540,
                        "mutability": "mutable",
                        "name": "CLInitializedTicksCrossedList",
                        "nodeType": "VariableDeclaration",
                        "scope": 9659,
                        "src": "7505:45:75",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 9538,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "7505:6:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 9539,
                          "nodeType": "ArrayTypeName",
                          "src": "7505:8:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9542,
                        "mutability": "mutable",
                        "name": "CLSwapGasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 9659,
                        "src": "7564:25:75",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9541,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7564:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7406:193:75"
                  },
                  "scope": 9660,
                  "src": "7296:2083:75",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 9661,
              "src": "1466:7915:75"
            }
          ],
          "src": "45:9337:75"
        },
        "id": 75
      },
      "contracts/lens/Quoter.sol": {
        "ast": {
          "absolutePath": "contracts/lens/Quoter.sol",
          "exportedSymbols": {
            "BytesLib": [
              3178
            ],
            "CallbackValidation": [
              3240
            ],
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "IAstraCLSwapCallback": [
              41
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IQuoter": [
              8942
            ],
            "Path": [
              3962
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PoolAddress": [
              4054
            ],
            "Quoter": [
              10131
            ],
            "SafeCast": [
              1113
            ],
            "TickMath": [
              1904
            ]
          },
          "id": 10132,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9662,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:76"
            },
            {
              "id": 9663,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:76"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "id": 9664,
              "nodeType": "ImportDirective",
              "scope": 10132,
              "sourceUnit": 2035,
              "src": "90:79:76",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol",
              "id": 9665,
              "nodeType": "ImportDirective",
              "scope": 10132,
              "sourceUnit": 1114,
              "src": "170:64:76",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/TickMath.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/TickMath.sol",
              "id": 9666,
              "nodeType": "ImportDirective",
              "scope": 10132,
              "sourceUnit": 1905,
              "src": "235:64:76",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "id": 9667,
              "nodeType": "ImportDirective",
              "scope": 10132,
              "sourceUnit": 28,
              "src": "300:69:76",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol",
              "id": 9668,
              "nodeType": "ImportDirective",
              "scope": 10132,
              "sourceUnit": 42,
              "src": "370:86:76",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/Path.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/Path.sol",
              "id": 9669,
              "nodeType": "ImportDirective",
              "scope": 10132,
              "sourceUnit": 3963,
              "src": "457:65:76",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
              "id": 9670,
              "nodeType": "ImportDirective",
              "scope": 10132,
              "sourceUnit": 4055,
              "src": "523:72:76",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol",
              "id": 9671,
              "nodeType": "ImportDirective",
              "scope": 10132,
              "sourceUnit": 3241,
              "src": "596:79:76",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IQuoter.sol",
              "file": "../interfaces/IQuoter.sol",
              "id": 9672,
              "nodeType": "ImportDirective",
              "scope": 10132,
              "sourceUnit": 8943,
              "src": "677:35:76",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9674,
                    "name": "IQuoter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8942,
                    "src": "1046:7:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IQuoter_$8942",
                      "typeString": "contract IQuoter"
                    }
                  },
                  "id": 9675,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1046:7:76"
                },
                {
                  "baseName": {
                    "id": 9676,
                    "name": "IAstraCLSwapCallback",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 41,
                    "src": "1055:20:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLSwapCallback_$41",
                      "typeString": "contract IAstraCLSwapCallback"
                    }
                  },
                  "id": 9677,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1055:20:76"
                },
                {
                  "baseName": {
                    "id": 9678,
                    "name": "PeripheryImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2034,
                    "src": "1077:23:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryImmutableState_$2034",
                      "typeString": "contract PeripheryImmutableState"
                    }
                  },
                  "id": 9679,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1077:23:76"
                }
              ],
              "contractDependencies": [
                41,
                2034,
                2872,
                8942
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 9673,
                "nodeType": "StructuredDocumentation",
                "src": "714:313:76",
                "text": "@title Provides quotes for swaps\n @notice Allows getting the expected amount out or amount in for a given swap without executing the swap\n @dev These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute\n the swap and check the amounts in the callback."
              },
              "fullyImplemented": true,
              "id": 10131,
              "linearizedBaseContracts": [
                10131,
                2034,
                2872,
                41,
                8942
              ],
              "name": "Quoter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 9682,
                  "libraryName": {
                    "id": 9680,
                    "name": "Path",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3962,
                    "src": "1113:4:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Path_$3962",
                      "typeString": "library Path"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1107:21:76",
                  "typeName": {
                    "id": 9681,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1122:5:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  }
                },
                {
                  "id": 9685,
                  "libraryName": {
                    "id": 9683,
                    "name": "SafeCast",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1113,
                    "src": "1139:8:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeCast_$1113",
                      "typeString": "library SafeCast"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1133:27:76",
                  "typeName": {
                    "id": 9684,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1152:7:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 9686,
                    "nodeType": "StructuredDocumentation",
                    "src": "1166:91:76",
                    "text": "@dev Transient storage variable used to check a safety condition in exact output swaps."
                  },
                  "id": 9688,
                  "mutability": "mutable",
                  "name": "amountOutCached",
                  "nodeType": "VariableDeclaration",
                  "scope": 10131,
                  "src": "1262:31:76",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9687,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1262:7:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 9699,
                    "nodeType": "Block",
                    "src": "1386:2:76",
                    "statements": []
                  },
                  "id": 9700,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 9695,
                          "name": "_factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9690,
                          "src": "1369:8:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 9696,
                          "name": "_SAMB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9692,
                          "src": "1379:5:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 9697,
                      "modifierName": {
                        "id": 9694,
                        "name": "PeripheryImmutableState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2034,
                        "src": "1345:23:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PeripheryImmutableState_$2034_$",
                          "typeString": "type(contract PeripheryImmutableState)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1345:40:76"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9693,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9690,
                        "mutability": "mutable",
                        "name": "_factory",
                        "nodeType": "VariableDeclaration",
                        "scope": 9700,
                        "src": "1312:16:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9689,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1312:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9692,
                        "mutability": "mutable",
                        "name": "_SAMB",
                        "nodeType": "VariableDeclaration",
                        "scope": 9700,
                        "src": "1330:13:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9691,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1330:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1311:33:76"
                  },
                  "returnParameters": {
                    "id": 9698,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1386:0:76"
                  },
                  "scope": 10131,
                  "src": "1300:88:76",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9724,
                    "nodeType": "Block",
                    "src": "1521:118:76",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 9714,
                                  "name": "factory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2013,
                                  "src": "1578:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 9717,
                                      "name": "tokenA",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9702,
                                      "src": "1610:6:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 9718,
                                      "name": "tokenB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9704,
                                      "src": "1618:6:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 9719,
                                      "name": "fee",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9706,
                                      "src": "1626:3:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      }
                                    ],
                                    "expression": {
                                      "id": 9715,
                                      "name": "PoolAddress",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4054,
                                      "src": "1587:11:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                        "typeString": "type(library PoolAddress)"
                                      }
                                    },
                                    "id": 9716,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "getPoolKey",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4006,
                                    "src": "1587:22:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint24_$returns$_t_struct$_PoolKey_$3975_memory_ptr_$",
                                      "typeString": "function (address,address,uint24) pure returns (struct PoolAddress.PoolKey memory)"
                                    }
                                  },
                                  "id": 9720,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1587:43:76",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                ],
                                "expression": {
                                  "id": 9712,
                                  "name": "PoolAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4054,
                                  "src": "1551:11:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                    "typeString": "type(library PoolAddress)"
                                  }
                                },
                                "id": 9713,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "computeAddress",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4053,
                                "src": "1551:26:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$_t_struct$_PoolKey_$3975_memory_ptr_$returns$_t_address_$",
                                  "typeString": "function (address,struct PoolAddress.PoolKey memory) pure returns (address)"
                                }
                              },
                              "id": 9721,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1551:80:76",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 9711,
                            "name": "IAstraCLPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27,
                            "src": "1538:12:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "type(contract IAstraCLPool)"
                            }
                          },
                          "id": 9722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1538:94:76",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "functionReturnParameters": 9710,
                        "id": 9723,
                        "nodeType": "Return",
                        "src": "1531:101:76"
                      }
                    ]
                  },
                  "id": 9725,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPool",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9707,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9702,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 9725,
                        "src": "1420:14:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9701,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1420:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9704,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 9725,
                        "src": "1444:14:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9703,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1444:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9706,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 9725,
                        "src": "1468:10:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 9705,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1468:6:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1410:74:76"
                  },
                  "returnParameters": {
                    "id": 9710,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9709,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 9725,
                        "src": "1507:12:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 9708,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "1507:12:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1506:14:76"
                  },
                  "scope": 10131,
                  "src": "1394:245:76",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    40
                  ],
                  "body": {
                    "id": 9818,
                    "nodeType": "Block",
                    "src": "1829:1100:76",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 9743,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 9739,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9737,
                                  "name": "amount0Delta",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9728,
                                  "src": "1847:12:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 9738,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1862:1:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "1847:16:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 9742,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9740,
                                  "name": "amount1Delta",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9730,
                                  "src": "1867:12:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 9741,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1882:1:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "1867:16:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1847:36:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 9736,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1839:7:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 9744,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1839:45:76",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9745,
                        "nodeType": "ExpressionStatement",
                        "src": "1839:45:76"
                      },
                      {
                        "assignments": [
                          9747,
                          9749,
                          9751
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9747,
                            "mutability": "mutable",
                            "name": "tokenIn",
                            "nodeType": "VariableDeclaration",
                            "scope": 9818,
                            "src": "1958:15:76",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 9746,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1958:7:76",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 9749,
                            "mutability": "mutable",
                            "name": "tokenOut",
                            "nodeType": "VariableDeclaration",
                            "scope": 9818,
                            "src": "1975:16:76",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 9748,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1975:7:76",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 9751,
                            "mutability": "mutable",
                            "name": "fee",
                            "nodeType": "VariableDeclaration",
                            "scope": 9818,
                            "src": "1993:10:76",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            },
                            "typeName": {
                              "id": 9750,
                              "name": "uint24",
                              "nodeType": "ElementaryTypeName",
                              "src": "1993:6:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9755,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 9752,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9732,
                              "src": "2007:4:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 9753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "decodeFirstPool",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3928,
                            "src": "2007:20:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                            }
                          },
                          "id": 9754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2007:22:76",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                            "typeString": "tuple(address,address,uint24)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1957:72:76"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9759,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2013,
                              "src": "2073:7:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9760,
                              "name": "tokenIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9747,
                              "src": "2082:7:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9761,
                              "name": "tokenOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9749,
                              "src": "2091:8:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9762,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9751,
                              "src": "2101:3:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            ],
                            "expression": {
                              "id": 9756,
                              "name": "CallbackValidation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3240,
                              "src": "2039:18:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_CallbackValidation_$3240_$",
                                "typeString": "type(library CallbackValidation)"
                              }
                            },
                            "id": 9758,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "verifyCallback",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3208,
                            "src": "2039:33:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "function (address,address,address,uint24) view returns (contract IAstraCLPool)"
                            }
                          },
                          "id": 9763,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2039:66:76",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "id": 9764,
                        "nodeType": "ExpressionStatement",
                        "src": "2039:66:76"
                      },
                      {
                        "assignments": [
                          9766,
                          9768,
                          9770
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9766,
                            "mutability": "mutable",
                            "name": "isExactInput",
                            "nodeType": "VariableDeclaration",
                            "scope": 9818,
                            "src": "2117:17:76",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 9765,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2117:4:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 9768,
                            "mutability": "mutable",
                            "name": "amountToPay",
                            "nodeType": "VariableDeclaration",
                            "scope": 9818,
                            "src": "2136:19:76",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9767,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2136:7:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 9770,
                            "mutability": "mutable",
                            "name": "amountReceived",
                            "nodeType": "VariableDeclaration",
                            "scope": 9818,
                            "src": "2157:22:76",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9769,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2157:7:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9801,
                        "initialValue": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "id": 9773,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 9771,
                              "name": "amount0Delta",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9728,
                              "src": "2195:12:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 9772,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2210:1:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "2195:16:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 9789,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9787,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9749,
                                  "src": "2317:8:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 9788,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9747,
                                  "src": "2328:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2317:18:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 9792,
                                    "name": "amount1Delta",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9730,
                                    "src": "2345:12:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9791,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2337:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 9790,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2337:7:76",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 9793,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2337:21:76",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 9797,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "2368:13:76",
                                    "subExpression": {
                                      "id": 9796,
                                      "name": "amount0Delta",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9728,
                                      "src": "2369:12:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9795,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2360:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 9794,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2360:7:76",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 9798,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2360:22:76",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 9799,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "2316:67:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(bool,uint256,uint256)"
                            }
                          },
                          "id": 9800,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "2195:188:76",
                          "trueExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 9776,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9774,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9747,
                                  "src": "2231:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 9775,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9749,
                                  "src": "2241:8:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2231:18:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 9779,
                                    "name": "amount0Delta",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9728,
                                    "src": "2259:12:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9778,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2251:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 9777,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2251:7:76",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 9780,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2251:21:76",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 9784,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "2282:13:76",
                                    "subExpression": {
                                      "id": 9783,
                                      "name": "amount1Delta",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9730,
                                      "src": "2283:12:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9782,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2274:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 9781,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2274:7:76",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 9785,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2274:22:76",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 9786,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "2230:67:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(bool,uint256,uint256)"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2116:267:76"
                      },
                      {
                        "condition": {
                          "id": 9802,
                          "name": "isExactInput",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9766,
                          "src": "2397:12:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 9816,
                          "nodeType": "Block",
                          "src": "2580:343:76",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 9807,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9805,
                                  "name": "amountOutCached",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9688,
                                  "src": "2699:15:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 9806,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2718:1:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2699:20:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 9814,
                              "nodeType": "IfStatement",
                              "src": "2695:68:76",
                              "trueBody": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 9811,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 9809,
                                        "name": "amountReceived",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9770,
                                        "src": "2729:14:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "id": 9810,
                                        "name": "amountOutCached",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9688,
                                        "src": "2747:15:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "2729:33:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    ],
                                    "id": 9808,
                                    "name": "require",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -18,
                                      -18
                                    ],
                                    "referencedDeclaration": -18,
                                    "src": "2721:7:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                      "typeString": "function (bool) pure"
                                    }
                                  },
                                  "id": 9812,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2721:42:76",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 9813,
                                "nodeType": "ExpressionStatement",
                                "src": "2721:42:76"
                              }
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "2786:127:76",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2804:22:76",
                                    "value": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2821:4:76",
                                          "type": "",
                                          "value": "0x40"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "2815:5:76"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2815:11:76"
                                    },
                                    "variables": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulTypedName",
                                        "src": "2808:3:76",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2850:3:76"
                                        },
                                        {
                                          "name": "amountToPay",
                                          "nodeType": "YulIdentifier",
                                          "src": "2855:11:76"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2843:6:76"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2843:24:76"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2843:24:76"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2891:3:76"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2896:2:76",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2884:6:76"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2884:15:76"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2884:15:76"
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 9768,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "2855:11:76",
                                  "valueSize": 1
                                }
                              ],
                              "id": 9815,
                              "nodeType": "InlineAssembly",
                              "src": "2777:136:76"
                            }
                          ]
                        },
                        "id": 9817,
                        "nodeType": "IfStatement",
                        "src": "2393:530:76",
                        "trueBody": {
                          "id": 9804,
                          "nodeType": "Block",
                          "src": "2411:163:76",
                          "statements": [
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "2434:130:76",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2452:22:76",
                                    "value": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2469:4:76",
                                          "type": "",
                                          "value": "0x40"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "2463:5:76"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2463:11:76"
                                    },
                                    "variables": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulTypedName",
                                        "src": "2456:3:76",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2498:3:76"
                                        },
                                        {
                                          "name": "amountReceived",
                                          "nodeType": "YulIdentifier",
                                          "src": "2503:14:76"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2491:6:76"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2491:27:76"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2491:27:76"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2542:3:76"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2547:2:76",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2535:6:76"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2535:15:76"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2535:15:76"
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 9770,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "2503:14:76",
                                  "valueSize": 1
                                }
                              ],
                              "id": 9803,
                              "nodeType": "InlineAssembly",
                              "src": "2425:139:76"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9726,
                    "nodeType": "StructuredDocumentation",
                    "src": "1645:36:76",
                    "text": "@inheritdoc IAstraCLSwapCallback"
                  },
                  "functionSelector": "11c17848",
                  "id": 9819,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "astraCLSwapCallback",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9734,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1820:8:76"
                  },
                  "parameters": {
                    "id": 9733,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9728,
                        "mutability": "mutable",
                        "name": "amount0Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 9819,
                        "src": "1724:19:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9727,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1724:6:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9730,
                        "mutability": "mutable",
                        "name": "amount1Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 9819,
                        "src": "1753:19:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9729,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1753:6:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9732,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 9819,
                        "src": "1782:17:76",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 9731,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1782:5:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1714:91:76"
                  },
                  "returnParameters": {
                    "id": 9735,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1829:0:76"
                  },
                  "scope": 10131,
                  "src": "1686:1243:76",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9861,
                    "nodeType": "Block",
                    "src": "3088:293:76",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9830,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 9827,
                              "name": "reason",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9822,
                              "src": "3102:6:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 9828,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "3102:13:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 9829,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3119:2:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "3102:19:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9852,
                        "nodeType": "IfStatement",
                        "src": "3098:231:76",
                        "trueBody": {
                          "id": 9851,
                          "nodeType": "Block",
                          "src": "3123:206:76",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 9834,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 9831,
                                    "name": "reason",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9822,
                                    "src": "3141:6:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 9832,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "3141:13:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "3638",
                                  "id": 9833,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3157:2:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_68_by_1",
                                    "typeString": "int_const 68"
                                  },
                                  "value": "68"
                                },
                                "src": "3141:18:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 9839,
                              "nodeType": "IfStatement",
                              "src": "3137:50:76",
                              "trueBody": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "hexValue": "556e6578706563746564206572726f72",
                                      "id": 9836,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3168:18:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff",
                                        "typeString": "literal_string \"Unexpected error\""
                                      },
                                      "value": "Unexpected error"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff",
                                        "typeString": "literal_string \"Unexpected error\""
                                      }
                                    ],
                                    "id": 9835,
                                    "name": "revert",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -19,
                                      -19
                                    ],
                                    "referencedDeclaration": -19,
                                    "src": "3161:6:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                      "typeString": "function (string memory) pure"
                                    }
                                  },
                                  "id": 9837,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3161:26:76",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 9838,
                                "nodeType": "ExpressionStatement",
                                "src": "3161:26:76"
                              }
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "3210:59:76",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3228:27:76",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "reason",
                                          "nodeType": "YulIdentifier",
                                          "src": "3242:6:76"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3250:4:76",
                                          "type": "",
                                          "value": "0x04"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3238:3:76"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3238:17:76"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "reason",
                                        "nodeType": "YulIdentifier",
                                        "src": "3228:6:76"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 9822,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "3228:6:76",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 9822,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "3242:6:76",
                                  "valueSize": 1
                                }
                              ],
                              "id": 9840,
                              "nodeType": "InlineAssembly",
                              "src": "3201:68:76"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 9844,
                                        "name": "reason",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9822,
                                        "src": "3300:6:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "components": [
                                          {
                                            "id": 9846,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "3309:6:76",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                              "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                              "id": 9845,
                                              "name": "string",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "3309:6:76",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "id": 9847,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "3308:8:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      ],
                                      "expression": {
                                        "id": 9842,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "3289:3:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 9843,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "src": "3289:10:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 9848,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3289:28:76",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 9841,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "3282:6:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 9849,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3282:36:76",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9850,
                              "nodeType": "ExpressionStatement",
                              "src": "3282:36:76"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9855,
                              "name": "reason",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9822,
                              "src": "3356:6:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 9857,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3365:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 9856,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3365:7:76",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "id": 9858,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "3364:9:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              }
                            ],
                            "expression": {
                              "id": 9853,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "3345:3:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 9854,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "3345:10:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 9859,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3345:29:76",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 9826,
                        "id": 9860,
                        "nodeType": "Return",
                        "src": "3338:36:76"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9820,
                    "nodeType": "StructuredDocumentation",
                    "src": "2935:69:76",
                    "text": "@dev Parses a revert reason that should contain the numeric quote"
                  },
                  "id": 9862,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseRevertReason",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9823,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9822,
                        "mutability": "mutable",
                        "name": "reason",
                        "nodeType": "VariableDeclaration",
                        "scope": 9862,
                        "src": "3036:19:76",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 9821,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3036:5:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3035:21:76"
                  },
                  "returnParameters": {
                    "id": 9826,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9825,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 9862,
                        "src": "3079:7:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9824,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3079:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3078:9:76"
                  },
                  "scope": 10131,
                  "src": "3009:372:76",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    8915
                  ],
                  "body": {
                    "id": 9934,
                    "nodeType": "Block",
                    "src": "3628:605:76",
                    "statements": [
                      {
                        "assignments": [
                          9880
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9880,
                            "mutability": "mutable",
                            "name": "zeroForOne",
                            "nodeType": "VariableDeclaration",
                            "scope": 9934,
                            "src": "3638:15:76",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 9879,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3638:4:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9884,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9883,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9881,
                            "name": "tokenIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9865,
                            "src": "3656:7:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 9882,
                            "name": "tokenOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9867,
                            "src": "3666:8:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3656:18:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3638:36:76"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 9922,
                              "nodeType": "Block",
                              "src": "4139:2:76",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 9923,
                            "nodeType": "TryCatchClause",
                            "src": "4139:2:76"
                          },
                          {
                            "block": {
                              "id": 9931,
                              "nodeType": "Block",
                              "src": "4170:57:76",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 9928,
                                        "name": "reason",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9925,
                                        "src": "4209:6:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 9927,
                                      "name": "parseRevertReason",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9862,
                                      "src": "4191:17:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                                        "typeString": "function (bytes memory) pure returns (uint256)"
                                      }
                                    },
                                    "id": 9929,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4191:25:76",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "functionReturnParameters": 9878,
                                  "id": 9930,
                                  "nodeType": "Return",
                                  "src": "4184:32:76"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 9932,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 9926,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 9925,
                                  "mutability": "mutable",
                                  "name": "reason",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 9932,
                                  "src": "4149:19:76",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 9924,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4149:5:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "4148:21:76"
                            },
                            "src": "4142:85:76"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 9893,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "3763:4:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Quoter_$10131",
                                    "typeString": "contract Quoter"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Quoter_$10131",
                                    "typeString": "contract Quoter"
                                  }
                                ],
                                "id": 9892,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3755:7:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 9891,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3755:7:76",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 9894,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3755:13:76",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9895,
                              "name": "zeroForOne",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9880,
                              "src": "3836:10:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 9896,
                                  "name": "amountIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9871,
                                  "src": "3864:8:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 9897,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1112,
                                "src": "3864:17:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 9898,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3864:19:76",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 9901,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9899,
                                  "name": "sqrtPriceLimitX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9873,
                                  "src": "3901:17:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 9900,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3922:1:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3901:22:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "id": 9913,
                                "name": "sqrtPriceLimitX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9873,
                                "src": "4041:17:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "id": 9914,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "3901:157:76",
                              "trueExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "id": 9902,
                                      "name": "zeroForOne",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9880,
                                      "src": "3947:10:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 9910,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 9907,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "3990:8:76",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 9908,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MAX_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1390,
                                        "src": "3990:23:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 9909,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "4016:1:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "3990:27:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "id": 9911,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "3947:70:76",
                                    "trueExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 9906,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 9903,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "3960:8:76",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 9904,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MIN_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1386,
                                        "src": "3960:23:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 9905,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3986:1:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "3960:27:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  }
                                ],
                                "id": 9912,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3946:72:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 9917,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9865,
                                  "src": "4093:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 9918,
                                  "name": "fee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9869,
                                  "src": "4102:3:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                },
                                {
                                  "id": 9919,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9867,
                                  "src": "4107:8:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 9915,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "4076:3:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 9916,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "4076:16:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 9920,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4076:40:76",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 9886,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9865,
                                  "src": "3709:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 9887,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9867,
                                  "src": "3718:8:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 9888,
                                  "name": "fee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9869,
                                  "src": "3728:3:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                ],
                                "id": 9885,
                                "name": "getPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9725,
                                "src": "3701:7:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "function (address,address,uint24) view returns (contract IAstraCLPool)"
                                }
                              },
                              "id": 9889,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3701:31:76",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 9890,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 118,
                            "src": "3701:36:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            }
                          },
                          "id": 9921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3701:429:76",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "id": 9933,
                        "nodeType": "TryStatement",
                        "src": "3685:542:76"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9863,
                    "nodeType": "StructuredDocumentation",
                    "src": "3387:23:76",
                    "text": "@inheritdoc IQuoter"
                  },
                  "functionSelector": "f7729d43",
                  "id": 9935,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInputSingle",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9875,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3591:8:76"
                  },
                  "parameters": {
                    "id": 9874,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9865,
                        "mutability": "mutable",
                        "name": "tokenIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 9935,
                        "src": "3455:15:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9864,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3455:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9867,
                        "mutability": "mutable",
                        "name": "tokenOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 9935,
                        "src": "3480:16:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9866,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3480:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9869,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 9935,
                        "src": "3506:10:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 9868,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3506:6:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9871,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 9935,
                        "src": "3526:16:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9870,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3526:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9873,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 9935,
                        "src": "3552:25:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 9872,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "3552:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3445:138:76"
                  },
                  "returnParameters": {
                    "id": 9878,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9877,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 9935,
                        "src": "3609:17:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9876,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3609:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3608:19:76"
                  },
                  "scope": 10131,
                  "src": "3415:818:76",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    8899
                  ],
                  "body": {
                    "id": 9987,
                    "nodeType": "Block",
                    "src": "4375:552:76",
                    "statements": [
                      {
                        "body": {
                          "id": 9985,
                          "nodeType": "Block",
                          "src": "4398:523:76",
                          "statements": [
                            {
                              "assignments": [
                                9948
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 9948,
                                  "mutability": "mutable",
                                  "name": "hasMultiplePools",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 9985,
                                  "src": "4412:21:76",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 9947,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4412:4:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 9952,
                              "initialValue": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 9949,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9938,
                                    "src": "4436:4:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 9950,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "hasMultiplePools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3876,
                                  "src": "4436:21:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (bool)"
                                  }
                                },
                                "id": 9951,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4436:23:76",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "4412:47:76"
                            },
                            {
                              "assignments": [
                                9954,
                                9956,
                                9958
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 9954,
                                  "mutability": "mutable",
                                  "name": "tokenIn",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 9985,
                                  "src": "4475:15:76",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 9953,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4475:7:76",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 9956,
                                  "mutability": "mutable",
                                  "name": "tokenOut",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 9985,
                                  "src": "4492:16:76",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 9955,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4492:7:76",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 9958,
                                  "mutability": "mutable",
                                  "name": "fee",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 9985,
                                  "src": "4510:10:76",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  "typeName": {
                                    "id": 9957,
                                    "name": "uint24",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4510:6:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint24",
                                      "typeString": "uint24"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 9962,
                              "initialValue": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 9959,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9938,
                                    "src": "4524:4:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 9960,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decodeFirstPool",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3928,
                                  "src": "4524:20:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                                  }
                                },
                                "id": 9961,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4524:22:76",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                                  "typeString": "tuple(address,address,uint24)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "4474:72:76"
                            },
                            {
                              "expression": {
                                "id": 9971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 9963,
                                  "name": "amountIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9940,
                                  "src": "4640:8:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 9965,
                                      "name": "tokenIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9954,
                                      "src": "4673:7:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 9966,
                                      "name": "tokenOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9956,
                                      "src": "4682:8:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 9967,
                                      "name": "fee",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9958,
                                      "src": "4692:3:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      }
                                    },
                                    {
                                      "id": 9968,
                                      "name": "amountIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9940,
                                      "src": "4697:8:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "hexValue": "30",
                                      "id": 9969,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4707:1:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 9964,
                                    "name": "quoteExactInputSingle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9935,
                                    "src": "4651:21:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint24_$_t_uint256_$_t_uint160_$returns$_t_uint256_$",
                                      "typeString": "function (address,address,uint24,uint256,uint160) returns (uint256)"
                                    }
                                  },
                                  "id": 9970,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4651:58:76",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4640:69:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9972,
                              "nodeType": "ExpressionStatement",
                              "src": "4640:69:76"
                            },
                            {
                              "condition": {
                                "id": 9973,
                                "name": "hasMultiplePools",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9948,
                                "src": "4783:16:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 9983,
                                "nodeType": "Block",
                                "src": "4863:48:76",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 9981,
                                      "name": "amountIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9940,
                                      "src": "4888:8:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "functionReturnParameters": 9945,
                                    "id": 9982,
                                    "nodeType": "Return",
                                    "src": "4881:15:76"
                                  }
                                ]
                              },
                              "id": 9984,
                              "nodeType": "IfStatement",
                              "src": "4779:132:76",
                              "trueBody": {
                                "id": 9980,
                                "nodeType": "Block",
                                "src": "4801:56:76",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 9978,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 9974,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9938,
                                        "src": "4819:4:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "id": 9975,
                                            "name": "path",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 9938,
                                            "src": "4826:4:76",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 9976,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "skipToken",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3961,
                                          "src": "4826:14:76",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                            "typeString": "function (bytes memory) pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 9977,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4826:16:76",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "src": "4819:23:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 9979,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4819:23:76"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "hexValue": "74727565",
                          "id": 9946,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4392:4:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "id": 9986,
                        "nodeType": "WhileStatement",
                        "src": "4385:536:76"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9936,
                    "nodeType": "StructuredDocumentation",
                    "src": "4239:23:76",
                    "text": "@inheritdoc IQuoter"
                  },
                  "functionSelector": "cdca1753",
                  "id": 9988,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInput",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9942,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4338:8:76"
                  },
                  "parameters": {
                    "id": 9941,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9938,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 9988,
                        "src": "4292:17:76",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 9937,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4292:5:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9940,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 9988,
                        "src": "4311:16:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9939,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4311:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4291:37:76"
                  },
                  "returnParameters": {
                    "id": 9945,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9944,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 9988,
                        "src": "4356:17:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9943,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4356:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4355:19:76"
                  },
                  "scope": 10131,
                  "src": "4267:660:76",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8941
                  ],
                  "body": {
                    "id": 10076,
                    "nodeType": "Block",
                    "src": "5175:860:76",
                    "statements": [
                      {
                        "assignments": [
                          10006
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10006,
                            "mutability": "mutable",
                            "name": "zeroForOne",
                            "nodeType": "VariableDeclaration",
                            "scope": 10076,
                            "src": "5185:15:76",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 10005,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5185:4:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10010,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 10009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10007,
                            "name": "tokenIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9991,
                            "src": "5203:7:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 10008,
                            "name": "tokenOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9993,
                            "src": "5213:8:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5203:18:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5185:36:76"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 10013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10011,
                            "name": "sqrtPriceLimitX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9999,
                            "src": "5345:17:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 10012,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5366:1:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5345:22:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10018,
                        "nodeType": "IfStatement",
                        "src": "5341:55:76",
                        "trueBody": {
                          "expression": {
                            "id": 10016,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 10014,
                              "name": "amountOutCached",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9688,
                              "src": "5369:15:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "id": 10015,
                              "name": "amountOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9997,
                              "src": "5387:9:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5369:27:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10017,
                          "nodeType": "ExpressionStatement",
                          "src": "5369:27:76"
                        }
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 10057,
                              "nodeType": "Block",
                              "src": "5862:2:76",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 10058,
                            "nodeType": "TryCatchClause",
                            "src": "5862:2:76"
                          },
                          {
                            "block": {
                              "id": 10073,
                              "nodeType": "Block",
                              "src": "5893:136:76",
                              "statements": [
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    "id": 10064,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 10062,
                                      "name": "sqrtPriceLimitX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9999,
                                      "src": "5911:17:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 10063,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5932:1:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "5911:22:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 10068,
                                  "nodeType": "IfStatement",
                                  "src": "5907:50:76",
                                  "trueBody": {
                                    "expression": {
                                      "id": 10066,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "delete",
                                      "prefix": true,
                                      "src": "5935:22:76",
                                      "subExpression": {
                                        "id": 10065,
                                        "name": "amountOutCached",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9688,
                                        "src": "5942:15:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 10067,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5935:22:76"
                                  }
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 10070,
                                        "name": "reason",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10060,
                                        "src": "6011:6:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 10069,
                                      "name": "parseRevertReason",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9862,
                                      "src": "5993:17:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                                        "typeString": "function (bytes memory) pure returns (uint256)"
                                      }
                                    },
                                    "id": 10071,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5993:25:76",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "functionReturnParameters": 10004,
                                  "id": 10072,
                                  "nodeType": "Return",
                                  "src": "5986:32:76"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 10074,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 10061,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 10060,
                                  "mutability": "mutable",
                                  "name": "reason",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10074,
                                  "src": "5872:19:76",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 10059,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5872:5:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "5871:21:76"
                            },
                            "src": "5865:164:76"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 10027,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "5484:4:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Quoter_$10131",
                                    "typeString": "contract Quoter"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Quoter_$10131",
                                    "typeString": "contract Quoter"
                                  }
                                ],
                                "id": 10026,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5476:7:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 10025,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5476:7:76",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 10028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5476:13:76",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10029,
                              "name": "zeroForOne",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10006,
                              "src": "5557:10:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 10033,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "5585:21:76",
                              "subExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10030,
                                    "name": "amountOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9997,
                                    "src": "5586:9:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 10031,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toInt256",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1112,
                                  "src": "5586:18:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256) pure returns (int256)"
                                  }
                                },
                                "id": 10032,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5586:20:76",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 10036,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 10034,
                                  "name": "sqrtPriceLimitX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9999,
                                  "src": "5624:17:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 10035,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5645:1:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "5624:22:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "id": 10048,
                                "name": "sqrtPriceLimitX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9999,
                                "src": "5764:17:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "id": 10049,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "5624:157:76",
                              "trueExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "id": 10037,
                                      "name": "zeroForOne",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10006,
                                      "src": "5670:10:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 10045,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 10042,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "5713:8:76",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 10043,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MAX_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1390,
                                        "src": "5713:23:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 10044,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5739:1:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "5713:27:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "id": 10046,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "5670:70:76",
                                    "trueExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 10041,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 10038,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "5683:8:76",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 10039,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MIN_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1386,
                                        "src": "5683:23:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 10040,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5709:1:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "5683:27:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  }
                                ],
                                "id": 10047,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5669:72:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 10052,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9993,
                                  "src": "5816:8:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 10053,
                                  "name": "fee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9995,
                                  "src": "5826:3:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                },
                                {
                                  "id": 10054,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9991,
                                  "src": "5831:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 10050,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "5799:3:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 10051,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "5799:16:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 10055,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5799:40:76",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 10020,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9991,
                                  "src": "5430:7:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 10021,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9993,
                                  "src": "5439:8:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 10022,
                                  "name": "fee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9995,
                                  "src": "5449:3:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                ],
                                "id": 10019,
                                "name": "getPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9725,
                                "src": "5422:7:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "function (address,address,uint24) view returns (contract IAstraCLPool)"
                                }
                              },
                              "id": 10023,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5422:31:76",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 10024,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 118,
                            "src": "5422:36:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            }
                          },
                          "id": 10056,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5422:431:76",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "id": 10075,
                        "nodeType": "TryStatement",
                        "src": "5406:623:76"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9989,
                    "nodeType": "StructuredDocumentation",
                    "src": "4933:23:76",
                    "text": "@inheritdoc IQuoter"
                  },
                  "functionSelector": "30d07f21",
                  "id": 10077,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactOutputSingle",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10001,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "5139:8:76"
                  },
                  "parameters": {
                    "id": 10000,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9991,
                        "mutability": "mutable",
                        "name": "tokenIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 10077,
                        "src": "5002:15:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9990,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5002:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9993,
                        "mutability": "mutable",
                        "name": "tokenOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 10077,
                        "src": "5027:16:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9992,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5027:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9995,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 10077,
                        "src": "5053:10:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 9994,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "5053:6:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9997,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 10077,
                        "src": "5073:17:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9996,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5073:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9999,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 10077,
                        "src": "5100:25:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 9998,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "5100:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4992:139:76"
                  },
                  "returnParameters": {
                    "id": 10004,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10003,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 10077,
                        "src": "5157:16:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10002,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5157:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5156:18:76"
                  },
                  "scope": 10131,
                  "src": "4961:1074:76",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    8925
                  ],
                  "body": {
                    "id": 10129,
                    "nodeType": "Block",
                    "src": "6178:556:76",
                    "statements": [
                      {
                        "body": {
                          "id": 10127,
                          "nodeType": "Block",
                          "src": "6201:527:76",
                          "statements": [
                            {
                              "assignments": [
                                10090
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 10090,
                                  "mutability": "mutable",
                                  "name": "hasMultiplePools",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10127,
                                  "src": "6215:21:76",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 10089,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6215:4:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 10094,
                              "initialValue": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10091,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10080,
                                    "src": "6239:4:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 10092,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "hasMultiplePools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3876,
                                  "src": "6239:21:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (bool)"
                                  }
                                },
                                "id": 10093,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6239:23:76",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6215:47:76"
                            },
                            {
                              "assignments": [
                                10096,
                                10098,
                                10100
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 10096,
                                  "mutability": "mutable",
                                  "name": "tokenOut",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10127,
                                  "src": "6278:16:76",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 10095,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6278:7:76",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10098,
                                  "mutability": "mutable",
                                  "name": "tokenIn",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10127,
                                  "src": "6296:15:76",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 10097,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6296:7:76",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10100,
                                  "mutability": "mutable",
                                  "name": "fee",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10127,
                                  "src": "6313:10:76",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  "typeName": {
                                    "id": 10099,
                                    "name": "uint24",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6313:6:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint24",
                                      "typeString": "uint24"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 10104,
                              "initialValue": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10101,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10080,
                                    "src": "6327:4:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 10102,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decodeFirstPool",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3928,
                                  "src": "6327:20:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                                  }
                                },
                                "id": 10103,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6327:22:76",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                                  "typeString": "tuple(address,address,uint24)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6277:72:76"
                            },
                            {
                              "expression": {
                                "id": 10113,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 10105,
                                  "name": "amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10082,
                                  "src": "6443:9:76",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 10107,
                                      "name": "tokenIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10098,
                                      "src": "6478:7:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 10108,
                                      "name": "tokenOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10096,
                                      "src": "6487:8:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 10109,
                                      "name": "fee",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10100,
                                      "src": "6497:3:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      }
                                    },
                                    {
                                      "id": 10110,
                                      "name": "amountOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10082,
                                      "src": "6502:9:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "hexValue": "30",
                                      "id": 10111,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6513:1:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 10106,
                                    "name": "quoteExactOutputSingle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10077,
                                    "src": "6455:22:76",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint24_$_t_uint256_$_t_uint160_$returns$_t_uint256_$",
                                      "typeString": "function (address,address,uint24,uint256,uint160) returns (uint256)"
                                    }
                                  },
                                  "id": 10112,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6455:60:76",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6443:72:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10114,
                              "nodeType": "ExpressionStatement",
                              "src": "6443:72:76"
                            },
                            {
                              "condition": {
                                "id": 10115,
                                "name": "hasMultiplePools",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10090,
                                "src": "6589:16:76",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 10125,
                                "nodeType": "Block",
                                "src": "6669:49:76",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 10123,
                                      "name": "amountOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10082,
                                      "src": "6694:9:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "functionReturnParameters": 10087,
                                    "id": 10124,
                                    "nodeType": "Return",
                                    "src": "6687:16:76"
                                  }
                                ]
                              },
                              "id": 10126,
                              "nodeType": "IfStatement",
                              "src": "6585:133:76",
                              "trueBody": {
                                "id": 10122,
                                "nodeType": "Block",
                                "src": "6607:56:76",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 10120,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 10116,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10080,
                                        "src": "6625:4:76",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "id": 10117,
                                            "name": "path",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10080,
                                            "src": "6632:4:76",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 10118,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "skipToken",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3961,
                                          "src": "6632:14:76",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                            "typeString": "function (bytes memory) pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 10119,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6632:16:76",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "src": "6625:23:76",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 10121,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6625:23:76"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "hexValue": "74727565",
                          "id": 10088,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6195:4:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "id": 10128,
                        "nodeType": "WhileStatement",
                        "src": "6188:540:76"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 10078,
                    "nodeType": "StructuredDocumentation",
                    "src": "6041:23:76",
                    "text": "@inheritdoc IQuoter"
                  },
                  "functionSelector": "2f80bb1d",
                  "id": 10130,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactOutput",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10084,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "6142:8:76"
                  },
                  "parameters": {
                    "id": 10083,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10080,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 10130,
                        "src": "6095:17:76",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 10079,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6095:5:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10082,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 10130,
                        "src": "6114:17:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10081,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6114:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6094:38:76"
                  },
                  "returnParameters": {
                    "id": 10087,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10086,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 10130,
                        "src": "6160:16:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10085,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6160:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6159:18:76"
                  },
                  "scope": 10131,
                  "src": "6069:665:76",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 10132,
              "src": "1027:5709:76"
            }
          ],
          "src": "45:6692:76"
        },
        "id": 76
      },
      "contracts/lens/QuoterV2.sol": {
        "ast": {
          "absolutePath": "contracts/lens/QuoterV2.sol",
          "exportedSymbols": {
            "BitMath": [
              740
            ],
            "BytesLib": [
              3178
            ],
            "CallbackValidation": [
              3240
            ],
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "IAstraCLSwapCallback": [
              41
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IQuoterV2": [
              9033
            ],
            "Path": [
              3962
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PoolAddress": [
              4054
            ],
            "PoolTicksCounter": [
              11986
            ],
            "QuoterV2": [
              10864
            ],
            "SafeCast": [
              1113
            ],
            "TickBitmap": [
              1369
            ],
            "TickMath": [
              1904
            ]
          },
          "id": 10865,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10133,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:77"
            },
            {
              "id": 10134,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:77"
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "id": 10135,
              "nodeType": "ImportDirective",
              "scope": 10865,
              "sourceUnit": 2035,
              "src": "90:79:77",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol",
              "id": 10136,
              "nodeType": "ImportDirective",
              "scope": 10865,
              "sourceUnit": 1114,
              "src": "170:64:77",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/TickMath.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/TickMath.sol",
              "id": 10137,
              "nodeType": "ImportDirective",
              "scope": 10865,
              "sourceUnit": 1905,
              "src": "235:64:77",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/TickBitmap.sol",
              "id": 10138,
              "nodeType": "ImportDirective",
              "scope": 10865,
              "sourceUnit": 1370,
              "src": "300:66:77",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "id": 10139,
              "nodeType": "ImportDirective",
              "scope": 10865,
              "sourceUnit": 28,
              "src": "367:69:77",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol",
              "id": 10140,
              "nodeType": "ImportDirective",
              "scope": 10865,
              "sourceUnit": 42,
              "src": "437:86:77",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/Path.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/Path.sol",
              "id": 10141,
              "nodeType": "ImportDirective",
              "scope": 10865,
              "sourceUnit": 3963,
              "src": "524:65:77",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/PoolAddress.sol",
              "id": 10142,
              "nodeType": "ImportDirective",
              "scope": 10865,
              "sourceUnit": 4055,
              "src": "590:72:77",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol",
              "file": "@airdao/astra-cl-periphery/contracts/libraries/CallbackValidation.sol",
              "id": 10143,
              "nodeType": "ImportDirective",
              "scope": 10865,
              "sourceUnit": 3241,
              "src": "663:79:77",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IQuoterV2.sol",
              "file": "../interfaces/IQuoterV2.sol",
              "id": 10144,
              "nodeType": "ImportDirective",
              "scope": 10865,
              "sourceUnit": 9034,
              "src": "744:37:77",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/libraries/PoolTicksCounter.sol",
              "file": "../libraries/PoolTicksCounter.sol",
              "id": 10145,
              "nodeType": "ImportDirective",
              "scope": 10865,
              "sourceUnit": 11987,
              "src": "782:43:77",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10147,
                    "name": "IQuoterV2",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9033,
                    "src": "1161:9:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IQuoterV2_$9033",
                      "typeString": "contract IQuoterV2"
                    }
                  },
                  "id": 10148,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1161:9:77"
                },
                {
                  "baseName": {
                    "id": 10149,
                    "name": "IAstraCLSwapCallback",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 41,
                    "src": "1172:20:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLSwapCallback_$41",
                      "typeString": "contract IAstraCLSwapCallback"
                    }
                  },
                  "id": 10150,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1172:20:77"
                },
                {
                  "baseName": {
                    "id": 10151,
                    "name": "PeripheryImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2034,
                    "src": "1194:23:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PeripheryImmutableState_$2034",
                      "typeString": "contract PeripheryImmutableState"
                    }
                  },
                  "id": 10152,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1194:23:77"
                }
              ],
              "contractDependencies": [
                41,
                2034,
                2872,
                9033
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 10146,
                "nodeType": "StructuredDocumentation",
                "src": "827:313:77",
                "text": "@title Provides quotes for swaps\n @notice Allows getting the expected amount out or amount in for a given swap without executing the swap\n @dev These functions are not gas efficient and should _not_ be called on chain. Instead, optimistically execute\n the swap and check the amounts in the callback."
              },
              "fullyImplemented": true,
              "id": 10864,
              "linearizedBaseContracts": [
                10864,
                2034,
                2872,
                41,
                9033
              ],
              "name": "QuoterV2",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 10155,
                  "libraryName": {
                    "id": 10153,
                    "name": "Path",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3962,
                    "src": "1230:4:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Path_$3962",
                      "typeString": "library Path"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1224:21:77",
                  "typeName": {
                    "id": 10154,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1239:5:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  }
                },
                {
                  "id": 10158,
                  "libraryName": {
                    "id": 10156,
                    "name": "SafeCast",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1113,
                    "src": "1256:8:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeCast_$1113",
                      "typeString": "library SafeCast"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1250:27:77",
                  "typeName": {
                    "id": 10157,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1269:7:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 10161,
                  "libraryName": {
                    "id": 10159,
                    "name": "PoolTicksCounter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 11986,
                    "src": "1288:16:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PoolTicksCounter_$11986",
                      "typeString": "library PoolTicksCounter"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1282:40:77",
                  "typeName": {
                    "id": 10160,
                    "name": "IAstraCLPool",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27,
                    "src": "1309:12:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                      "typeString": "contract IAstraCLPool"
                    }
                  }
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 10162,
                    "nodeType": "StructuredDocumentation",
                    "src": "1328:91:77",
                    "text": "@dev Transient storage variable used to check a safety condition in exact output swaps."
                  },
                  "id": 10164,
                  "mutability": "mutable",
                  "name": "amountOutCached",
                  "nodeType": "VariableDeclaration",
                  "scope": 10864,
                  "src": "1424:31:77",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10163,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1424:7:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 10175,
                    "nodeType": "Block",
                    "src": "1550:2:77",
                    "statements": []
                  },
                  "id": 10176,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 10171,
                          "name": "_factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10166,
                          "src": "1532:8:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10172,
                          "name": "_WETH9",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10168,
                          "src": "1542:6:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10173,
                      "modifierName": {
                        "id": 10170,
                        "name": "PeripheryImmutableState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2034,
                        "src": "1508:23:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PeripheryImmutableState_$2034_$",
                          "typeString": "type(contract PeripheryImmutableState)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1508:41:77"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10169,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10166,
                        "mutability": "mutable",
                        "name": "_factory",
                        "nodeType": "VariableDeclaration",
                        "scope": 10176,
                        "src": "1474:16:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10165,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1474:7:77",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10168,
                        "mutability": "mutable",
                        "name": "_WETH9",
                        "nodeType": "VariableDeclaration",
                        "scope": 10176,
                        "src": "1492:14:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10167,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1492:7:77",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1473:34:77"
                  },
                  "returnParameters": {
                    "id": 10174,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1550:0:77"
                  },
                  "scope": 10864,
                  "src": "1462:90:77",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10200,
                    "nodeType": "Block",
                    "src": "1685:118:77",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 10190,
                                  "name": "factory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2013,
                                  "src": "1742:7:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 10193,
                                      "name": "tokenA",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10178,
                                      "src": "1774:6:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 10194,
                                      "name": "tokenB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10180,
                                      "src": "1782:6:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 10195,
                                      "name": "fee",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10182,
                                      "src": "1790:3:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint24",
                                        "typeString": "uint24"
                                      }
                                    ],
                                    "expression": {
                                      "id": 10191,
                                      "name": "PoolAddress",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4054,
                                      "src": "1751:11:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                        "typeString": "type(library PoolAddress)"
                                      }
                                    },
                                    "id": 10192,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "getPoolKey",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4006,
                                    "src": "1751:22:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint24_$returns$_t_struct$_PoolKey_$3975_memory_ptr_$",
                                      "typeString": "function (address,address,uint24) pure returns (struct PoolAddress.PoolKey memory)"
                                    }
                                  },
                                  "id": 10196,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1751:43:77",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_PoolKey_$3975_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                ],
                                "expression": {
                                  "id": 10188,
                                  "name": "PoolAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4054,
                                  "src": "1715:11:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4054_$",
                                    "typeString": "type(library PoolAddress)"
                                  }
                                },
                                "id": 10189,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "computeAddress",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4053,
                                "src": "1715:26:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$_t_struct$_PoolKey_$3975_memory_ptr_$returns$_t_address_$",
                                  "typeString": "function (address,struct PoolAddress.PoolKey memory) pure returns (address)"
                                }
                              },
                              "id": 10197,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1715:80:77",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 10187,
                            "name": "IAstraCLPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27,
                            "src": "1702:12:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "type(contract IAstraCLPool)"
                            }
                          },
                          "id": 10198,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1702:94:77",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "functionReturnParameters": 10186,
                        "id": 10199,
                        "nodeType": "Return",
                        "src": "1695:101:77"
                      }
                    ]
                  },
                  "id": 10201,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPool",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10183,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10178,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 10201,
                        "src": "1584:14:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10177,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1584:7:77",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10180,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 10201,
                        "src": "1608:14:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10179,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1608:7:77",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10182,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 10201,
                        "src": "1632:10:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 10181,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1632:6:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1574:74:77"
                  },
                  "returnParameters": {
                    "id": 10186,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10185,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 10201,
                        "src": "1671:12:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 10184,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "1671:12:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1670:14:77"
                  },
                  "scope": 10864,
                  "src": "1558:245:77",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    40
                  ],
                  "body": {
                    "id": 10310,
                    "nodeType": "Block",
                    "src": "1993:1458:77",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 10219,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 10215,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 10213,
                                  "name": "amount0Delta",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10204,
                                  "src": "2011:12:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 10214,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2026:1:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2011:16:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 10218,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 10216,
                                  "name": "amount1Delta",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10206,
                                  "src": "2031:12:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 10217,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2046:1:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2031:16:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2011:36:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 10212,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2003:7:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 10220,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2003:45:77",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10221,
                        "nodeType": "ExpressionStatement",
                        "src": "2003:45:77"
                      },
                      {
                        "assignments": [
                          10223,
                          10225,
                          10227
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10223,
                            "mutability": "mutable",
                            "name": "tokenIn",
                            "nodeType": "VariableDeclaration",
                            "scope": 10310,
                            "src": "2122:15:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 10222,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2122:7:77",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 10225,
                            "mutability": "mutable",
                            "name": "tokenOut",
                            "nodeType": "VariableDeclaration",
                            "scope": 10310,
                            "src": "2139:16:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 10224,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2139:7:77",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 10227,
                            "mutability": "mutable",
                            "name": "fee",
                            "nodeType": "VariableDeclaration",
                            "scope": 10310,
                            "src": "2157:10:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            },
                            "typeName": {
                              "id": 10226,
                              "name": "uint24",
                              "nodeType": "ElementaryTypeName",
                              "src": "2157:6:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10231,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 10228,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10208,
                              "src": "2171:4:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 10229,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "decodeFirstPool",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3928,
                            "src": "2171:20:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                            }
                          },
                          "id": 10230,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2171:22:77",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                            "typeString": "tuple(address,address,uint24)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2121:72:77"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10235,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2013,
                              "src": "2237:7:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10236,
                              "name": "tokenIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10223,
                              "src": "2246:7:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10237,
                              "name": "tokenOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10225,
                              "src": "2255:8:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10238,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10227,
                              "src": "2265:3:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            ],
                            "expression": {
                              "id": 10232,
                              "name": "CallbackValidation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3240,
                              "src": "2203:18:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_CallbackValidation_$3240_$",
                                "typeString": "type(library CallbackValidation)"
                              }
                            },
                            "id": 10234,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "verifyCallback",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3208,
                            "src": "2203:33:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "function (address,address,address,uint24) view returns (contract IAstraCLPool)"
                            }
                          },
                          "id": 10239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2203:66:77",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "id": 10240,
                        "nodeType": "ExpressionStatement",
                        "src": "2203:66:77"
                      },
                      {
                        "assignments": [
                          10242,
                          10244,
                          10246
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10242,
                            "mutability": "mutable",
                            "name": "isExactInput",
                            "nodeType": "VariableDeclaration",
                            "scope": 10310,
                            "src": "2281:17:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 10241,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2281:4:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 10244,
                            "mutability": "mutable",
                            "name": "amountToPay",
                            "nodeType": "VariableDeclaration",
                            "scope": 10310,
                            "src": "2300:19:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 10243,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2300:7:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 10246,
                            "mutability": "mutable",
                            "name": "amountReceived",
                            "nodeType": "VariableDeclaration",
                            "scope": 10310,
                            "src": "2321:22:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 10245,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2321:7:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10277,
                        "initialValue": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "id": 10249,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 10247,
                              "name": "amount0Delta",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10204,
                              "src": "2359:12:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 10248,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2374:1:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "2359:16:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 10265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 10263,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10225,
                                  "src": "2481:8:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 10264,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10223,
                                  "src": "2492:7:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2481:18:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 10268,
                                    "name": "amount1Delta",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10206,
                                    "src": "2509:12:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 10267,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2501:7:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 10266,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2501:7:77",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 10269,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2501:21:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 10273,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "2532:13:77",
                                    "subExpression": {
                                      "id": 10272,
                                      "name": "amount0Delta",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10204,
                                      "src": "2533:12:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 10271,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2524:7:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 10270,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2524:7:77",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 10274,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2524:22:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 10275,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "2480:67:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(bool,uint256,uint256)"
                            }
                          },
                          "id": 10276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "2359:188:77",
                          "trueExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 10252,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 10250,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10223,
                                  "src": "2395:7:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 10251,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10225,
                                  "src": "2405:8:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2395:18:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 10255,
                                    "name": "amount0Delta",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10204,
                                    "src": "2423:12:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 10254,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2415:7:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 10253,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2415:7:77",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 10256,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2415:21:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 10260,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "2446:13:77",
                                    "subExpression": {
                                      "id": 10259,
                                      "name": "amount1Delta",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10206,
                                      "src": "2447:12:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 10258,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2438:7:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 10257,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2438:7:77",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 10261,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2438:22:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 10262,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "2394:67:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(bool,uint256,uint256)"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2280:267:77"
                      },
                      {
                        "assignments": [
                          10279
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10279,
                            "mutability": "mutable",
                            "name": "pool",
                            "nodeType": "VariableDeclaration",
                            "scope": 10310,
                            "src": "2558:17:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            },
                            "typeName": {
                              "id": 10278,
                              "name": "IAstraCLPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 27,
                              "src": "2558:12:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10285,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 10281,
                              "name": "tokenIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10223,
                              "src": "2586:7:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10282,
                              "name": "tokenOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10225,
                              "src": "2595:8:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10283,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10227,
                              "src": "2605:3:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            ],
                            "id": 10280,
                            "name": "getPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10201,
                            "src": "2578:7:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "function (address,address,uint24) view returns (contract IAstraCLPool)"
                            }
                          },
                          "id": 10284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2578:31:77",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2558:51:77"
                      },
                      {
                        "assignments": [
                          10287,
                          10289,
                          null,
                          null,
                          null,
                          null,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10287,
                            "mutability": "mutable",
                            "name": "sqrtPriceX96After",
                            "nodeType": "VariableDeclaration",
                            "scope": 10310,
                            "src": "2620:25:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "typeName": {
                              "id": 10286,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "2620:7:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 10289,
                            "mutability": "mutable",
                            "name": "tickAfter",
                            "nodeType": "VariableDeclaration",
                            "scope": 10310,
                            "src": "2647:15:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 10288,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "2647:5:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          },
                          null,
                          null,
                          null,
                          null,
                          null
                        ],
                        "id": 10293,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 10290,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10279,
                              "src": "2676:4:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 10291,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "slot0",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 374,
                            "src": "2676:10:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                              "typeString": "function () view external returns (uint160,int24,uint16,uint16,uint16,uint8,bool)"
                            }
                          },
                          "id": 10292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2676:12:77",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                            "typeString": "tuple(uint160,int24,uint16,uint16,uint16,uint8,bool)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2619:69:77"
                      },
                      {
                        "condition": {
                          "id": 10294,
                          "name": "isExactInput",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10242,
                          "src": "2703:12:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 10308,
                          "nodeType": "Block",
                          "src": "2994:451:77",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 10299,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 10297,
                                  "name": "amountOutCached",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10164,
                                  "src": "3113:15:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 10298,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3132:1:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3113:20:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 10306,
                              "nodeType": "IfStatement",
                              "src": "3109:68:77",
                              "trueBody": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 10303,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 10301,
                                        "name": "amountReceived",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10246,
                                        "src": "3143:14:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "id": 10302,
                                        "name": "amountOutCached",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10164,
                                        "src": "3161:15:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3143:33:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    ],
                                    "id": 10300,
                                    "name": "require",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -18,
                                      -18
                                    ],
                                    "referencedDeclaration": -18,
                                    "src": "3135:7:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                      "typeString": "function (bool) pure"
                                    }
                                  },
                                  "id": 10304,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3135:42:77",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 10305,
                                "nodeType": "ExpressionStatement",
                                "src": "3135:42:77"
                              }
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "3200:235:77",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "3218:22:77",
                                    "value": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3235:4:77",
                                          "type": "",
                                          "value": "0x40"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "3229:5:77"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3229:11:77"
                                    },
                                    "variables": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulTypedName",
                                        "src": "3222:3:77",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "3264:3:77"
                                        },
                                        {
                                          "name": "amountToPay",
                                          "nodeType": "YulIdentifier",
                                          "src": "3269:11:77"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3257:6:77"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3257:24:77"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3257:24:77"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "3309:3:77"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "3314:4:77",
                                              "type": "",
                                              "value": "0x20"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "3305:3:77"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3305:14:77"
                                        },
                                        {
                                          "name": "sqrtPriceX96After",
                                          "nodeType": "YulIdentifier",
                                          "src": "3321:17:77"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3298:6:77"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3298:41:77"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3298:41:77"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "3367:3:77"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "3372:4:77",
                                              "type": "",
                                              "value": "0x40"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "3363:3:77"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3363:14:77"
                                        },
                                        {
                                          "name": "tickAfter",
                                          "nodeType": "YulIdentifier",
                                          "src": "3379:9:77"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3356:6:77"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3356:33:77"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3356:33:77"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "3413:3:77"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3418:2:77",
                                          "type": "",
                                          "value": "96"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3406:6:77"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3406:15:77"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3406:15:77"
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 10244,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "3269:11:77",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 10287,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "3321:17:77",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 10289,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "3379:9:77",
                                  "valueSize": 1
                                }
                              ],
                              "id": 10307,
                              "nodeType": "InlineAssembly",
                              "src": "3191:244:77"
                            }
                          ]
                        },
                        "id": 10309,
                        "nodeType": "IfStatement",
                        "src": "2699:746:77",
                        "trueBody": {
                          "id": 10296,
                          "nodeType": "Block",
                          "src": "2717:271:77",
                          "statements": [
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "2740:238:77",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2758:22:77",
                                    "value": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2775:4:77",
                                          "type": "",
                                          "value": "0x40"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "2769:5:77"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2769:11:77"
                                    },
                                    "variables": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulTypedName",
                                        "src": "2762:3:77",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2804:3:77"
                                        },
                                        {
                                          "name": "amountReceived",
                                          "nodeType": "YulIdentifier",
                                          "src": "2809:14:77"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2797:6:77"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2797:27:77"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2797:27:77"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "2852:3:77"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2857:4:77",
                                              "type": "",
                                              "value": "0x20"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "2848:3:77"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2848:14:77"
                                        },
                                        {
                                          "name": "sqrtPriceX96After",
                                          "nodeType": "YulIdentifier",
                                          "src": "2864:17:77"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2841:6:77"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2841:41:77"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2841:41:77"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "2910:3:77"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2915:4:77",
                                              "type": "",
                                              "value": "0x40"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "2906:3:77"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2906:14:77"
                                        },
                                        {
                                          "name": "tickAfter",
                                          "nodeType": "YulIdentifier",
                                          "src": "2922:9:77"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2899:6:77"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2899:33:77"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2899:33:77"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2956:3:77"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2961:2:77",
                                          "type": "",
                                          "value": "96"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2949:6:77"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2949:15:77"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2949:15:77"
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 10246,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "2809:14:77",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 10287,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "2864:17:77",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 10289,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "2922:9:77",
                                  "valueSize": 1
                                }
                              ],
                              "id": 10295,
                              "nodeType": "InlineAssembly",
                              "src": "2731:247:77"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 10202,
                    "nodeType": "StructuredDocumentation",
                    "src": "1809:36:77",
                    "text": "@inheritdoc IAstraCLSwapCallback"
                  },
                  "functionSelector": "11c17848",
                  "id": 10311,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "astraCLSwapCallback",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10210,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1984:8:77"
                  },
                  "parameters": {
                    "id": 10209,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10204,
                        "mutability": "mutable",
                        "name": "amount0Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 10311,
                        "src": "1888:19:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 10203,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1888:6:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10206,
                        "mutability": "mutable",
                        "name": "amount1Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 10311,
                        "src": "1917:19:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 10205,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1917:6:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10208,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 10311,
                        "src": "1946:17:77",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 10207,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1946:5:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1878:91:77"
                  },
                  "returnParameters": {
                    "id": 10211,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1993:0:77"
                  },
                  "scope": 10864,
                  "src": "1850:1601:77",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10361,
                    "nodeType": "Block",
                    "src": "3735:309:77",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 10323,
                              "name": "reason",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10314,
                              "src": "3749:6:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 10324,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "3749:13:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "3936",
                            "id": 10325,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3766:2:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_96_by_1",
                              "typeString": "int_const 96"
                            },
                            "value": "96"
                          },
                          "src": "3749:19:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10348,
                        "nodeType": "IfStatement",
                        "src": "3745:231:77",
                        "trueBody": {
                          "id": 10347,
                          "nodeType": "Block",
                          "src": "3770:206:77",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 10330,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 10327,
                                    "name": "reason",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10314,
                                    "src": "3788:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 10328,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "3788:13:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "3638",
                                  "id": 10329,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3804:2:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_68_by_1",
                                    "typeString": "int_const 68"
                                  },
                                  "value": "68"
                                },
                                "src": "3788:18:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 10335,
                              "nodeType": "IfStatement",
                              "src": "3784:50:77",
                              "trueBody": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "hexValue": "556e6578706563746564206572726f72",
                                      "id": 10332,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3815:18:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff",
                                        "typeString": "literal_string \"Unexpected error\""
                                      },
                                      "value": "Unexpected error"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff",
                                        "typeString": "literal_string \"Unexpected error\""
                                      }
                                    ],
                                    "id": 10331,
                                    "name": "revert",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -19,
                                      -19
                                    ],
                                    "referencedDeclaration": -19,
                                    "src": "3808:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                      "typeString": "function (string memory) pure"
                                    }
                                  },
                                  "id": 10333,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3808:26:77",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 10334,
                                "nodeType": "ExpressionStatement",
                                "src": "3808:26:77"
                              }
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "3857:59:77",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3875:27:77",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "reason",
                                          "nodeType": "YulIdentifier",
                                          "src": "3889:6:77"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3897:4:77",
                                          "type": "",
                                          "value": "0x04"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3885:3:77"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3885:17:77"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "reason",
                                        "nodeType": "YulIdentifier",
                                        "src": "3875:6:77"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 10314,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "3875:6:77",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 10314,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "3889:6:77",
                                  "valueSize": 1
                                }
                              ],
                              "id": 10336,
                              "nodeType": "InlineAssembly",
                              "src": "3848:68:77"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 10340,
                                        "name": "reason",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10314,
                                        "src": "3947:6:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "components": [
                                          {
                                            "id": 10342,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "3956:6:77",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                              "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                              "id": 10341,
                                              "name": "string",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "3956:6:77",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "id": 10343,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "3955:8:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      ],
                                      "expression": {
                                        "id": 10338,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "3936:3:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 10339,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "src": "3936:10:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 10344,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3936:28:77",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 10337,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "3929:6:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 10345,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3929:36:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 10346,
                              "nodeType": "ExpressionStatement",
                              "src": "3929:36:77"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10351,
                              "name": "reason",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10314,
                              "src": "4003:6:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 10353,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4012:7:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 10352,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4012:7:77",
                                    "typeDescriptions": {}
                                  }
                                },
                                {
                                  "id": 10355,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4021:7:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  },
                                  "typeName": {
                                    "id": 10354,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4021:7:77",
                                    "typeDescriptions": {}
                                  }
                                },
                                {
                                  "id": 10357,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4030:5:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_int24_$",
                                    "typeString": "type(int24)"
                                  },
                                  "typeName": {
                                    "id": 10356,
                                    "name": "int24",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4030:5:77",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "id": 10358,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "4011:25:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint160_$_$_t_type$_t_int24_$_$",
                                "typeString": "tuple(type(uint256),type(uint160),type(int24))"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint160_$_$_t_type$_t_int24_$_$",
                                "typeString": "tuple(type(uint256),type(uint160),type(int24))"
                              }
                            ],
                            "expression": {
                              "id": 10349,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "3992:3:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 10350,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "3992:10:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 10359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3992:45:77",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_int24_$",
                            "typeString": "tuple(uint256,uint160,int24)"
                          }
                        },
                        "functionReturnParameters": 10322,
                        "id": 10360,
                        "nodeType": "Return",
                        "src": "3985:52:77"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 10312,
                    "nodeType": "StructuredDocumentation",
                    "src": "3457:69:77",
                    "text": "@dev Parses a revert reason that should contain the numeric quote"
                  },
                  "id": 10362,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseRevertReason",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10315,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10314,
                        "mutability": "mutable",
                        "name": "reason",
                        "nodeType": "VariableDeclaration",
                        "scope": 10362,
                        "src": "3558:19:77",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 10313,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3558:5:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3557:21:77"
                  },
                  "returnParameters": {
                    "id": 10322,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10317,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 10362,
                        "src": "3638:14:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10316,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3638:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10319,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96After",
                        "nodeType": "VariableDeclaration",
                        "scope": 10362,
                        "src": "3666:25:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10318,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "3666:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10321,
                        "mutability": "mutable",
                        "name": "tickAfter",
                        "nodeType": "VariableDeclaration",
                        "scope": 10362,
                        "src": "3705:15:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 10320,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3705:5:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3624:106:77"
                  },
                  "scope": 10864,
                  "src": "3531:513:77",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 10415,
                    "nodeType": "Block",
                    "src": "4355:359:77",
                    "statements": [
                      {
                        "assignments": [
                          10380
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10380,
                            "mutability": "mutable",
                            "name": "tickBefore",
                            "nodeType": "VariableDeclaration",
                            "scope": 10415,
                            "src": "4365:16:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 10379,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "4365:5:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10381,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4365:16:77"
                      },
                      {
                        "assignments": [
                          10383
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10383,
                            "mutability": "mutable",
                            "name": "tickAfter",
                            "nodeType": "VariableDeclaration",
                            "scope": 10415,
                            "src": "4391:15:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 10382,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "4391:5:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10384,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4391:15:77"
                      },
                      {
                        "expression": {
                          "id": 10390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              null,
                              {
                                "id": 10385,
                                "name": "tickBefore",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10380,
                                "src": "4419:10:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              null,
                              null,
                              null,
                              null,
                              null
                            ],
                            "id": 10386,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "4416:24:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$_t_int24_$__$__$__$__$__$",
                              "typeString": "tuple(,int24,,,,,)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 10387,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10366,
                                "src": "4443:4:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                  "typeString": "contract IAstraCLPool"
                                }
                              },
                              "id": 10388,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "slot0",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 374,
                              "src": "4443:10:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                                "typeString": "function () view external returns (uint160,int24,uint16,uint16,uint16,uint8,bool)"
                              }
                            },
                            "id": 10389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4443:12:77",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                              "typeString": "tuple(uint160,int24,uint16,uint16,uint16,uint8,bool)"
                            }
                          },
                          "src": "4416:39:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10391,
                        "nodeType": "ExpressionStatement",
                        "src": "4416:39:77"
                      },
                      {
                        "expression": {
                          "id": 10399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 10392,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10371,
                                "src": "4466:6:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 10393,
                                "name": "sqrtPriceX96After",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10373,
                                "src": "4474:17:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "id": 10394,
                                "name": "tickAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10383,
                                "src": "4493:9:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              }
                            ],
                            "id": 10395,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "4465:38:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_int24_$",
                              "typeString": "tuple(uint256,uint160,int24)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 10397,
                                "name": "reason",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10364,
                                "src": "4524:6:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 10396,
                              "name": "parseRevertReason",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10362,
                              "src": "4506:17:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_uint160_$_t_int24_$",
                                "typeString": "function (bytes memory) pure returns (uint256,uint160,int24)"
                              }
                            },
                            "id": 10398,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4506:25:77",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_int24_$",
                              "typeString": "tuple(uint256,uint160,int24)"
                            }
                          },
                          "src": "4465:66:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10400,
                        "nodeType": "ExpressionStatement",
                        "src": "4465:66:77"
                      },
                      {
                        "expression": {
                          "id": 10407,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10401,
                            "name": "initializedTicksCrossed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10375,
                            "src": "4542:23:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 10404,
                                "name": "tickBefore",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10380,
                                "src": "4602:10:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              {
                                "id": 10405,
                                "name": "tickAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10383,
                                "src": "4614:9:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              ],
                              "expression": {
                                "id": 10402,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10366,
                                "src": "4568:4:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                  "typeString": "contract IAstraCLPool"
                                }
                              },
                              "id": 10403,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "countInitializedTicksCrossed",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11956,
                              "src": "4568:33:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_contract$_IAstraCLPool_$27_$_t_int24_$_t_int24_$returns$_t_uint32_$bound_to$_t_contract$_IAstraCLPool_$27_$",
                                "typeString": "function (contract IAstraCLPool,int24,int24) view returns (uint32)"
                              }
                            },
                            "id": 10406,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4568:56:77",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "4542:82:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 10408,
                        "nodeType": "ExpressionStatement",
                        "src": "4542:82:77"
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "id": 10409,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10371,
                              "src": "4643:6:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 10410,
                              "name": "sqrtPriceX96After",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10373,
                              "src": "4651:17:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "id": 10411,
                              "name": "initializedTicksCrossed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10375,
                              "src": "4670:23:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 10412,
                              "name": "gasEstimate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10368,
                              "src": "4695:11:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 10413,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4642:65:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint160,uint32,uint256)"
                          }
                        },
                        "functionReturnParameters": 10378,
                        "id": 10414,
                        "nodeType": "Return",
                        "src": "4635:72:77"
                      }
                    ]
                  },
                  "id": 10416,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "handleRevert",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10369,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10364,
                        "mutability": "mutable",
                        "name": "reason",
                        "nodeType": "VariableDeclaration",
                        "scope": 10416,
                        "src": "4081:19:77",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 10363,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4081:5:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10366,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 10416,
                        "src": "4110:17:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 10365,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "4110:12:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10368,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 10416,
                        "src": "4137:19:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10367,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4137:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4071:91:77"
                  },
                  "returnParameters": {
                    "id": 10378,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10371,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "scope": 10416,
                        "src": "4222:14:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10370,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4222:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10373,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96After",
                        "nodeType": "VariableDeclaration",
                        "scope": 10416,
                        "src": "4250:25:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10372,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "4250:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10375,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossed",
                        "nodeType": "VariableDeclaration",
                        "scope": 10416,
                        "src": "4289:30:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 10374,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4289:6:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10377,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 10416,
                        "src": "4333:7:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10376,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4333:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4208:142:77"
                  },
                  "scope": 10864,
                  "src": "4050:664:77",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    8989
                  ],
                  "body": {
                    "id": 10514,
                    "nodeType": "Block",
                    "src": "5004:818:77",
                    "statements": [
                      {
                        "assignments": [
                          10431
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10431,
                            "mutability": "mutable",
                            "name": "zeroForOne",
                            "nodeType": "VariableDeclaration",
                            "scope": 10514,
                            "src": "5014:15:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 10430,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5014:4:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10437,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 10436,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 10432,
                              "name": "params",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10418,
                              "src": "5032:6:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                              }
                            },
                            "id": 10433,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "tokenIn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8966,
                            "src": "5032:14:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 10434,
                              "name": "params",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10418,
                              "src": "5049:6:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                              }
                            },
                            "id": 10435,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "tokenOut",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8968,
                            "src": "5049:15:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5032:32:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5014:50:77"
                      },
                      {
                        "assignments": [
                          10439
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10439,
                            "mutability": "mutable",
                            "name": "pool",
                            "nodeType": "VariableDeclaration",
                            "scope": 10514,
                            "src": "5074:17:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            },
                            "typeName": {
                              "id": 10438,
                              "name": "IAstraCLPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 27,
                              "src": "5074:12:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10448,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 10441,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10418,
                                "src": "5102:6:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                  "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                }
                              },
                              "id": 10442,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenIn",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8966,
                              "src": "5102:14:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 10443,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10418,
                                "src": "5118:6:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                  "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                }
                              },
                              "id": 10444,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenOut",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8968,
                              "src": "5118:15:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 10445,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10418,
                                "src": "5135:6:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                  "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                }
                              },
                              "id": 10446,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "fee",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8972,
                              "src": "5135:10:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            ],
                            "id": 10440,
                            "name": "getPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10201,
                            "src": "5094:7:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "function (address,address,uint24) view returns (contract IAstraCLPool)"
                            }
                          },
                          "id": 10447,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5094:52:77",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5074:72:77"
                      },
                      {
                        "assignments": [
                          10450
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10450,
                            "mutability": "mutable",
                            "name": "gasBefore",
                            "nodeType": "VariableDeclaration",
                            "scope": 10514,
                            "src": "5157:17:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 10449,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5157:7:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10453,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 10451,
                            "name": "gasleft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -7,
                            "src": "5177:7:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 10452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5177:9:77",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5157:29:77"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 10493,
                              "nodeType": "Block",
                              "src": "5665:2:77",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 10494,
                            "nodeType": "TryCatchClause",
                            "src": "5665:2:77"
                          },
                          {
                            "block": {
                              "id": 10511,
                              "nodeType": "Block",
                              "src": "5696:120:77",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 10503,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 10498,
                                      "name": "gasEstimate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10428,
                                      "src": "5710:11:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 10502,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 10499,
                                        "name": "gasBefore",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10450,
                                        "src": "5724:9:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "id": 10500,
                                          "name": "gasleft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -7,
                                          "src": "5736:7:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                            "typeString": "function () view returns (uint256)"
                                          }
                                        },
                                        "id": 10501,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5736:9:77",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "5724:21:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "5710:35:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 10504,
                                  "nodeType": "ExpressionStatement",
                                  "src": "5710:35:77"
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 10506,
                                        "name": "reason",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10496,
                                        "src": "5779:6:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "id": 10507,
                                        "name": "pool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10439,
                                        "src": "5787:4:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                          "typeString": "contract IAstraCLPool"
                                        }
                                      },
                                      {
                                        "id": 10508,
                                        "name": "gasEstimate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10428,
                                        "src": "5793:11:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                          "typeString": "contract IAstraCLPool"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 10505,
                                      "name": "handleRevert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10416,
                                      "src": "5766:12:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_contract$_IAstraCLPool_$27_$_t_uint256_$returns$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                        "typeString": "function (bytes memory,contract IAstraCLPool,uint256) view returns (uint256,uint160,uint32,uint256)"
                                      }
                                    },
                                    "id": 10509,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5766:39:77",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                      "typeString": "tuple(uint256,uint160,uint32,uint256)"
                                    }
                                  },
                                  "functionReturnParameters": 10429,
                                  "id": 10510,
                                  "nodeType": "Return",
                                  "src": "5759:46:77"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 10512,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 10497,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 10496,
                                  "mutability": "mutable",
                                  "name": "reason",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10512,
                                  "src": "5675:19:77",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 10495,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5675:5:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "5674:21:77"
                            },
                            "src": "5668:148:77"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 10458,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "5247:4:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_QuoterV2_$10864",
                                    "typeString": "contract QuoterV2"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_QuoterV2_$10864",
                                    "typeString": "contract QuoterV2"
                                  }
                                ],
                                "id": 10457,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5239:7:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 10456,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5239:7:77",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 10459,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5239:13:77",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10460,
                              "name": "zeroForOne",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10431,
                              "src": "5320:10:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "expression": {
                                    "id": 10461,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10418,
                                    "src": "5348:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                    }
                                  },
                                  "id": 10462,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "amountIn",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8970,
                                  "src": "5348:15:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 10463,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1112,
                                "src": "5348:24:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 10464,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5348:26:77",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 10468,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 10465,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10418,
                                    "src": "5392:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                    }
                                  },
                                  "id": 10466,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sqrtPriceLimitX96",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8974,
                                  "src": "5392:24:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 10467,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5420:1:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "5392:29:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "expression": {
                                  "id": 10480,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10418,
                                  "src": "5539:6:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                    "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                  }
                                },
                                "id": 10481,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sqrtPriceLimitX96",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8974,
                                "src": "5539:24:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "id": 10482,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "5392:171:77",
                              "trueExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "id": 10469,
                                      "name": "zeroForOne",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10431,
                                      "src": "5445:10:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 10477,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 10474,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "5488:8:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 10475,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MAX_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1390,
                                        "src": "5488:23:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 10476,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5514:1:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "5488:27:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "id": 10478,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "5445:70:77",
                                    "trueExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 10473,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 10470,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "5458:8:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 10471,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MIN_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1386,
                                        "src": "5458:23:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 10472,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5484:1:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "5458:27:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  }
                                ],
                                "id": 10479,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5444:72:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 10485,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10418,
                                    "src": "5598:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                    }
                                  },
                                  "id": 10486,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenIn",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8966,
                                  "src": "5598:14:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 10487,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10418,
                                    "src": "5614:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                    }
                                  },
                                  "id": 10488,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "fee",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8972,
                                  "src": "5614:10:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 10489,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10418,
                                    "src": "5626:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                    }
                                  },
                                  "id": 10490,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenOut",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8968,
                                  "src": "5626:15:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 10483,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "5581:3:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 10484,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "5581:16:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 10491,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5581:61:77",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 10454,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10439,
                              "src": "5212:4:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 10455,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 118,
                            "src": "5212:9:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            }
                          },
                          "id": 10492,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5212:444:77",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "id": 10513,
                        "nodeType": "TryStatement",
                        "src": "5196:620:77"
                      }
                    ]
                  },
                  "functionSelector": "c6a5026a",
                  "id": 10515,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInputSingle",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10420,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4817:8:77"
                  },
                  "parameters": {
                    "id": 10419,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10418,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 10515,
                        "src": "4751:41:77",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                          "typeString": "struct IQuoterV2.QuoteExactInputSingleParams"
                        },
                        "typeName": {
                          "id": 10417,
                          "name": "QuoteExactInputSingleParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 8975,
                          "src": "4751:27:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_storage_ptr",
                            "typeString": "struct IQuoterV2.QuoteExactInputSingleParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4750:43:77"
                  },
                  "returnParameters": {
                    "id": 10429,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10422,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 10515,
                        "src": "4856:17:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4856:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10424,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96After",
                        "nodeType": "VariableDeclaration",
                        "scope": 10515,
                        "src": "4887:25:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10423,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "4887:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10426,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossed",
                        "nodeType": "VariableDeclaration",
                        "scope": 10515,
                        "src": "4926:30:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 10425,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4926:6:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10428,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 10515,
                        "src": "4970:19:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10427,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4970:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4842:157:77"
                  },
                  "scope": 10864,
                  "src": "4720:1102:77",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    8964
                  ],
                  "body": {
                    "id": 10629,
                    "nodeType": "Block",
                    "src": "6126:1320:77",
                    "statements": [
                      {
                        "expression": {
                          "id": 10541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10533,
                            "name": "sqrtPriceX96AfterList",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10526,
                            "src": "6136:21:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                              "typeString": "uint160[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10537,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10517,
                                    "src": "6174:4:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 10538,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "numPools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3894,
                                  "src": "6174:13:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (uint256)"
                                  }
                                },
                                "id": 10539,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6174:15:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 10536,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "6160:13:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint160_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (uint160[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 10534,
                                  "name": "uint160",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6164:7:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "id": 10535,
                                "nodeType": "ArrayTypeName",
                                "src": "6164:9:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                                  "typeString": "uint160[]"
                                }
                              }
                            },
                            "id": 10540,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6160:30:77",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                              "typeString": "uint160[] memory"
                            }
                          },
                          "src": "6136:54:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                            "typeString": "uint160[] memory"
                          }
                        },
                        "id": 10542,
                        "nodeType": "ExpressionStatement",
                        "src": "6136:54:77"
                      },
                      {
                        "expression": {
                          "id": 10551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10543,
                            "name": "initializedTicksCrossedList",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10529,
                            "src": "6200:27:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10547,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10517,
                                    "src": "6243:4:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 10548,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "numPools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3894,
                                  "src": "6243:13:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (uint256)"
                                  }
                                },
                                "id": 10549,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6243:15:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 10546,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "6230:12:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (uint32[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 10544,
                                  "name": "uint32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6234:6:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "id": 10545,
                                "nodeType": "ArrayTypeName",
                                "src": "6234:8:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                  "typeString": "uint32[]"
                                }
                              }
                            },
                            "id": 10550,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6230:29:77",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "src": "6200:59:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        },
                        "id": 10552,
                        "nodeType": "ExpressionStatement",
                        "src": "6200:59:77"
                      },
                      {
                        "assignments": [
                          10554
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10554,
                            "mutability": "mutable",
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 10629,
                            "src": "6270:9:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 10553,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6270:7:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10556,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 10555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6282:1:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6270:13:77"
                      },
                      {
                        "body": {
                          "id": 10627,
                          "nodeType": "Block",
                          "src": "6306:1134:77",
                          "statements": [
                            {
                              "assignments": [
                                10559,
                                10561,
                                10563
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 10559,
                                  "mutability": "mutable",
                                  "name": "tokenIn",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10627,
                                  "src": "6321:15:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 10558,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6321:7:77",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10561,
                                  "mutability": "mutable",
                                  "name": "tokenOut",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10627,
                                  "src": "6338:16:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 10560,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6338:7:77",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10563,
                                  "mutability": "mutable",
                                  "name": "fee",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10627,
                                  "src": "6356:10:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  "typeName": {
                                    "id": 10562,
                                    "name": "uint24",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6356:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint24",
                                      "typeString": "uint24"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 10567,
                              "initialValue": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10564,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10517,
                                    "src": "6370:4:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 10565,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decodeFirstPool",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3928,
                                  "src": "6370:20:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                                  }
                                },
                                "id": 10566,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6370:22:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                                  "typeString": "tuple(address,address,uint24)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6320:72:77"
                            },
                            {
                              "assignments": [
                                10569,
                                10571,
                                10573,
                                10575
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 10569,
                                  "mutability": "mutable",
                                  "name": "_amountOut",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10627,
                                  "src": "6487:18:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 10568,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6487:7:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10571,
                                  "mutability": "mutable",
                                  "name": "_sqrtPriceX96After",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10627,
                                  "src": "6507:26:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "typeName": {
                                    "id": 10570,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6507:7:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10573,
                                  "mutability": "mutable",
                                  "name": "_initializedTicksCrossed",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10627,
                                  "src": "6535:31:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  },
                                  "typeName": {
                                    "id": 10572,
                                    "name": "uint32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6535:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10575,
                                  "mutability": "mutable",
                                  "name": "_gasEstimate",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10627,
                                  "src": "6568:20:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 10574,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6568:7:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 10585,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 10578,
                                        "name": "tokenIn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10559,
                                        "src": "6714:7:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 10579,
                                        "name": "tokenOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10561,
                                        "src": "6757:8:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 10580,
                                        "name": "fee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10563,
                                        "src": "6796:3:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint24",
                                          "typeString": "uint24"
                                        }
                                      },
                                      {
                                        "id": 10581,
                                        "name": "amountIn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10519,
                                        "src": "6835:8:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "hexValue": "30",
                                        "id": 10582,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6888:1:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint24",
                                          "typeString": "uint24"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 10577,
                                      "name": "QuoteExactInputSingleParams",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8975,
                                      "src": "6651:27:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_struct$_QuoteExactInputSingleParams_$8975_storage_ptr_$",
                                        "typeString": "type(struct IQuoterV2.QuoteExactInputSingleParams storage pointer)"
                                      }
                                    },
                                    "id": 10583,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "structConstructorCall",
                                    "lValueRequested": false,
                                    "names": [
                                      "tokenIn",
                                      "tokenOut",
                                      "fee",
                                      "amountIn",
                                      "sqrtPriceLimitX96"
                                    ],
                                    "nodeType": "FunctionCall",
                                    "src": "6651:261:77",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactInputSingleParams memory"
                                    }
                                  ],
                                  "id": 10576,
                                  "name": "quoteExactInputSingle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10515,
                                  "src": "6608:21:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_QuoteExactInputSingleParams_$8975_memory_ptr_$returns$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                    "typeString": "function (struct IQuoterV2.QuoteExactInputSingleParams memory) returns (uint256,uint160,uint32,uint256)"
                                  }
                                },
                                "id": 10584,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6608:322:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint160,uint32,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6486:444:77"
                            },
                            {
                              "expression": {
                                "id": 10590,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 10586,
                                    "name": "sqrtPriceX96AfterList",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10526,
                                    "src": "6945:21:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                                      "typeString": "uint160[] memory"
                                    }
                                  },
                                  "id": 10588,
                                  "indexExpression": {
                                    "id": 10587,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10554,
                                    "src": "6967:1:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "6945:24:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 10589,
                                  "name": "_sqrtPriceX96After",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10571,
                                  "src": "6972:18:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "6945:45:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "id": 10591,
                              "nodeType": "ExpressionStatement",
                              "src": "6945:45:77"
                            },
                            {
                              "expression": {
                                "id": 10596,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 10592,
                                    "name": "initializedTicksCrossedList",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10529,
                                    "src": "7004:27:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                      "typeString": "uint32[] memory"
                                    }
                                  },
                                  "id": 10594,
                                  "indexExpression": {
                                    "id": 10593,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10554,
                                    "src": "7032:1:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "7004:30:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 10595,
                                  "name": "_initializedTicksCrossed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10573,
                                  "src": "7037:24:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "7004:57:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 10597,
                              "nodeType": "ExpressionStatement",
                              "src": "7004:57:77"
                            },
                            {
                              "expression": {
                                "id": 10600,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 10598,
                                  "name": "amountIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10519,
                                  "src": "7075:8:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 10599,
                                  "name": "_amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10569,
                                  "src": "7086:10:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "7075:21:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10601,
                              "nodeType": "ExpressionStatement",
                              "src": "7075:21:77"
                            },
                            {
                              "expression": {
                                "id": 10604,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 10602,
                                  "name": "gasEstimate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10531,
                                  "src": "7110:11:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "id": 10603,
                                  "name": "_gasEstimate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10575,
                                  "src": "7125:12:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "7110:27:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10605,
                              "nodeType": "ExpressionStatement",
                              "src": "7110:27:77"
                            },
                            {
                              "expression": {
                                "id": 10607,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "7151:3:77",
                                "subExpression": {
                                  "id": 10606,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10554,
                                  "src": "7151:1:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10608,
                              "nodeType": "ExpressionStatement",
                              "src": "7151:3:77"
                            },
                            {
                              "condition": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10609,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10517,
                                    "src": "7228:4:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 10610,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "hasMultiplePools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3876,
                                  "src": "7228:21:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (bool)"
                                  }
                                },
                                "id": 10611,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7228:23:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 10625,
                                "nodeType": "Block",
                                "src": "7315:115:77",
                                "statements": [
                                  {
                                    "expression": {
                                      "components": [
                                        {
                                          "id": 10619,
                                          "name": "amountIn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 10519,
                                          "src": "7341:8:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 10620,
                                          "name": "sqrtPriceX96AfterList",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 10526,
                                          "src": "7351:21:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                                            "typeString": "uint160[] memory"
                                          }
                                        },
                                        {
                                          "id": 10621,
                                          "name": "initializedTicksCrossedList",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 10529,
                                          "src": "7374:27:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                            "typeString": "uint32[] memory"
                                          }
                                        },
                                        {
                                          "id": 10622,
                                          "name": "gasEstimate",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 10531,
                                          "src": "7403:11:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 10623,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "7340:75:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint160_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint160[] memory,uint32[] memory,uint256)"
                                      }
                                    },
                                    "functionReturnParameters": 10532,
                                    "id": 10624,
                                    "nodeType": "Return",
                                    "src": "7333:82:77"
                                  }
                                ]
                              },
                              "id": 10626,
                              "nodeType": "IfStatement",
                              "src": "7224:206:77",
                              "trueBody": {
                                "id": 10618,
                                "nodeType": "Block",
                                "src": "7253:56:77",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 10616,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 10612,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10517,
                                        "src": "7271:4:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "id": 10613,
                                            "name": "path",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10517,
                                            "src": "7278:4:77",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 10614,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "skipToken",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3961,
                                          "src": "7278:14:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                            "typeString": "function (bytes memory) pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 10615,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7278:16:77",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "src": "7271:23:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 10617,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7271:23:77"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "hexValue": "74727565",
                          "id": 10557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6300:4:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "id": 10628,
                        "nodeType": "WhileStatement",
                        "src": "6293:1147:77"
                      }
                    ]
                  },
                  "functionSelector": "cdca1753",
                  "id": 10630,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactInput",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10521,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "5913:8:77"
                  },
                  "parameters": {
                    "id": 10520,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10517,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 10630,
                        "src": "5853:17:77",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 10516,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5853:5:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10519,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 10630,
                        "src": "5872:16:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10518,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5872:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5852:37:77"
                  },
                  "returnParameters": {
                    "id": 10532,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10523,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 10630,
                        "src": "5952:17:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10522,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5952:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10526,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96AfterList",
                        "nodeType": "VariableDeclaration",
                        "scope": 10630,
                        "src": "5983:38:77",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                          "typeString": "uint160[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10524,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "5983:7:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "id": 10525,
                          "nodeType": "ArrayTypeName",
                          "src": "5983:9:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                            "typeString": "uint160[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10529,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossedList",
                        "nodeType": "VariableDeclaration",
                        "scope": 10630,
                        "src": "6035:43:77",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10527,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "6035:6:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 10528,
                          "nodeType": "ArrayTypeName",
                          "src": "6035:8:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10531,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 10630,
                        "src": "6092:19:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10530,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6092:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5938:183:77"
                  },
                  "scope": 10864,
                  "src": "5828:1618:77",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    9032
                  ],
                  "body": {
                    "id": 10747,
                    "nodeType": "Block",
                    "src": "7737:1088:77",
                    "statements": [
                      {
                        "assignments": [
                          10645
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10645,
                            "mutability": "mutable",
                            "name": "zeroForOne",
                            "nodeType": "VariableDeclaration",
                            "scope": 10747,
                            "src": "7747:15:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 10644,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "7747:4:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10651,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 10650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 10646,
                              "name": "params",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10632,
                              "src": "7765:6:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                              }
                            },
                            "id": 10647,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "tokenIn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9009,
                            "src": "7765:14:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 10648,
                              "name": "params",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10632,
                              "src": "7782:6:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                              }
                            },
                            "id": 10649,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "tokenOut",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9011,
                            "src": "7782:15:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "7765:32:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7747:50:77"
                      },
                      {
                        "assignments": [
                          10653
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10653,
                            "mutability": "mutable",
                            "name": "pool",
                            "nodeType": "VariableDeclaration",
                            "scope": 10747,
                            "src": "7807:17:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            },
                            "typeName": {
                              "id": 10652,
                              "name": "IAstraCLPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 27,
                              "src": "7807:12:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10662,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 10655,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10632,
                                "src": "7835:6:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                  "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                }
                              },
                              "id": 10656,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenIn",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9009,
                              "src": "7835:14:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 10657,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10632,
                                "src": "7851:6:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                  "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                }
                              },
                              "id": 10658,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenOut",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9011,
                              "src": "7851:15:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 10659,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10632,
                                "src": "7868:6:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                  "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                }
                              },
                              "id": 10660,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "fee",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9015,
                              "src": "7868:10:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            ],
                            "id": 10654,
                            "name": "getPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10201,
                            "src": "7827:7:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint24_$returns$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "function (address,address,uint24) view returns (contract IAstraCLPool)"
                            }
                          },
                          "id": 10661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7827:52:77",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7807:72:77"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 10666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 10663,
                              "name": "params",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10632,
                              "src": "8003:6:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                              }
                            },
                            "id": 10664,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sqrtPriceLimitX96",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9017,
                            "src": "8003:24:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 10665,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8031:1:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8003:29:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10672,
                        "nodeType": "IfStatement",
                        "src": "7999:66:77",
                        "trueBody": {
                          "expression": {
                            "id": 10670,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 10667,
                              "name": "amountOutCached",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10164,
                              "src": "8034:15:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "expression": {
                                "id": 10668,
                                "name": "params",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10632,
                                "src": "8052:6:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                  "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                }
                              },
                              "id": 10669,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9013,
                              "src": "8052:13:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "8034:31:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10671,
                          "nodeType": "ExpressionStatement",
                          "src": "8034:31:77"
                        }
                      },
                      {
                        "assignments": [
                          10674
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10674,
                            "mutability": "mutable",
                            "name": "gasBefore",
                            "nodeType": "VariableDeclaration",
                            "scope": 10747,
                            "src": "8075:17:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 10673,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8075:7:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10677,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 10675,
                            "name": "gasleft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -7,
                            "src": "8095:7:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 10676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8095:9:77",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8075:29:77"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 10718,
                              "nodeType": "Block",
                              "src": "8582:2:77",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 10719,
                            "nodeType": "TryCatchClause",
                            "src": "8582:2:77"
                          },
                          {
                            "block": {
                              "id": 10744,
                              "nodeType": "Block",
                              "src": "8613:206:77",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 10728,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 10723,
                                      "name": "gasEstimate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10642,
                                      "src": "8627:11:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 10727,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 10724,
                                        "name": "gasBefore",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10674,
                                        "src": "8641:9:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "id": 10725,
                                          "name": "gasleft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -7,
                                          "src": "8653:7:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                            "typeString": "function () view returns (uint256)"
                                          }
                                        },
                                        "id": 10726,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8653:9:77",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8641:21:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "8627:35:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 10729,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8627:35:77"
                                },
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    "id": 10733,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 10730,
                                        "name": "params",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10632,
                                        "src": "8680:6:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                          "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                        }
                                      },
                                      "id": 10731,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sqrtPriceLimitX96",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9017,
                                      "src": "8680:24:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 10732,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8708:1:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "8680:29:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 10737,
                                  "nodeType": "IfStatement",
                                  "src": "8676:57:77",
                                  "trueBody": {
                                    "expression": {
                                      "id": 10735,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "delete",
                                      "prefix": true,
                                      "src": "8711:22:77",
                                      "subExpression": {
                                        "id": 10734,
                                        "name": "amountOutCached",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10164,
                                        "src": "8718:15:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 10736,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8711:22:77"
                                  }
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 10739,
                                        "name": "reason",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10721,
                                        "src": "8782:6:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "id": 10740,
                                        "name": "pool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10653,
                                        "src": "8790:4:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                          "typeString": "contract IAstraCLPool"
                                        }
                                      },
                                      {
                                        "id": 10741,
                                        "name": "gasEstimate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10642,
                                        "src": "8796:11:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                          "typeString": "contract IAstraCLPool"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 10738,
                                      "name": "handleRevert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10416,
                                      "src": "8769:12:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_contract$_IAstraCLPool_$27_$_t_uint256_$returns$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                        "typeString": "function (bytes memory,contract IAstraCLPool,uint256) view returns (uint256,uint160,uint32,uint256)"
                                      }
                                    },
                                    "id": 10742,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8769:39:77",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                      "typeString": "tuple(uint256,uint160,uint32,uint256)"
                                    }
                                  },
                                  "functionReturnParameters": 10643,
                                  "id": 10743,
                                  "nodeType": "Return",
                                  "src": "8762:46:77"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 10745,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 10722,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 10721,
                                  "mutability": "mutable",
                                  "name": "reason",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10745,
                                  "src": "8592:19:77",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 10720,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8592:5:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "8591:21:77"
                            },
                            "src": "8585:234:77"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 10682,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "8165:4:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_QuoterV2_$10864",
                                    "typeString": "contract QuoterV2"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_QuoterV2_$10864",
                                    "typeString": "contract QuoterV2"
                                  }
                                ],
                                "id": 10681,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8157:7:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 10680,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8157:7:77",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 10683,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8157:13:77",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10684,
                              "name": "zeroForOne",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10645,
                              "src": "8238:10:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 10689,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "8266:25:77",
                              "subExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "expression": {
                                      "id": 10685,
                                      "name": "params",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10632,
                                      "src": "8267:6:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                        "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                      }
                                    },
                                    "id": 10686,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "amount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9013,
                                    "src": "8267:13:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 10687,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toInt256",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1112,
                                  "src": "8267:22:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256) pure returns (int256)"
                                  }
                                },
                                "id": 10688,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8267:24:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 10693,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 10690,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10632,
                                    "src": "8309:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                    }
                                  },
                                  "id": 10691,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sqrtPriceLimitX96",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9017,
                                  "src": "8309:24:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 10692,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8337:1:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "8309:29:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "expression": {
                                  "id": 10705,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10632,
                                  "src": "8456:6:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                    "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                  }
                                },
                                "id": 10706,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sqrtPriceLimitX96",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9017,
                                "src": "8456:24:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "id": 10707,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "8309:171:77",
                              "trueExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "id": 10694,
                                      "name": "zeroForOne",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10645,
                                      "src": "8362:10:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 10702,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 10699,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "8405:8:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 10700,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MAX_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1390,
                                        "src": "8405:23:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 10701,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "8431:1:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "8405:27:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "id": 10703,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "8362:70:77",
                                    "trueExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "id": 10698,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 10695,
                                          "name": "TickMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1904,
                                          "src": "8375:8:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_TickMath_$1904_$",
                                            "typeString": "type(library TickMath)"
                                          }
                                        },
                                        "id": 10696,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "MIN_SQRT_RATIO",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1386,
                                        "src": "8375:23:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 10697,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "8401:1:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "8375:27:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  }
                                ],
                                "id": 10704,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "8361:72:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 10710,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10632,
                                    "src": "8515:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                    }
                                  },
                                  "id": 10711,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenOut",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9011,
                                  "src": "8515:15:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 10712,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10632,
                                    "src": "8532:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                    }
                                  },
                                  "id": 10713,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "fee",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9015,
                                  "src": "8532:10:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 10714,
                                    "name": "params",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10632,
                                    "src": "8544:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                    }
                                  },
                                  "id": 10715,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenIn",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9009,
                                  "src": "8544:14:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 10708,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "8498:3:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 10709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "8498:16:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 10716,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8498:61:77",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 10678,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10653,
                              "src": "8130:4:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 10679,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 118,
                            "src": "8130:9:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            }
                          },
                          "id": 10717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8130:443:77",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "id": 10746,
                        "nodeType": "TryStatement",
                        "src": "8114:705:77"
                      }
                    ]
                  },
                  "functionSelector": "bd21704a",
                  "id": 10748,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactOutputSingle",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10634,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "7551:8:77"
                  },
                  "parameters": {
                    "id": 10633,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10632,
                        "mutability": "mutable",
                        "name": "params",
                        "nodeType": "VariableDeclaration",
                        "scope": 10748,
                        "src": "7484:42:77",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                          "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams"
                        },
                        "typeName": {
                          "id": 10631,
                          "name": "QuoteExactOutputSingleParams",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 9018,
                          "src": "7484:28:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_storage_ptr",
                            "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7483:44:77"
                  },
                  "returnParameters": {
                    "id": 10643,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10636,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 10748,
                        "src": "7590:16:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10635,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7590:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10638,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96After",
                        "nodeType": "VariableDeclaration",
                        "scope": 10748,
                        "src": "7620:25:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10637,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "7620:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10640,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossed",
                        "nodeType": "VariableDeclaration",
                        "scope": 10748,
                        "src": "7659:30:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 10639,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "7659:6:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10642,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 10748,
                        "src": "7703:19:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10641,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7703:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7576:156:77"
                  },
                  "scope": 10864,
                  "src": "7452:1373:77",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    9007
                  ],
                  "body": {
                    "id": 10862,
                    "nodeType": "Block",
                    "src": "9130:1321:77",
                    "statements": [
                      {
                        "expression": {
                          "id": 10774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10766,
                            "name": "sqrtPriceX96AfterList",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10759,
                            "src": "9140:21:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                              "typeString": "uint160[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10770,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10750,
                                    "src": "9178:4:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 10771,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "numPools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3894,
                                  "src": "9178:13:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (uint256)"
                                  }
                                },
                                "id": 10772,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9178:15:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 10769,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "9164:13:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint160_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (uint160[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 10767,
                                  "name": "uint160",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9168:7:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "id": 10768,
                                "nodeType": "ArrayTypeName",
                                "src": "9168:9:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                                  "typeString": "uint160[]"
                                }
                              }
                            },
                            "id": 10773,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9164:30:77",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                              "typeString": "uint160[] memory"
                            }
                          },
                          "src": "9140:54:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                            "typeString": "uint160[] memory"
                          }
                        },
                        "id": 10775,
                        "nodeType": "ExpressionStatement",
                        "src": "9140:54:77"
                      },
                      {
                        "expression": {
                          "id": 10784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10776,
                            "name": "initializedTicksCrossedList",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10762,
                            "src": "9204:27:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10780,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10750,
                                    "src": "9247:4:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 10781,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "numPools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3894,
                                  "src": "9247:13:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (uint256)"
                                  }
                                },
                                "id": 10782,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9247:15:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 10779,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "9234:12:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (uint32[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 10777,
                                  "name": "uint32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9238:6:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "id": 10778,
                                "nodeType": "ArrayTypeName",
                                "src": "9238:8:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                  "typeString": "uint32[]"
                                }
                              }
                            },
                            "id": 10783,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9234:29:77",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "src": "9204:59:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        },
                        "id": 10785,
                        "nodeType": "ExpressionStatement",
                        "src": "9204:59:77"
                      },
                      {
                        "assignments": [
                          10787
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10787,
                            "mutability": "mutable",
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 10862,
                            "src": "9274:9:77",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 10786,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9274:7:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10789,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 10788,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9286:1:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9274:13:77"
                      },
                      {
                        "body": {
                          "id": 10860,
                          "nodeType": "Block",
                          "src": "9310:1135:77",
                          "statements": [
                            {
                              "assignments": [
                                10792,
                                10794,
                                10796
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 10792,
                                  "mutability": "mutable",
                                  "name": "tokenOut",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10860,
                                  "src": "9325:16:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 10791,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9325:7:77",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10794,
                                  "mutability": "mutable",
                                  "name": "tokenIn",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10860,
                                  "src": "9343:15:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 10793,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9343:7:77",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10796,
                                  "mutability": "mutable",
                                  "name": "fee",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10860,
                                  "src": "9360:10:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  "typeName": {
                                    "id": 10795,
                                    "name": "uint24",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9360:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint24",
                                      "typeString": "uint24"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 10800,
                              "initialValue": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10797,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10750,
                                    "src": "9374:4:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 10798,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decodeFirstPool",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3928,
                                  "src": "9374:20:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (address,address,uint24)"
                                  }
                                },
                                "id": 10799,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9374:22:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint24_$",
                                  "typeString": "tuple(address,address,uint24)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "9324:72:77"
                            },
                            {
                              "assignments": [
                                10802,
                                10804,
                                10806,
                                10808
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 10802,
                                  "mutability": "mutable",
                                  "name": "_amountIn",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10860,
                                  "src": "9491:17:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 10801,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9491:7:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10804,
                                  "mutability": "mutable",
                                  "name": "_sqrtPriceX96After",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10860,
                                  "src": "9510:26:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "typeName": {
                                    "id": 10803,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9510:7:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10806,
                                  "mutability": "mutable",
                                  "name": "_initializedTicksCrossed",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10860,
                                  "src": "9538:31:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  },
                                  "typeName": {
                                    "id": 10805,
                                    "name": "uint32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9538:6:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 10808,
                                  "mutability": "mutable",
                                  "name": "_gasEstimate",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10860,
                                  "src": "9571:20:77",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 10807,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9571:7:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 10818,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 10811,
                                        "name": "tokenIn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10794,
                                        "src": "9719:7:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 10812,
                                        "name": "tokenOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10792,
                                        "src": "9762:8:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 10813,
                                        "name": "amountOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10752,
                                        "src": "9804:9:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 10814,
                                        "name": "fee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10796,
                                        "src": "9844:3:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint24",
                                          "typeString": "uint24"
                                        }
                                      },
                                      {
                                        "hexValue": "30",
                                        "id": 10815,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "9892:1:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint24",
                                          "typeString": "uint24"
                                        },
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 10810,
                                      "name": "QuoteExactOutputSingleParams",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9018,
                                      "src": "9655:28:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_struct$_QuoteExactOutputSingleParams_$9018_storage_ptr_$",
                                        "typeString": "type(struct IQuoterV2.QuoteExactOutputSingleParams storage pointer)"
                                      }
                                    },
                                    "id": 10816,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "structConstructorCall",
                                    "lValueRequested": false,
                                    "names": [
                                      "tokenIn",
                                      "tokenOut",
                                      "amount",
                                      "fee",
                                      "sqrtPriceLimitX96"
                                    ],
                                    "nodeType": "FunctionCall",
                                    "src": "9655:261:77",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr",
                                      "typeString": "struct IQuoterV2.QuoteExactOutputSingleParams memory"
                                    }
                                  ],
                                  "id": 10809,
                                  "name": "quoteExactOutputSingle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10748,
                                  "src": "9611:22:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_QuoteExactOutputSingleParams_$9018_memory_ptr_$returns$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                    "typeString": "function (struct IQuoterV2.QuoteExactOutputSingleParams memory) returns (uint256,uint160,uint32,uint256)"
                                  }
                                },
                                "id": 10817,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9611:323:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint160_$_t_uint32_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint160,uint32,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "9490:444:77"
                            },
                            {
                              "expression": {
                                "id": 10823,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 10819,
                                    "name": "sqrtPriceX96AfterList",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10759,
                                    "src": "9949:21:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                                      "typeString": "uint160[] memory"
                                    }
                                  },
                                  "id": 10821,
                                  "indexExpression": {
                                    "id": 10820,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10787,
                                    "src": "9971:1:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "9949:24:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 10822,
                                  "name": "_sqrtPriceX96After",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10804,
                                  "src": "9976:18:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "9949:45:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "id": 10824,
                              "nodeType": "ExpressionStatement",
                              "src": "9949:45:77"
                            },
                            {
                              "expression": {
                                "id": 10829,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 10825,
                                    "name": "initializedTicksCrossedList",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10762,
                                    "src": "10008:27:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                      "typeString": "uint32[] memory"
                                    }
                                  },
                                  "id": 10827,
                                  "indexExpression": {
                                    "id": 10826,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10787,
                                    "src": "10036:1:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10008:30:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 10828,
                                  "name": "_initializedTicksCrossed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10806,
                                  "src": "10041:24:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "10008:57:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 10830,
                              "nodeType": "ExpressionStatement",
                              "src": "10008:57:77"
                            },
                            {
                              "expression": {
                                "id": 10833,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 10831,
                                  "name": "amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10752,
                                  "src": "10079:9:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 10832,
                                  "name": "_amountIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10802,
                                  "src": "10091:9:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10079:21:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10834,
                              "nodeType": "ExpressionStatement",
                              "src": "10079:21:77"
                            },
                            {
                              "expression": {
                                "id": 10837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 10835,
                                  "name": "gasEstimate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10764,
                                  "src": "10114:11:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "id": 10836,
                                  "name": "_gasEstimate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10808,
                                  "src": "10129:12:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10114:27:77",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10838,
                              "nodeType": "ExpressionStatement",
                              "src": "10114:27:77"
                            },
                            {
                              "expression": {
                                "id": 10840,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "10155:3:77",
                                "subExpression": {
                                  "id": 10839,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10787,
                                  "src": "10155:1:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10841,
                              "nodeType": "ExpressionStatement",
                              "src": "10155:3:77"
                            },
                            {
                              "condition": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10842,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10750,
                                    "src": "10232:4:77",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 10843,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "hasMultiplePools",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3876,
                                  "src": "10232:21:77",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (bool)"
                                  }
                                },
                                "id": 10844,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10232:23:77",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 10858,
                                "nodeType": "Block",
                                "src": "10319:116:77",
                                "statements": [
                                  {
                                    "expression": {
                                      "components": [
                                        {
                                          "id": 10852,
                                          "name": "amountOut",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 10752,
                                          "src": "10345:9:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 10853,
                                          "name": "sqrtPriceX96AfterList",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 10759,
                                          "src": "10356:21:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                                            "typeString": "uint160[] memory"
                                          }
                                        },
                                        {
                                          "id": 10854,
                                          "name": "initializedTicksCrossedList",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 10762,
                                          "src": "10379:27:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                            "typeString": "uint32[] memory"
                                          }
                                        },
                                        {
                                          "id": 10855,
                                          "name": "gasEstimate",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 10764,
                                          "src": "10408:11:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 10856,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "10344:76:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint160_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint160[] memory,uint32[] memory,uint256)"
                                      }
                                    },
                                    "functionReturnParameters": 10765,
                                    "id": 10857,
                                    "nodeType": "Return",
                                    "src": "10337:83:77"
                                  }
                                ]
                              },
                              "id": 10859,
                              "nodeType": "IfStatement",
                              "src": "10228:207:77",
                              "trueBody": {
                                "id": 10851,
                                "nodeType": "Block",
                                "src": "10257:56:77",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 10849,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 10845,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10750,
                                        "src": "10275:4:77",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "id": 10846,
                                            "name": "path",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10750,
                                            "src": "10282:4:77",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 10847,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "skipToken",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3961,
                                          "src": "10282:14:77",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                            "typeString": "function (bytes memory) pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 10848,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10282:16:77",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "src": "10275:23:77",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 10850,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10275:23:77"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "hexValue": "74727565",
                          "id": 10790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9304:4:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "id": 10861,
                        "nodeType": "WhileStatement",
                        "src": "9297:1148:77"
                      }
                    ]
                  },
                  "functionSelector": "2f80bb1d",
                  "id": 10863,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteExactOutput",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10754,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8918:8:77"
                  },
                  "parameters": {
                    "id": 10753,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10750,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 10863,
                        "src": "8857:17:77",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 10749,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "8857:5:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10752,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 10863,
                        "src": "8876:17:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10751,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8876:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8856:38:77"
                  },
                  "returnParameters": {
                    "id": 10765,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10756,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 10863,
                        "src": "8957:16:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10755,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8957:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10759,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96AfterList",
                        "nodeType": "VariableDeclaration",
                        "scope": 10863,
                        "src": "8987:38:77",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                          "typeString": "uint160[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10757,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "8987:7:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "id": 10758,
                          "nodeType": "ArrayTypeName",
                          "src": "8987:9:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                            "typeString": "uint160[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10762,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossedList",
                        "nodeType": "VariableDeclaration",
                        "scope": 10863,
                        "src": "9039:43:77",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10760,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "9039:6:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 10761,
                          "nodeType": "ArrayTypeName",
                          "src": "9039:8:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10764,
                        "mutability": "mutable",
                        "name": "gasEstimate",
                        "nodeType": "VariableDeclaration",
                        "scope": 10863,
                        "src": "9096:19:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10763,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9096:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8943:182:77"
                  },
                  "scope": 10864,
                  "src": "8831:1620:77",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 10865,
              "src": "1140:9313:77"
            }
          ],
          "src": "45:10409:77"
        },
        "id": 77
      },
      "contracts/lens/TokenValidator.sol": {
        "ast": {
          "absolutePath": "contracts/lens/TokenValidator.sol",
          "exportedSymbols": {
            "AstraClassicLibrary": [
              11656
            ],
            "IApproveAndCall": [
              8555
            ],
            "IAstraCLSwapCallback": [
              41
            ],
            "IAstraCallee": [
              4239
            ],
            "IAstraPair": [
              4481
            ],
            "ICLSwapRouter": [
              8643
            ],
            "IClassicSwapRouter": [
              8678
            ],
            "IERC20": [
              5876
            ],
            "IImmutableState": [
              8694
            ],
            "IMulticall": [
              2662
            ],
            "IMulticallExtended": [
              8789
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "ISelfPermit": [
              3018
            ],
            "ISwapRouter02": [
              9053
            ],
            "ITokenValidator": [
              9090
            ],
            "ImmutableState": [
              7710
            ],
            "LowGasSafeMath": [
              1043
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "TokenValidator": [
              11309
            ]
          },
          "id": 11310,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10866,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:78"
            },
            {
              "id": 10867,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:78"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 10868,
              "nodeType": "ImportDirective",
              "scope": 11310,
              "sourceUnit": 5877,
              "src": "90:56:78",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "file": "@airdao/astra-cl-periphery/contracts/base/PeripheryImmutableState.sol",
              "id": 10869,
              "nodeType": "ImportDirective",
              "scope": 11310,
              "sourceUnit": 2035,
              "src": "147:79:78",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol",
              "file": "@airdao/astra-contracts/contracts/core/interfaces/IAstraCallee.sol",
              "id": 10870,
              "nodeType": "ImportDirective",
              "scope": 11310,
              "sourceUnit": 4240,
              "src": "227:76:78",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol",
              "file": "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol",
              "id": 10871,
              "nodeType": "ImportDirective",
              "scope": 11310,
              "sourceUnit": 4482,
              "src": "304:74:78",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/libraries/AstraClassicLibrary.sol",
              "file": "../libraries/AstraClassicLibrary.sol",
              "id": 10872,
              "nodeType": "ImportDirective",
              "scope": 11310,
              "sourceUnit": 11657,
              "src": "379:46:78",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/ISwapRouter02.sol",
              "file": "../interfaces/ISwapRouter02.sol",
              "id": 10873,
              "nodeType": "ImportDirective",
              "scope": 11310,
              "sourceUnit": 9054,
              "src": "426:41:78",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/ITokenValidator.sol",
              "file": "../interfaces/ITokenValidator.sol",
              "id": 10874,
              "nodeType": "ImportDirective",
              "scope": 11310,
              "sourceUnit": 9091,
              "src": "468:43:78",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/base/ImmutableState.sol",
              "file": "../base/ImmutableState.sol",
              "id": 10875,
              "nodeType": "ImportDirective",
              "scope": 11310,
              "sourceUnit": 7711,
              "src": "512:36:78",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10877,
                    "name": "ITokenValidator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9090,
                    "src": "1590:15:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ITokenValidator_$9090",
                      "typeString": "contract ITokenValidator"
                    }
                  },
                  "id": 10878,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1590:15:78"
                },
                {
                  "baseName": {
                    "id": 10879,
                    "name": "IAstraCallee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4239,
                    "src": "1607:12:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCallee_$4239",
                      "typeString": "contract IAstraCallee"
                    }
                  },
                  "id": 10880,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1607:12:78"
                },
                {
                  "baseName": {
                    "id": 10881,
                    "name": "ImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7710,
                    "src": "1621:14:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ImmutableState_$7710",
                      "typeString": "contract ImmutableState"
                    }
                  },
                  "id": 10882,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1621:14:78"
                }
              ],
              "contractDependencies": [
                4239,
                7710,
                8694,
                9090
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 10876,
                "nodeType": "StructuredDocumentation",
                "src": "550:1013:78",
                "text": "@notice Validates tokens by flash borrowing from the token/<base token> pool on V2.\n @notice Returns\n     Status.FOT if we detected a fee is taken on transfer.\n     Status.STF if transfer failed for the token.\n     Status.UNKN if we did not detect any issues with the token.\n @notice A return value of Status.UNKN does not mean the token is definitely not a fee on transfer token\n     or definitely has no problems with its transfer. It just means we cant say for sure that it has any\n     issues.\n @dev We can not guarantee the result of this lens is correct for a few reasons:\n @dev 1/ Some tokens take fees or allow transfers under specific conditions, for example some have an allowlist\n @dev    of addresses that do/dont require fees. Therefore the result is not guaranteed to be correct\n @dev    in all circumstances.\n @dev 2/ It is possible that the token does not have any pools on V2 therefore we are not able to perform\n @dev    a flashloan to test the token."
              },
              "fullyImplemented": true,
              "id": 11309,
              "linearizedBaseContracts": [
                11309,
                7710,
                8694,
                4239,
                9090
              ],
              "name": "TokenValidator",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 10885,
                  "mutability": "constant",
                  "name": "FOT_REVERT_STRING",
                  "nodeType": "VariableDeclaration",
                  "scope": 11309,
                  "src": "1642:50:78",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 10883,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1642:6:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "hexValue": "464f54",
                    "id": 10884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1687:5:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_0d441c7cb74abc94cc606c98870ca9174ef5b167b2f7ffed505658cf4574b003",
                      "typeString": "literal_string \"FOT\""
                    },
                    "value": "FOT"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 10888,
                  "mutability": "constant",
                  "name": "STF_REVERT_STRING_SUFFIX",
                  "nodeType": "VariableDeclaration",
                  "scope": 11309,
                  "src": "1698:69:78",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 10886,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1698:6:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "hexValue": "5452414e534645525f4641494c4544",
                    "id": 10887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1750:17:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_8bf8f0d780f13740660fe63233b17f96cb1813889e7dce4121e55b817b367b72",
                      "typeString": "literal_string \"TRANSFER_FAILED\""
                    },
                    "value": "TRANSFER_FAILED"
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 10899,
                    "nodeType": "Block",
                    "src": "1887:2:78",
                    "statements": []
                  },
                  "id": 10900,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 10895,
                          "name": "_factoryClassic",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10890,
                          "src": "1852:15:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10896,
                          "name": "_positionManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10892,
                          "src": "1869:16:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10897,
                      "modifierName": {
                        "id": 10894,
                        "name": "ImmutableState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7710,
                        "src": "1837:14:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ImmutableState_$7710_$",
                          "typeString": "type(contract ImmutableState)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1837:49:78"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10893,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10890,
                        "mutability": "mutable",
                        "name": "_factoryClassic",
                        "nodeType": "VariableDeclaration",
                        "scope": 10900,
                        "src": "1786:23:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10889,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1786:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10892,
                        "mutability": "mutable",
                        "name": "_positionManager",
                        "nodeType": "VariableDeclaration",
                        "scope": 10900,
                        "src": "1811:24:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10891,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1811:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1785:51:78"
                  },
                  "returnParameters": {
                    "id": 10898,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1887:0:78"
                  },
                  "scope": 11309,
                  "src": "1774:115:78",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    9089
                  ],
                  "body": {
                    "id": 10949,
                    "nodeType": "Block",
                    "src": "2085:202:78",
                    "statements": [
                      {
                        "expression": {
                          "id": 10922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10915,
                            "name": "isFotResults",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10913,
                            "src": "2095:12:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_enum$_Status_$9061_$dyn_memory_ptr",
                              "typeString": "enum ITokenValidator.Status[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 10919,
                                  "name": "tokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10903,
                                  "src": "2123:6:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 10920,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "2123:13:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 10918,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "2110:12:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_enum$_Status_$9061_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (enum ITokenValidator.Status[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 10916,
                                  "name": "Status",
                                  "nodeType": "UserDefinedTypeName",
                                  "referencedDeclaration": 9061,
                                  "src": "2114:6:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Status_$9061",
                                    "typeString": "enum ITokenValidator.Status"
                                  }
                                },
                                "id": 10917,
                                "nodeType": "ArrayTypeName",
                                "src": "2114:8:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_enum$_Status_$9061_$dyn_storage_ptr",
                                  "typeString": "enum ITokenValidator.Status[]"
                                }
                              }
                            },
                            "id": 10921,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2110:27:78",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_enum$_Status_$9061_$dyn_memory_ptr",
                              "typeString": "enum ITokenValidator.Status[] memory"
                            }
                          },
                          "src": "2095:42:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_enum$_Status_$9061_$dyn_memory_ptr",
                            "typeString": "enum ITokenValidator.Status[] memory"
                          }
                        },
                        "id": 10923,
                        "nodeType": "ExpressionStatement",
                        "src": "2095:42:78"
                      },
                      {
                        "body": {
                          "id": 10947,
                          "nodeType": "Block",
                          "src": "2191:90:78",
                          "statements": [
                            {
                              "expression": {
                                "id": 10945,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 10935,
                                    "name": "isFotResults",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10913,
                                    "src": "2205:12:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_enum$_Status_$9061_$dyn_memory_ptr",
                                      "typeString": "enum ITokenValidator.Status[] memory"
                                    }
                                  },
                                  "id": 10937,
                                  "indexExpression": {
                                    "id": 10936,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10925,
                                    "src": "2218:1:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2205:15:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Status_$9061",
                                    "typeString": "enum ITokenValidator.Status"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "baseExpression": {
                                        "id": 10939,
                                        "name": "tokens",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10903,
                                        "src": "2232:6:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                          "typeString": "address[] calldata"
                                        }
                                      },
                                      "id": 10941,
                                      "indexExpression": {
                                        "id": 10940,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10925,
                                        "src": "2239:1:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "2232:9:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 10942,
                                      "name": "baseTokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10906,
                                      "src": "2243:10:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                        "typeString": "address[] calldata"
                                      }
                                    },
                                    {
                                      "id": 10943,
                                      "name": "amountToBorrow",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10908,
                                      "src": "2255:14:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                        "typeString": "address[] calldata"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 10938,
                                    "name": "validate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11003,
                                    "src": "2223:8:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_address_$dyn_calldata_ptr_$_t_uint256_$returns$_t_enum$_Status_$9061_$",
                                      "typeString": "function (address,address[] calldata,uint256) returns (enum ITokenValidator.Status)"
                                    }
                                  },
                                  "id": 10944,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2223:47:78",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Status_$9061",
                                    "typeString": "enum ITokenValidator.Status"
                                  }
                                },
                                "src": "2205:65:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Status_$9061",
                                  "typeString": "enum ITokenValidator.Status"
                                }
                              },
                              "id": 10946,
                              "nodeType": "ExpressionStatement",
                              "src": "2205:65:78"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10928,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10925,
                            "src": "2167:1:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 10929,
                              "name": "tokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10903,
                              "src": "2171:6:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 10930,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "2171:13:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2167:17:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10948,
                        "initializationExpression": {
                          "assignments": [
                            10925
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 10925,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 10948,
                              "src": "2152:9:78",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 10924,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2152:7:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 10927,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 10926,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2164:1:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2152:13:78"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 10933,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "2186:3:78",
                            "subExpression": {
                              "id": 10932,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10925,
                              "src": "2186:1:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10934,
                          "nodeType": "ExpressionStatement",
                          "src": "2186:3:78"
                        },
                        "nodeType": "ForStatement",
                        "src": "2147:134:78"
                      }
                    ]
                  },
                  "functionSelector": "be7672e5",
                  "id": 10950,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "batchValidate",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10910,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2037:8:78"
                  },
                  "parameters": {
                    "id": 10909,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10903,
                        "mutability": "mutable",
                        "name": "tokens",
                        "nodeType": "VariableDeclaration",
                        "scope": 10950,
                        "src": "1927:25:78",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10901,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1927:7:78",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 10902,
                          "nodeType": "ArrayTypeName",
                          "src": "1927:9:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10906,
                        "mutability": "mutable",
                        "name": "baseTokens",
                        "nodeType": "VariableDeclaration",
                        "scope": 10950,
                        "src": "1962:29:78",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10904,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1962:7:78",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 10905,
                          "nodeType": "ArrayTypeName",
                          "src": "1962:9:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10908,
                        "mutability": "mutable",
                        "name": "amountToBorrow",
                        "nodeType": "VariableDeclaration",
                        "scope": 10950,
                        "src": "2001:22:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10907,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2001:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1917:112:78"
                  },
                  "returnParameters": {
                    "id": 10914,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10913,
                        "mutability": "mutable",
                        "name": "isFotResults",
                        "nodeType": "VariableDeclaration",
                        "scope": 10950,
                        "src": "2055:28:78",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_enum$_Status_$9061_$dyn_memory_ptr",
                          "typeString": "enum ITokenValidator.Status[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10911,
                            "name": "Status",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 9061,
                            "src": "2055:6:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Status_$9061",
                              "typeString": "enum ITokenValidator.Status"
                            }
                          },
                          "id": 10912,
                          "nodeType": "ArrayTypeName",
                          "src": "2055:8:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_enum$_Status_$9061_$dyn_storage_ptr",
                            "typeString": "enum ITokenValidator.Status[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2054:30:78"
                  },
                  "scope": 11309,
                  "src": "1895:392:78",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    9074
                  ],
                  "body": {
                    "id": 11002,
                    "nodeType": "Block",
                    "src": "2444:289:78",
                    "statements": [
                      {
                        "body": {
                          "id": 10997,
                          "nodeType": "Block",
                          "src": "2502:197:78",
                          "statements": [
                            {
                              "assignments": [
                                10975
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 10975,
                                  "mutability": "mutable",
                                  "name": "result",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10997,
                                  "src": "2516:13:78",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Status_$9061",
                                    "typeString": "enum ITokenValidator.Status"
                                  },
                                  "typeName": {
                                    "id": 10974,
                                    "name": "Status",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 9061,
                                    "src": "2516:6:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Status_$9061",
                                      "typeString": "enum ITokenValidator.Status"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 10983,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 10977,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10952,
                                    "src": "2542:5:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 10978,
                                      "name": "baseTokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10955,
                                      "src": "2549:10:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                        "typeString": "address[] calldata"
                                      }
                                    },
                                    "id": 10980,
                                    "indexExpression": {
                                      "id": 10979,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10964,
                                      "src": "2560:1:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2549:13:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 10981,
                                    "name": "amountToBorrow",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10957,
                                    "src": "2564:14:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 10976,
                                  "name": "_validate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11152,
                                  "src": "2532:9:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_enum$_Status_$9061_$",
                                    "typeString": "function (address,address,uint256) returns (enum ITokenValidator.Status)"
                                  }
                                },
                                "id": 10982,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2532:47:78",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Status_$9061",
                                  "typeString": "enum ITokenValidator.Status"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2516:63:78"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 10992,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_Status_$9061",
                                    "typeString": "enum ITokenValidator.Status"
                                  },
                                  "id": 10987,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 10984,
                                    "name": "result",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10975,
                                    "src": "2597:6:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Status_$9061",
                                      "typeString": "enum ITokenValidator.Status"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "expression": {
                                      "id": 10985,
                                      "name": "Status",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9061,
                                      "src": "2607:6:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_Status_$9061_$",
                                        "typeString": "type(enum ITokenValidator.Status)"
                                      }
                                    },
                                    "id": 10986,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "FOT",
                                    "nodeType": "MemberAccess",
                                    "src": "2607:10:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Status_$9061",
                                      "typeString": "enum ITokenValidator.Status"
                                    }
                                  },
                                  "src": "2597:20:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_Status_$9061",
                                    "typeString": "enum ITokenValidator.Status"
                                  },
                                  "id": 10991,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 10988,
                                    "name": "result",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10975,
                                    "src": "2621:6:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Status_$9061",
                                      "typeString": "enum ITokenValidator.Status"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "expression": {
                                      "id": 10989,
                                      "name": "Status",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9061,
                                      "src": "2631:6:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_Status_$9061_$",
                                        "typeString": "type(enum ITokenValidator.Status)"
                                      }
                                    },
                                    "id": 10990,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "STF",
                                    "nodeType": "MemberAccess",
                                    "src": "2631:10:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Status_$9061",
                                      "typeString": "enum ITokenValidator.Status"
                                    }
                                  },
                                  "src": "2621:20:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "2597:44:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 10996,
                              "nodeType": "IfStatement",
                              "src": "2593:96:78",
                              "trueBody": {
                                "id": 10995,
                                "nodeType": "Block",
                                "src": "2643:46:78",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 10993,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10975,
                                      "src": "2668:6:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_Status_$9061",
                                        "typeString": "enum ITokenValidator.Status"
                                      }
                                    },
                                    "functionReturnParameters": 10962,
                                    "id": 10994,
                                    "nodeType": "Return",
                                    "src": "2661:13:78"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10967,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10964,
                            "src": "2474:1:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 10968,
                              "name": "baseTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10955,
                              "src": "2478:10:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 10969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "2478:17:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2474:21:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10998,
                        "initializationExpression": {
                          "assignments": [
                            10964
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 10964,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 10998,
                              "src": "2459:9:78",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 10963,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2459:7:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 10966,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 10965,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2471:1:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2459:13:78"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 10972,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "2497:3:78",
                            "subExpression": {
                              "id": 10971,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10964,
                              "src": "2497:1:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10973,
                          "nodeType": "ExpressionStatement",
                          "src": "2497:3:78"
                        },
                        "nodeType": "ForStatement",
                        "src": "2454:245:78"
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 10999,
                            "name": "Status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9061,
                            "src": "2715:6:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Status_$9061_$",
                              "typeString": "type(enum ITokenValidator.Status)"
                            }
                          },
                          "id": 11000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "UNKN",
                          "nodeType": "MemberAccess",
                          "src": "2715:11:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Status_$9061",
                            "typeString": "enum ITokenValidator.Status"
                          }
                        },
                        "functionReturnParameters": 10962,
                        "id": 11001,
                        "nodeType": "Return",
                        "src": "2708:18:78"
                      }
                    ]
                  },
                  "functionSelector": "0143aace",
                  "id": 11003,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "validate",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10959,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2418:8:78"
                  },
                  "parameters": {
                    "id": 10958,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10952,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 11003,
                        "src": "2320:13:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10951,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2320:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10955,
                        "mutability": "mutable",
                        "name": "baseTokens",
                        "nodeType": "VariableDeclaration",
                        "scope": 11003,
                        "src": "2343:29:78",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10953,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2343:7:78",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 10954,
                          "nodeType": "ArrayTypeName",
                          "src": "2343:9:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10957,
                        "mutability": "mutable",
                        "name": "amountToBorrow",
                        "nodeType": "VariableDeclaration",
                        "scope": 11003,
                        "src": "2382:22:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10956,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2382:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2310:100:78"
                  },
                  "returnParameters": {
                    "id": 10962,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10961,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 11003,
                        "src": "2436:6:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Status_$9061",
                          "typeString": "enum ITokenValidator.Status"
                        },
                        "typeName": {
                          "id": 10960,
                          "name": "Status",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 9061,
                          "src": "2436:6:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Status_$9061",
                            "typeString": "enum ITokenValidator.Status"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2435:8:78"
                  },
                  "scope": 11309,
                  "src": "2293:440:78",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 11151,
                    "nodeType": "Block",
                    "src": "2872:1412:78",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 11016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 11014,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11005,
                            "src": "2886:5:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 11015,
                            "name": "baseToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11007,
                            "src": "2895:9:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2886:18:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11021,
                        "nodeType": "IfStatement",
                        "src": "2882:67:78",
                        "trueBody": {
                          "id": 11020,
                          "nodeType": "Block",
                          "src": "2906:43:78",
                          "statements": [
                            {
                              "expression": {
                                "expression": {
                                  "id": 11017,
                                  "name": "Status",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9061,
                                  "src": "2927:6:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_Status_$9061_$",
                                    "typeString": "type(enum ITokenValidator.Status)"
                                  }
                                },
                                "id": 11018,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "UNKN",
                                "nodeType": "MemberAccess",
                                "src": "2927:11:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Status_$9061",
                                  "typeString": "enum ITokenValidator.Status"
                                }
                              },
                              "functionReturnParameters": 11013,
                              "id": 11019,
                              "nodeType": "Return",
                              "src": "2920:18:78"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          11023
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11023,
                            "mutability": "mutable",
                            "name": "pairAddress",
                            "nodeType": "VariableDeclaration",
                            "scope": 11151,
                            "src": "2959:19:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 11022,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2959:7:78",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11032,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 11026,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "3009:4:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_TokenValidator_$11309",
                                    "typeString": "contract TokenValidator"
                                  }
                                },
                                "id": 11027,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "factoryClassic",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7689,
                                "src": "3009:19:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 11028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3009:21:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 11029,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11005,
                              "src": "3032:5:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 11030,
                              "name": "baseToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11007,
                              "src": "3039:9:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 11024,
                              "name": "AstraClassicLibrary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11656,
                              "src": "2981:19:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_AstraClassicLibrary_$11656_$",
                                "typeString": "type(library AstraClassicLibrary)"
                              }
                            },
                            "id": 11025,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pairFor",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11403,
                            "src": "2981:27:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,address,address) pure returns (address)"
                            }
                          },
                          "id": 11031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2981:68:78",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2959:90:78"
                      },
                      {
                        "assignments": [
                          null,
                          11034
                        ],
                        "declarations": [
                          null,
                          {
                            "constant": false,
                            "id": 11034,
                            "mutability": "mutable",
                            "name": "returnData",
                            "nodeType": "VariableDeclaration",
                            "scope": 11151,
                            "src": "3222:23:78",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 11033,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3222:5:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11047,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 11042,
                                      "name": "IAstraPair",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4481,
                                      "src": "3298:10:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IAstraPair_$4481_$",
                                        "typeString": "type(contract IAstraPair)"
                                      }
                                    },
                                    "id": 11043,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "token0",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4409,
                                    "src": "3298:17:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_view$__$returns$_t_address_$",
                                      "typeString": "function IAstraPair.token0() view returns (address)"
                                    }
                                  },
                                  "id": 11044,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "3298:26:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                ],
                                "expression": {
                                  "id": 11040,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "3275:3:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 11041,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "3275:22:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 11045,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3275:50:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 11037,
                                  "name": "pairAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11023,
                                  "src": "3257:11:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 11036,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3249:7:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 11035,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3249:7:78",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 11038,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3249:20:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 11039,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "src": "3249:25:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 11046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3249:77:78",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3219:107:78"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11051,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 11048,
                              "name": "returnData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11034,
                              "src": "3341:10:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 11049,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "3341:17:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 11050,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3362:1:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3341:22:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11056,
                        "nodeType": "IfStatement",
                        "src": "3337:71:78",
                        "trueBody": {
                          "id": 11055,
                          "nodeType": "Block",
                          "src": "3365:43:78",
                          "statements": [
                            {
                              "expression": {
                                "expression": {
                                  "id": 11052,
                                  "name": "Status",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9061,
                                  "src": "3386:6:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_Status_$9061_$",
                                    "typeString": "type(enum ITokenValidator.Status)"
                                  }
                                },
                                "id": 11053,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "UNKN",
                                "nodeType": "MemberAccess",
                                "src": "3386:11:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Status_$9061",
                                  "typeString": "enum ITokenValidator.Status"
                                }
                              },
                              "functionReturnParameters": 11013,
                              "id": 11054,
                              "nodeType": "Return",
                              "src": "3379:18:78"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          11058
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11058,
                            "mutability": "mutable",
                            "name": "token0Address",
                            "nodeType": "VariableDeclaration",
                            "scope": 11151,
                            "src": "3418:21:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 11057,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3418:7:78",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11066,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 11061,
                              "name": "returnData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11034,
                              "src": "3453:10:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 11063,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3466:7:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 11062,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3466:7:78",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "id": 11064,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "3465:9:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              }
                            ],
                            "expression": {
                              "id": 11059,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "3442:3:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 11060,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "3442:10:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 11065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3442:33:78",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3418:57:78"
                      },
                      {
                        "assignments": [
                          11068,
                          11070
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11068,
                            "mutability": "mutable",
                            "name": "amount0Out",
                            "nodeType": "VariableDeclaration",
                            "scope": 11151,
                            "src": "3526:18:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11067,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3526:7:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 11070,
                            "mutability": "mutable",
                            "name": "amount1Out",
                            "nodeType": "VariableDeclaration",
                            "scope": 11151,
                            "src": "3546:18:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11069,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3546:7:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11087,
                        "initialValue": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 11073,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 11071,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11005,
                              "src": "3580:5:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 11072,
                              "name": "token0Address",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11058,
                              "src": "3589:13:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "3580:22:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "components": [
                              {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 11082,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3645:1:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 11081,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3637:7:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 11080,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3637:7:78",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 11083,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3637:10:78",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 11084,
                                "name": "amountToBorrow",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11009,
                                "src": "3649:14:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 11085,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "3636:28:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "id": 11086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "3580:84:78",
                          "trueExpression": {
                            "components": [
                              {
                                "id": 11074,
                                "name": "amountToBorrow",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11009,
                                "src": "3606:14:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 11077,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3630:1:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 11076,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3622:7:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 11075,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3622:7:78",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 11078,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3622:10:78",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 11079,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "3605:28:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3525:139:78"
                      },
                      {
                        "assignments": [
                          11089
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11089,
                            "mutability": "mutable",
                            "name": "balanceBeforeLoan",
                            "nodeType": "VariableDeclaration",
                            "scope": 11151,
                            "src": "3675:25:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11088,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3675:7:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11099,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 11096,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "3735:4:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_TokenValidator_$11309",
                                    "typeString": "contract TokenValidator"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_TokenValidator_$11309",
                                    "typeString": "contract TokenValidator"
                                  }
                                ],
                                "id": 11095,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3727:7:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 11094,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3727:7:78",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 11097,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3727:13:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 11091,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11005,
                                  "src": "3710:5:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 11090,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5876,
                                "src": "3703:6:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 11092,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3703:13:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$5876",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 11093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5815,
                            "src": "3703:23:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 11098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3703:38:78",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3675:66:78"
                      },
                      {
                        "assignments": [
                          11101
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11101,
                            "mutability": "mutable",
                            "name": "pair",
                            "nodeType": "VariableDeclaration",
                            "scope": 11151,
                            "src": "3752:15:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraPair_$4481",
                              "typeString": "contract IAstraPair"
                            },
                            "typeName": {
                              "id": 11100,
                              "name": "IAstraPair",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4481,
                              "src": "3752:10:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                "typeString": "contract IAstraPair"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11105,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 11103,
                              "name": "pairAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11023,
                              "src": "3781:11:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 11102,
                            "name": "IAstraPair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4481,
                            "src": "3770:10:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IAstraPair_$4481_$",
                              "typeString": "type(contract IAstraPair)"
                            }
                          },
                          "id": 11104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3770:23:78",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraPair_$4481",
                            "typeString": "contract IAstraPair"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3752:41:78"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 11120,
                              "nodeType": "Block",
                              "src": "3924:2:78",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 11121,
                            "nodeType": "TryCatchClause",
                            "src": "3924:2:78"
                          },
                          {
                            "block": {
                              "id": 11144,
                              "nodeType": "Block",
                              "src": "3961:226:78",
                              "statements": [
                                {
                                  "condition": {
                                    "arguments": [
                                      {
                                        "id": 11126,
                                        "name": "reason",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11123,
                                        "src": "3991:6:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      ],
                                      "id": 11125,
                                      "name": "isFotFailed",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11174,
                                      "src": "3979:11:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bool_$",
                                        "typeString": "function (string memory) pure returns (bool)"
                                      }
                                    },
                                    "id": 11127,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3979:19:78",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 11132,
                                  "nodeType": "IfStatement",
                                  "src": "3975:75:78",
                                  "trueBody": {
                                    "id": 11131,
                                    "nodeType": "Block",
                                    "src": "4000:50:78",
                                    "statements": [
                                      {
                                        "expression": {
                                          "expression": {
                                            "id": 11128,
                                            "name": "Status",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 9061,
                                            "src": "4025:6:78",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Status_$9061_$",
                                              "typeString": "type(enum ITokenValidator.Status)"
                                            }
                                          },
                                          "id": 11129,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "FOT",
                                          "nodeType": "MemberAccess",
                                          "src": "4025:10:78",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Status_$9061",
                                            "typeString": "enum ITokenValidator.Status"
                                          }
                                        },
                                        "functionReturnParameters": 11013,
                                        "id": 11130,
                                        "nodeType": "Return",
                                        "src": "4018:17:78"
                                      }
                                    ]
                                  }
                                },
                                {
                                  "condition": {
                                    "arguments": [
                                      {
                                        "id": 11134,
                                        "name": "reason",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11123,
                                        "src": "4085:6:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      ],
                                      "id": 11133,
                                      "name": "isTransferFailed",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11226,
                                      "src": "4068:16:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bool_$",
                                        "typeString": "function (string memory) pure returns (bool)"
                                      }
                                    },
                                    "id": 11135,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4068:24:78",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 11140,
                                  "nodeType": "IfStatement",
                                  "src": "4064:80:78",
                                  "trueBody": {
                                    "id": 11139,
                                    "nodeType": "Block",
                                    "src": "4094:50:78",
                                    "statements": [
                                      {
                                        "expression": {
                                          "expression": {
                                            "id": 11136,
                                            "name": "Status",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 9061,
                                            "src": "4119:6:78",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Status_$9061_$",
                                              "typeString": "type(enum ITokenValidator.Status)"
                                            }
                                          },
                                          "id": 11137,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "STF",
                                          "nodeType": "MemberAccess",
                                          "src": "4119:10:78",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Status_$9061",
                                            "typeString": "enum ITokenValidator.Status"
                                          }
                                        },
                                        "functionReturnParameters": 11013,
                                        "id": 11138,
                                        "nodeType": "Return",
                                        "src": "4112:17:78"
                                      }
                                    ]
                                  }
                                },
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 11141,
                                      "name": "Status",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9061,
                                      "src": "4165:6:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_Status_$9061_$",
                                        "typeString": "type(enum ITokenValidator.Status)"
                                      }
                                    },
                                    "id": 11142,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "UNKN",
                                    "nodeType": "MemberAccess",
                                    "src": "4165:11:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Status_$9061",
                                      "typeString": "enum ITokenValidator.Status"
                                    }
                                  },
                                  "functionReturnParameters": 11013,
                                  "id": 11143,
                                  "nodeType": "Return",
                                  "src": "4158:18:78"
                                }
                              ]
                            },
                            "errorName": "Error",
                            "id": 11145,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 11124,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 11123,
                                  "mutability": "mutable",
                                  "name": "reason",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 11145,
                                  "src": "3939:20:78",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string"
                                  },
                                  "typeName": {
                                    "id": 11122,
                                    "name": "string",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3939:6:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_storage_ptr",
                                      "typeString": "string"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3938:22:78"
                            },
                            "src": "3927:260:78"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "id": 11108,
                              "name": "amount0Out",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11068,
                              "src": "3830:10:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 11109,
                              "name": "amount1Out",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11070,
                              "src": "3842:10:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 11112,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "3862:4:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_TokenValidator_$11309",
                                    "typeString": "contract TokenValidator"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_TokenValidator_$11309",
                                    "typeString": "contract TokenValidator"
                                  }
                                ],
                                "id": 11111,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3854:7:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 11110,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3854:7:78",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 11113,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3854:13:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 11116,
                                  "name": "balanceBeforeLoan",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11089,
                                  "src": "3880:17:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 11117,
                                  "name": "amountToBorrow",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11009,
                                  "src": "3899:14:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 11114,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "3869:3:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 11115,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "3869:10:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 11118,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3869:45:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 11106,
                              "name": "pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11101,
                              "src": "3820:4:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                "typeString": "contract IAstraPair"
                              }
                            },
                            "id": 11107,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4465,
                            "src": "3820:9:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (uint256,uint256,address,bytes memory) external"
                            }
                          },
                          "id": 11119,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3820:95:78",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11146,
                        "nodeType": "TryStatement",
                        "src": "3804:383:78"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "556e6578706563746564206572726f72",
                              "id": 11148,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4258:18:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff",
                                "typeString": "literal_string \"Unexpected error\""
                              },
                              "value": "Unexpected error"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_9b951eb3fb3742579e39d15610bb1800acf108358e69a1cabf56fc48cbe86cff",
                                "typeString": "literal_string \"Unexpected error\""
                              }
                            ],
                            "id": 11147,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -19,
                              -19
                            ],
                            "referencedDeclaration": -19,
                            "src": "4251:6:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 11149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4251:26:78",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11150,
                        "nodeType": "ExpressionStatement",
                        "src": "4251:26:78"
                      }
                    ]
                  },
                  "id": 11152,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_validate",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11010,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11005,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "scope": 11152,
                        "src": "2767:13:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11004,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2767:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11007,
                        "mutability": "mutable",
                        "name": "baseToken",
                        "nodeType": "VariableDeclaration",
                        "scope": 11152,
                        "src": "2790:17:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11006,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2790:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11009,
                        "mutability": "mutable",
                        "name": "amountToBorrow",
                        "nodeType": "VariableDeclaration",
                        "scope": 11152,
                        "src": "2817:22:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11008,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2817:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2757:88:78"
                  },
                  "returnParameters": {
                    "id": 11013,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11012,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 11152,
                        "src": "2864:6:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Status_$9061",
                          "typeString": "enum ITokenValidator.Status"
                        },
                        "typeName": {
                          "id": 11011,
                          "name": "Status",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 9061,
                          "src": "2864:6:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Status_$9061",
                            "typeString": "enum ITokenValidator.Status"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2863:8:78"
                  },
                  "scope": 11309,
                  "src": "2739:1545:78",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 11173,
                    "nodeType": "Block",
                    "src": "4362:87:78",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 11171,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 11162,
                                    "name": "reason",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11154,
                                    "src": "4395:6:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 11161,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4389:5:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 11160,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4389:5:78",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 11163,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4389:13:78",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 11159,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "4379:9:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 11164,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4379:24:78",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 11168,
                                    "name": "FOT_REVERT_STRING",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10885,
                                    "src": "4423:17:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 11167,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4417:5:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 11166,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4417:5:78",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 11169,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4417:24:78",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 11165,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "4407:9:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 11170,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4407:35:78",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4379:63:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 11158,
                        "id": 11172,
                        "nodeType": "Return",
                        "src": "4372:70:78"
                      }
                    ]
                  },
                  "id": 11174,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isFotFailed",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11155,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11154,
                        "mutability": "mutable",
                        "name": "reason",
                        "nodeType": "VariableDeclaration",
                        "scope": 11174,
                        "src": "4311:20:78",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 11153,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4311:6:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4310:22:78"
                  },
                  "returnParameters": {
                    "id": 11158,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11157,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 11174,
                        "src": "4356:4:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 11156,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4356:4:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4355:6:78"
                  },
                  "scope": 11309,
                  "src": "4290:159:78",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 11225,
                    "nodeType": "Block",
                    "src": "4532:717:78",
                    "statements": [
                      {
                        "assignments": [
                          11182
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11182,
                            "mutability": "mutable",
                            "name": "stf",
                            "nodeType": "VariableDeclaration",
                            "scope": 11225,
                            "src": "4664:17:78",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 11181,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "4664:6:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11184,
                        "initialValue": {
                          "id": 11183,
                          "name": "STF_REVERT_STRING_SUFFIX",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10888,
                          "src": "4684:24:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4664:44:78"
                      },
                      {
                        "assignments": [
                          11186
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11186,
                            "mutability": "mutable",
                            "name": "reasonLength",
                            "nodeType": "VariableDeclaration",
                            "scope": 11225,
                            "src": "4719:20:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11185,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4719:7:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11192,
                        "initialValue": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 11189,
                                "name": "reason",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11176,
                                "src": "4748:6:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 11188,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4742:5:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": {
                                "id": 11187,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "4742:5:78",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 11190,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4742:13:78",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 11191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "4742:20:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4719:43:78"
                      },
                      {
                        "assignments": [
                          11194
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11194,
                            "mutability": "mutable",
                            "name": "suffixLength",
                            "nodeType": "VariableDeclaration",
                            "scope": 11225,
                            "src": "4772:20:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11193,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4772:7:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11200,
                        "initialValue": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 11197,
                                "name": "stf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11182,
                                "src": "4801:3:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 11196,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4795:5:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": {
                                "id": 11195,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "4795:5:78",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 11198,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4795:10:78",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 11199,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "4795:17:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4772:40:78"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 11201,
                            "name": "reasonLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11186,
                            "src": "4826:12:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 11202,
                            "name": "suffixLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11194,
                            "src": "4841:12:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4826:27:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11207,
                        "nodeType": "IfStatement",
                        "src": "4822:70:78",
                        "trueBody": {
                          "id": 11206,
                          "nodeType": "Block",
                          "src": "4855:37:78",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "66616c7365",
                                "id": 11204,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4876:5:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 11180,
                              "id": 11205,
                              "nodeType": "Return",
                              "src": "4869:12:78"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          11209
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11209,
                            "mutability": "mutable",
                            "name": "ptr",
                            "nodeType": "VariableDeclaration",
                            "scope": 11225,
                            "src": "4902:11:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11208,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4902:7:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11210,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4902:11:78"
                      },
                      {
                        "assignments": [
                          11212
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11212,
                            "mutability": "mutable",
                            "name": "offset",
                            "nodeType": "VariableDeclaration",
                            "scope": 11225,
                            "src": "4923:14:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11211,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4923:7:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11218,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11217,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 11215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "3332",
                              "id": 11213,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4940:2:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 11214,
                              "name": "reasonLength",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11186,
                              "src": "4945:12:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4940:17:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 11216,
                            "name": "suffixLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11194,
                            "src": "4960:12:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4940:32:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4923:49:78"
                      },
                      {
                        "assignments": [
                          11220
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11220,
                            "mutability": "mutable",
                            "name": "transferFailed",
                            "nodeType": "VariableDeclaration",
                            "scope": 11225,
                            "src": "4982:19:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 11219,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4982:4:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11221,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4982:19:78"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5020:191:78",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5034:26:78",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "reason",
                                    "nodeType": "YulIdentifier",
                                    "src": "5045:6:78"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "5053:6:78"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5041:3:78"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5041:19:78"
                              },
                              "variableNames": [
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5034:3:78"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5073:29:78",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "stf",
                                    "nodeType": "YulIdentifier",
                                    "src": "5094:3:78"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5099:2:78",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5090:3:78"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5090:12:78"
                              },
                              "variables": [
                                {
                                  "name": "suffixPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "5077:9:78",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5115:86:78",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5146:3:78"
                                      },
                                      {
                                        "name": "suffixLength",
                                        "nodeType": "YulIdentifier",
                                        "src": "5151:12:78"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "5136:9:78"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5136:28:78"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "suffixPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5176:9:78"
                                      },
                                      {
                                        "name": "suffixLength",
                                        "nodeType": "YulIdentifier",
                                        "src": "5187:12:78"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "5166:9:78"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5166:34:78"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "5133:2:78"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5133:68:78"
                              },
                              "variableNames": [
                                {
                                  "name": "transferFailed",
                                  "nodeType": "YulIdentifier",
                                  "src": "5115:14:78"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 11212,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5053:6:78",
                            "valueSize": 1
                          },
                          {
                            "declaration": 11209,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5034:3:78",
                            "valueSize": 1
                          },
                          {
                            "declaration": 11209,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5146:3:78",
                            "valueSize": 1
                          },
                          {
                            "declaration": 11176,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5045:6:78",
                            "valueSize": 1
                          },
                          {
                            "declaration": 11182,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5094:3:78",
                            "valueSize": 1
                          },
                          {
                            "declaration": 11194,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5151:12:78",
                            "valueSize": 1
                          },
                          {
                            "declaration": 11194,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5187:12:78",
                            "valueSize": 1
                          },
                          {
                            "declaration": 11220,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5115:14:78",
                            "valueSize": 1
                          }
                        ],
                        "id": 11222,
                        "nodeType": "InlineAssembly",
                        "src": "5011:200:78"
                      },
                      {
                        "expression": {
                          "id": 11223,
                          "name": "transferFailed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11220,
                          "src": "5228:14:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 11180,
                        "id": 11224,
                        "nodeType": "Return",
                        "src": "5221:21:78"
                      }
                    ]
                  },
                  "id": 11226,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isTransferFailed",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11177,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11176,
                        "mutability": "mutable",
                        "name": "reason",
                        "nodeType": "VariableDeclaration",
                        "scope": 11226,
                        "src": "4481:20:78",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 11175,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4481:6:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4480:22:78"
                  },
                  "returnParameters": {
                    "id": 11180,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11179,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 11226,
                        "src": "4526:4:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 11178,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4526:4:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4525:6:78"
                  },
                  "scope": 11309,
                  "src": "4455:794:78",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    4238
                  ],
                  "body": {
                    "id": 11307,
                    "nodeType": "Block",
                    "src": "5391:977:78",
                    "statements": [
                      {
                        "assignments": [
                          11239
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11239,
                            "mutability": "mutable",
                            "name": "pair",
                            "nodeType": "VariableDeclaration",
                            "scope": 11307,
                            "src": "5401:15:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraPair_$4481",
                              "typeString": "contract IAstraPair"
                            },
                            "typeName": {
                              "id": 11238,
                              "name": "IAstraPair",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4481,
                              "src": "5401:10:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                "typeString": "contract IAstraPair"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11244,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 11241,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "5430:3:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 11242,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "5430:10:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 11240,
                            "name": "IAstraPair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4481,
                            "src": "5419:10:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IAstraPair_$4481_$",
                              "typeString": "type(contract IAstraPair)"
                            }
                          },
                          "id": 11243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5419:22:78",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraPair_$4481",
                            "typeString": "contract IAstraPair"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5401:40:78"
                      },
                      {
                        "assignments": [
                          11246,
                          11248
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11246,
                            "mutability": "mutable",
                            "name": "token0",
                            "nodeType": "VariableDeclaration",
                            "scope": 11307,
                            "src": "5452:14:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 11245,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5452:7:78",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 11248,
                            "mutability": "mutable",
                            "name": "token1",
                            "nodeType": "VariableDeclaration",
                            "scope": 11307,
                            "src": "5468:14:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 11247,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5468:7:78",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11256,
                        "initialValue": {
                          "components": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 11249,
                                  "name": "pair",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11239,
                                  "src": "5487:4:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                    "typeString": "contract IAstraPair"
                                  }
                                },
                                "id": 11250,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token0",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4409,
                                "src": "5487:11:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 11251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5487:13:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 11252,
                                  "name": "pair",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11239,
                                  "src": "5502:4:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                    "typeString": "contract IAstraPair"
                                  }
                                },
                                "id": 11253,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token1",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4414,
                                "src": "5502:11:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 11254,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5502:13:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 11255,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5486:30:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5451:65:78"
                      },
                      {
                        "assignments": [
                          11258
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11258,
                            "mutability": "mutable",
                            "name": "tokenBorrowed",
                            "nodeType": "VariableDeclaration",
                            "scope": 11307,
                            "src": "5527:20:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$5876",
                              "typeString": "contract IERC20"
                            },
                            "typeName": {
                              "id": 11257,
                              "name": "IERC20",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 5876,
                              "src": "5527:6:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$5876",
                                "typeString": "contract IERC20"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11267,
                        "initialValue": {
                          "arguments": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 11262,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 11260,
                                  "name": "amount0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11230,
                                  "src": "5557:7:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 11261,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5567:1:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "5557:11:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "id": 11264,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11248,
                                "src": "5580:6:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 11265,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "5557:29:78",
                              "trueExpression": {
                                "id": 11263,
                                "name": "token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11246,
                                "src": "5571:6:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 11259,
                            "name": "IERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5876,
                            "src": "5550:6:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                              "typeString": "type(contract IERC20)"
                            }
                          },
                          "id": 11266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5550:37:78",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$5876",
                            "typeString": "contract IERC20"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5527:60:78"
                      },
                      {
                        "assignments": [
                          11269,
                          11271
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11269,
                            "mutability": "mutable",
                            "name": "balanceBeforeLoan",
                            "nodeType": "VariableDeclaration",
                            "scope": 11307,
                            "src": "5599:25:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11268,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5599:7:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 11271,
                            "mutability": "mutable",
                            "name": "amountRequestedToBorrow",
                            "nodeType": "VariableDeclaration",
                            "scope": 11307,
                            "src": "5626:31:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11270,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5626:7:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11281,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 11274,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11234,
                              "src": "5672:4:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 11276,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5679:7:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 11275,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5679:7:78",
                                    "typeDescriptions": {}
                                  }
                                },
                                {
                                  "id": 11278,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5688:7:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 11277,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5688:7:78",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "id": 11279,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "5678:18:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                "typeString": "tuple(type(uint256),type(uint256))"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                "typeString": "tuple(type(uint256),type(uint256))"
                              }
                            ],
                            "expression": {
                              "id": 11272,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "5661:3:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 11273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "5661:10:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 11280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5661:36:78",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5598:99:78"
                      },
                      {
                        "assignments": [
                          11283
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11283,
                            "mutability": "mutable",
                            "name": "amountBorrowed",
                            "nodeType": "VariableDeclaration",
                            "scope": 11307,
                            "src": "5707:22:78",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11282,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5707:7:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11293,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 11288,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "5764:4:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_TokenValidator_$11309",
                                      "typeString": "contract TokenValidator"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_TokenValidator_$11309",
                                      "typeString": "contract TokenValidator"
                                    }
                                  ],
                                  "id": 11287,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5756:7:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 11286,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5756:7:78",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 11289,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5756:13:78",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 11284,
                                "name": "tokenBorrowed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11258,
                                "src": "5732:13:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$5876",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 11285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5815,
                              "src": "5732:23:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 11290,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5732:38:78",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 11291,
                            "name": "balanceBeforeLoan",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11269,
                            "src": "5773:17:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5732:58:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5707:83:78"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 11294,
                            "name": "amountBorrowed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11283,
                            "src": "5954:14:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 11295,
                            "name": "amountRequestedToBorrow",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11271,
                            "src": "5972:23:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5954:41:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11302,
                        "nodeType": "IfStatement",
                        "src": "5950:97:78",
                        "trueBody": {
                          "id": 11301,
                          "nodeType": "Block",
                          "src": "5997:50:78",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 11298,
                                    "name": "FOT_REVERT_STRING",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10885,
                                    "src": "6018:17:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 11297,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -19,
                                    -19
                                  ],
                                  "referencedDeclaration": -19,
                                  "src": "6011:6:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 11299,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6011:25:78",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 11300,
                              "nodeType": "ExpressionStatement",
                              "src": "6011:25:78"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "556e6b6e6f776e",
                              "id": 11304,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6351:9:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6ff165d3fe0272c13129fc9e1aecd998364a5fdcad04c6ae84a7d1dfc3d06a17",
                                "typeString": "literal_string \"Unknown\""
                              },
                              "value": "Unknown"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_6ff165d3fe0272c13129fc9e1aecd998364a5fdcad04c6ae84a7d1dfc3d06a17",
                                "typeString": "literal_string \"Unknown\""
                              }
                            ],
                            "id": 11303,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -19,
                              -19
                            ],
                            "referencedDeclaration": -19,
                            "src": "6344:6:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 11305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6344:17:78",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11306,
                        "nodeType": "ExpressionStatement",
                        "src": "6344:17:78"
                      }
                    ]
                  },
                  "functionSelector": "ee906f6b",
                  "id": 11308,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "astraCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 11236,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "5382:8:78"
                  },
                  "parameters": {
                    "id": 11235,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11228,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 11308,
                        "src": "5283:7:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11227,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5283:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11230,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nodeType": "VariableDeclaration",
                        "scope": 11308,
                        "src": "5300:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11229,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5300:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11232,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 11308,
                        "src": "5325:7:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11231,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5325:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11234,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 11308,
                        "src": "5342:19:78",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 11233,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5342:5:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5273:94:78"
                  },
                  "returnParameters": {
                    "id": 11237,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5391:0:78"
                  },
                  "scope": 11309,
                  "src": "5255:1113:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 11310,
              "src": "1563:4807:78"
            }
          ],
          "src": "45:6326:78"
        },
        "id": 78
      },
      "contracts/libraries/AstraClassicLibrary.sol": {
        "ast": {
          "absolutePath": "contracts/libraries/AstraClassicLibrary.sol",
          "exportedSymbols": {
            "AstraClassicLibrary": [
              11656
            ],
            "IAstraPair": [
              4481
            ],
            "LowGasSafeMath": [
              1043
            ]
          },
          "id": 11657,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11311,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:79"
            },
            {
              "absolutePath": "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol",
              "file": "@airdao/astra-contracts/contracts/core/interfaces/IAstraPair.sol",
              "id": 11312,
              "nodeType": "ImportDirective",
              "scope": 11657,
              "sourceUnit": 4482,
              "src": "71:74:79",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/LowGasSafeMath.sol",
              "id": 11313,
              "nodeType": "ImportDirective",
              "scope": 11657,
              "sourceUnit": 1044,
              "src": "146:70:79",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "fullyImplemented": true,
              "id": 11656,
              "linearizedBaseContracts": [
                11656
              ],
              "name": "AstraClassicLibrary",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 11316,
                  "libraryName": {
                    "id": 11314,
                    "name": "LowGasSafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1043,
                    "src": "258:14:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LowGasSafeMath_$1043",
                      "typeString": "library LowGasSafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "252:33:79",
                  "typeName": {
                    "id": 11315,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "277:7:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "body": {
                    "id": 11357,
                    "nodeType": "Block",
                    "src": "498:163:79",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 11330,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 11328,
                                "name": "tokenA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11318,
                                "src": "516:6:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 11329,
                                "name": "tokenB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11320,
                                "src": "526:6:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "516:16:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 11327,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "508:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 11331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "508:25:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11332,
                        "nodeType": "ExpressionStatement",
                        "src": "508:25:79"
                      },
                      {
                        "expression": {
                          "id": 11346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 11333,
                                "name": "token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11323,
                                "src": "544:6:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 11334,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11325,
                                "src": "552:6:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "id": 11335,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "543:16:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                              "typeString": "tuple(address,address)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 11338,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 11336,
                                "name": "tokenA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11318,
                                "src": "562:6:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 11337,
                                "name": "tokenB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11320,
                                "src": "571:6:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "562:15:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "components": [
                                {
                                  "id": 11342,
                                  "name": "tokenB",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11320,
                                  "src": "600:6:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 11343,
                                  "name": "tokenA",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11318,
                                  "src": "608:6:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "id": 11344,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "599:16:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                "typeString": "tuple(address,address)"
                              }
                            },
                            "id": 11345,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "562:53:79",
                            "trueExpression": {
                              "components": [
                                {
                                  "id": 11339,
                                  "name": "tokenA",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11318,
                                  "src": "581:6:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 11340,
                                  "name": "tokenB",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11320,
                                  "src": "589:6:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "id": 11341,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "580:16:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                "typeString": "tuple(address,address)"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                              "typeString": "tuple(address,address)"
                            }
                          },
                          "src": "543:72:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11347,
                        "nodeType": "ExpressionStatement",
                        "src": "543:72:79"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 11354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 11349,
                                "name": "token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11323,
                                "src": "633:6:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 11352,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "651:1:79",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 11351,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "643:7:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 11350,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "643:7:79",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 11353,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "643:10:79",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "633:20:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 11348,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "625:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 11355,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "625:29:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11356,
                        "nodeType": "ExpressionStatement",
                        "src": "625:29:79"
                      }
                    ]
                  },
                  "id": 11358,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sortTokens",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11318,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 11358,
                        "src": "411:14:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11317,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "411:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11320,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 11358,
                        "src": "427:14:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11319,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "427:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "410:32:79"
                  },
                  "returnParameters": {
                    "id": 11326,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11323,
                        "mutability": "mutable",
                        "name": "token0",
                        "nodeType": "VariableDeclaration",
                        "scope": 11358,
                        "src": "466:14:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11322,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "466:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11325,
                        "mutability": "mutable",
                        "name": "token1",
                        "nodeType": "VariableDeclaration",
                        "scope": 11358,
                        "src": "482:14:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11324,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "482:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "465:32:79"
                  },
                  "scope": 11656,
                  "src": "391:270:79",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 11402,
                    "nodeType": "Block",
                    "src": "883:500:79",
                    "statements": [
                      {
                        "assignments": [
                          11370,
                          11372
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11370,
                            "mutability": "mutable",
                            "name": "token0",
                            "nodeType": "VariableDeclaration",
                            "scope": 11402,
                            "src": "894:14:79",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 11369,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "894:7:79",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 11372,
                            "mutability": "mutable",
                            "name": "token1",
                            "nodeType": "VariableDeclaration",
                            "scope": 11402,
                            "src": "910:14:79",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 11371,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "910:7:79",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11377,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 11374,
                              "name": "tokenA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11362,
                              "src": "939:6:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 11375,
                              "name": "tokenB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11364,
                              "src": "947:6:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 11373,
                            "name": "sortTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11358,
                            "src": "928:10:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_address_$_t_address_$",
                              "typeString": "function (address,address) pure returns (address,address)"
                            }
                          },
                          "id": 11376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "928:26:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "893:61:79"
                      },
                      {
                        "expression": {
                          "id": 11400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 11378,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11367,
                            "src": "964:4:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "hexValue": "ff",
                                            "id": 11386,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "hexString",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1090:7:79",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                              "typeString": "literal_string hex\"ff\""
                                            }
                                          },
                                          {
                                            "id": 11387,
                                            "name": "factory",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11360,
                                            "src": "1123:7:79",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "id": 11391,
                                                    "name": "token0",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11370,
                                                    "src": "1183:6:79",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  {
                                                    "id": 11392,
                                                    "name": "token1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11372,
                                                    "src": "1191:6:79",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 11389,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -1,
                                                    "src": "1166:3:79",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_magic_abi",
                                                      "typeString": "abi"
                                                    }
                                                  },
                                                  "id": 11390,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "memberName": "encodePacked",
                                                  "nodeType": "MemberAccess",
                                                  "src": "1166:16:79",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                    "typeString": "function () pure returns (bytes memory)"
                                                  }
                                                },
                                                "id": 11393,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1166:32:79",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              ],
                                              "id": 11388,
                                              "name": "keccak256",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -8,
                                              "src": "1156:9:79",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                              }
                                            },
                                            "id": 11394,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1156:43:79",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          },
                                          {
                                            "hexValue": "400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f",
                                            "id": 11395,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "hexString",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1225:69:79",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_stringliteral_5ee0565125b079b74eb499a1368ed12c7a1a4e20c8420b837dbf6950c2773da5",
                                              "typeString": "literal_string hex\"400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f\""
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                              "typeString": "literal_string hex\"ff\""
                                            },
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            },
                                            {
                                              "typeIdentifier": "t_stringliteral_5ee0565125b079b74eb499a1368ed12c7a1a4e20c8420b837dbf6950c2773da5",
                                              "typeString": "literal_string hex\"400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f\""
                                            }
                                          ],
                                          "expression": {
                                            "id": 11384,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -1,
                                            "src": "1048:3:79",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 11385,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "src": "1048:16:79",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 11396,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1048:286:79",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 11383,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -8,
                                      "src": "1017:9:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 11397,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1017:335:79",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 11382,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "992:7:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 11381,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "992:7:79",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 11398,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "992:374:79",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 11380,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "971:7:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 11379,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "971:7:79",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 11399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "971:405:79",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "964:412:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 11401,
                        "nodeType": "ExpressionStatement",
                        "src": "964:412:79"
                      }
                    ]
                  },
                  "id": 11403,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pairFor",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11365,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11360,
                        "mutability": "mutable",
                        "name": "factory",
                        "nodeType": "VariableDeclaration",
                        "scope": 11403,
                        "src": "776:15:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11359,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "776:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11362,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 11403,
                        "src": "801:14:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11361,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "801:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11364,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 11403,
                        "src": "825:14:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11363,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "825:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "766:79:79"
                  },
                  "returnParameters": {
                    "id": 11368,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11367,
                        "mutability": "mutable",
                        "name": "pair",
                        "nodeType": "VariableDeclaration",
                        "scope": 11403,
                        "src": "869:12:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11366,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "869:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "868:14:79"
                  },
                  "scope": 11656,
                  "src": "750:633:79",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 11452,
                    "nodeType": "Block",
                    "src": "1597:268:79",
                    "statements": [
                      {
                        "assignments": [
                          11417,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11417,
                            "mutability": "mutable",
                            "name": "token0",
                            "nodeType": "VariableDeclaration",
                            "scope": 11452,
                            "src": "1608:14:79",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 11416,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1608:7:79",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 11422,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 11419,
                              "name": "tokenA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11407,
                              "src": "1639:6:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 11420,
                              "name": "tokenB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11409,
                              "src": "1647:6:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 11418,
                            "name": "sortTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11358,
                            "src": "1628:10:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_address_$_t_address_$",
                              "typeString": "function (address,address) pure returns (address,address)"
                            }
                          },
                          "id": 11421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1628:26:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1607:47:79"
                      },
                      {
                        "assignments": [
                          11424,
                          11426,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11424,
                            "mutability": "mutable",
                            "name": "reserve0",
                            "nodeType": "VariableDeclaration",
                            "scope": 11452,
                            "src": "1665:16:79",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11423,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1665:7:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 11426,
                            "mutability": "mutable",
                            "name": "reserve1",
                            "nodeType": "VariableDeclaration",
                            "scope": 11452,
                            "src": "1683:16:79",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11425,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1683:7:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 11436,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 11429,
                                      "name": "factory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11405,
                                      "src": "1724:7:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 11430,
                                      "name": "tokenA",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11407,
                                      "src": "1733:6:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 11431,
                                      "name": "tokenB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11409,
                                      "src": "1741:6:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 11428,
                                    "name": "pairFor",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11403,
                                    "src": "1716:7:79",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                                      "typeString": "function (address,address,address) pure returns (address)"
                                    }
                                  },
                                  "id": 11432,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1716:32:79",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 11427,
                                "name": "IAstraPair",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4481,
                                "src": "1705:10:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IAstraPair_$4481_$",
                                  "typeString": "type(contract IAstraPair)"
                                }
                              },
                              "id": 11433,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1705:44:79",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraPair_$4481",
                                "typeString": "contract IAstraPair"
                              }
                            },
                            "id": 11434,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getReserves",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4423,
                            "src": "1705:56:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$",
                              "typeString": "function () view external returns (uint112,uint112,uint32)"
                            }
                          },
                          "id": 11435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1705:58:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$",
                            "typeString": "tuple(uint112,uint112,uint32)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1664:99:79"
                      },
                      {
                        "expression": {
                          "id": 11450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 11437,
                                "name": "reserveA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11412,
                                "src": "1774:8:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 11438,
                                "name": "reserveB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11414,
                                "src": "1784:8:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 11439,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "1773:20:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 11442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 11440,
                                "name": "tokenA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11407,
                                "src": "1796:6:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 11441,
                                "name": "token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11417,
                                "src": "1806:6:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1796:16:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "components": [
                                {
                                  "id": 11446,
                                  "name": "reserve1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11426,
                                  "src": "1839:8:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 11447,
                                  "name": "reserve0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11424,
                                  "src": "1849:8:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 11448,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1838:20:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256)"
                              }
                            },
                            "id": 11449,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "1796:62:79",
                            "trueExpression": {
                              "components": [
                                {
                                  "id": 11443,
                                  "name": "reserve0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11424,
                                  "src": "1816:8:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 11444,
                                  "name": "reserve1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11426,
                                  "src": "1826:8:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 11445,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1815:20:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256)"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "src": "1773:85:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11451,
                        "nodeType": "ExpressionStatement",
                        "src": "1773:85:79"
                      }
                    ]
                  },
                  "id": 11453,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getReserves",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11410,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11405,
                        "mutability": "mutable",
                        "name": "factory",
                        "nodeType": "VariableDeclaration",
                        "scope": 11453,
                        "src": "1468:15:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11404,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1468:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11407,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 11453,
                        "src": "1493:14:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11406,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1493:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11409,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 11453,
                        "src": "1517:14:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11408,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1517:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1458:79:79"
                  },
                  "returnParameters": {
                    "id": 11415,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11412,
                        "mutability": "mutable",
                        "name": "reserveA",
                        "nodeType": "VariableDeclaration",
                        "scope": 11453,
                        "src": "1561:16:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11411,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1561:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11414,
                        "mutability": "mutable",
                        "name": "reserveB",
                        "nodeType": "VariableDeclaration",
                        "scope": 11453,
                        "src": "1579:16:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11413,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1579:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1560:36:79"
                  },
                  "scope": 11656,
                  "src": "1438:427:79",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 11511,
                    "nodeType": "Block",
                    "src": "2135:348:79",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 11467,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 11465,
                                "name": "amountIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11455,
                                "src": "2153:8:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 11466,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2164:1:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2153:12:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "494e53554646494349454e545f494e5055545f414d4f554e54",
                              "id": 11468,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2167:27:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9d0db5a8336d3a6beda7b5366eec56090619c00ecb7cb918d965197949f0508c",
                                "typeString": "literal_string \"INSUFFICIENT_INPUT_AMOUNT\""
                              },
                              "value": "INSUFFICIENT_INPUT_AMOUNT"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9d0db5a8336d3a6beda7b5366eec56090619c00ecb7cb918d965197949f0508c",
                                "typeString": "literal_string \"INSUFFICIENT_INPUT_AMOUNT\""
                              }
                            ],
                            "id": 11464,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2145:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 11469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2145:50:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11470,
                        "nodeType": "ExpressionStatement",
                        "src": "2145:50:79"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 11478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 11474,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 11472,
                                  "name": "reserveIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11457,
                                  "src": "2213:9:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 11473,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2225:1:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2213:13:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 11477,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 11475,
                                  "name": "reserveOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11459,
                                  "src": "2230:10:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 11476,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2243:1:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2230:14:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2213:31:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 11471,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2205:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 11479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2205:40:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11480,
                        "nodeType": "ExpressionStatement",
                        "src": "2205:40:79"
                      },
                      {
                        "assignments": [
                          11482
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11482,
                            "mutability": "mutable",
                            "name": "amountInWithFee",
                            "nodeType": "VariableDeclaration",
                            "scope": 11511,
                            "src": "2255:23:79",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11481,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2255:7:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11487,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "393937",
                              "id": 11485,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2294:3:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              },
                              "value": "997"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              }
                            ],
                            "expression": {
                              "id": 11483,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11455,
                              "src": "2281:8:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 11484,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 988,
                            "src": "2281:12:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 11486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2281:17:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2255:43:79"
                      },
                      {
                        "assignments": [
                          11489
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11489,
                            "mutability": "mutable",
                            "name": "numerator",
                            "nodeType": "VariableDeclaration",
                            "scope": 11511,
                            "src": "2308:17:79",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11488,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2308:7:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11494,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 11492,
                              "name": "reserveOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11459,
                              "src": "2348:10:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 11490,
                              "name": "amountInWithFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11482,
                              "src": "2328:15:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 11491,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 988,
                            "src": "2328:19:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 11493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2328:31:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2308:51:79"
                      },
                      {
                        "assignments": [
                          11496
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11496,
                            "mutability": "mutable",
                            "name": "denominator",
                            "nodeType": "VariableDeclaration",
                            "scope": 11511,
                            "src": "2369:19:79",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11495,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2369:7:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11504,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 11502,
                              "name": "amountInWithFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11482,
                              "src": "2415:15:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "hexValue": "31303030",
                                  "id": 11499,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2405:4:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000_by_1",
                                    "typeString": "int_const 1000"
                                  },
                                  "value": "1000"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_1000_by_1",
                                    "typeString": "int_const 1000"
                                  }
                                ],
                                "expression": {
                                  "id": 11497,
                                  "name": "reserveIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11457,
                                  "src": "2391:9:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 11498,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 988,
                                "src": "2391:13:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 11500,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2391:19:79",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 11501,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 938,
                            "src": "2391:23:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 11503,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2391:40:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2369:62:79"
                      },
                      {
                        "expression": {
                          "id": 11509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 11505,
                            "name": "amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11462,
                            "src": "2441:9:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 11508,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 11506,
                              "name": "numerator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11489,
                              "src": "2453:9:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "id": 11507,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11496,
                              "src": "2465:11:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2453:23:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2441:35:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 11510,
                        "nodeType": "ExpressionStatement",
                        "src": "2441:35:79"
                      }
                    ]
                  },
                  "id": 11512,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmountOut",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11460,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11455,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 11512,
                        "src": "2015:16:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11454,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2015:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11457,
                        "mutability": "mutable",
                        "name": "reserveIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 11512,
                        "src": "2041:17:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11456,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2041:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11459,
                        "mutability": "mutable",
                        "name": "reserveOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 11512,
                        "src": "2068:18:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11458,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2068:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2005:87:79"
                  },
                  "returnParameters": {
                    "id": 11463,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11462,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 11512,
                        "src": "2116:17:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11461,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2116:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2115:19:79"
                  },
                  "scope": 11656,
                  "src": "1984:499:79",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 11570,
                    "nodeType": "Block",
                    "src": "2751:302:79",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 11526,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 11524,
                                "name": "amountOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11514,
                                "src": "2769:9:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 11525,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2781:1:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2769:13:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "494e53554646494349454e545f4f55545055545f414d4f554e54",
                              "id": 11527,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2784:28:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_bbbb4868217c0daeb6721d77d471da8aa8a80672b4258dd2de9d7ccde9bf2146",
                                "typeString": "literal_string \"INSUFFICIENT_OUTPUT_AMOUNT\""
                              },
                              "value": "INSUFFICIENT_OUTPUT_AMOUNT"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_bbbb4868217c0daeb6721d77d471da8aa8a80672b4258dd2de9d7ccde9bf2146",
                                "typeString": "literal_string \"INSUFFICIENT_OUTPUT_AMOUNT\""
                              }
                            ],
                            "id": 11523,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2761:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 11528,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2761:52:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11529,
                        "nodeType": "ExpressionStatement",
                        "src": "2761:52:79"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 11537,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 11533,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 11531,
                                  "name": "reserveIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11516,
                                  "src": "2831:9:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 11532,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2843:1:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2831:13:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 11536,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 11534,
                                  "name": "reserveOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11518,
                                  "src": "2848:10:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 11535,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2861:1:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2848:14:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2831:31:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 11530,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2823:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 11538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2823:40:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11539,
                        "nodeType": "ExpressionStatement",
                        "src": "2823:40:79"
                      },
                      {
                        "assignments": [
                          11541
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11541,
                            "mutability": "mutable",
                            "name": "numerator",
                            "nodeType": "VariableDeclaration",
                            "scope": 11570,
                            "src": "2873:17:79",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11540,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2873:7:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11549,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "31303030",
                              "id": 11547,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2922:4:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000_by_1",
                                "typeString": "int_const 1000"
                              },
                              "value": "1000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1000_by_1",
                                "typeString": "int_const 1000"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 11544,
                                  "name": "amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11514,
                                  "src": "2907:9:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 11542,
                                  "name": "reserveIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11516,
                                  "src": "2893:9:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 11543,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 988,
                                "src": "2893:13:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 11545,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2893:24:79",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 11546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 988,
                            "src": "2893:28:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 11548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2893:34:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2873:54:79"
                      },
                      {
                        "assignments": [
                          11551
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11551,
                            "mutability": "mutable",
                            "name": "denominator",
                            "nodeType": "VariableDeclaration",
                            "scope": 11570,
                            "src": "2937:19:79",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11550,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2937:7:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11559,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "393937",
                              "id": 11557,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2989:3:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              },
                              "value": "997"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 11554,
                                  "name": "amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11514,
                                  "src": "2974:9:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 11552,
                                  "name": "reserveOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11518,
                                  "src": "2959:10:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 11553,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 960,
                                "src": "2959:14:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 11555,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2959:25:79",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 11556,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 988,
                            "src": "2959:29:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 11558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2959:34:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2937:56:79"
                      },
                      {
                        "expression": {
                          "id": 11568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 11560,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11521,
                            "src": "3003:8:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "31",
                                "id": 11566,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3044:1:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 11563,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 11561,
                                      "name": "numerator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11541,
                                      "src": "3015:9:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "/",
                                    "rightExpression": {
                                      "id": 11562,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11551,
                                      "src": "3027:11:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "3015:23:79",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 11564,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3014:25:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 11565,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 938,
                              "src": "3014:29:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 11567,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3014:32:79",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3003:43:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 11569,
                        "nodeType": "ExpressionStatement",
                        "src": "3003:43:79"
                      }
                    ]
                  },
                  "id": 11571,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmountIn",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11519,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11514,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 11571,
                        "src": "2631:17:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11513,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2631:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11516,
                        "mutability": "mutable",
                        "name": "reserveIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 11571,
                        "src": "2658:17:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11515,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2658:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11518,
                        "mutability": "mutable",
                        "name": "reserveOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 11571,
                        "src": "2685:18:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11517,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2685:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2621:88:79"
                  },
                  "returnParameters": {
                    "id": 11522,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11521,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 11571,
                        "src": "2733:16:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11520,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2733:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2732:18:79"
                  },
                  "scope": 11656,
                  "src": "2601:452:79",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 11654,
                    "nodeType": "Block",
                    "src": "3291:378:79",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 11588,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 11585,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11578,
                                  "src": "3309:4:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 11586,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "3309:11:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 11587,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3324:1:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "3309:16:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 11584,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3301:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 11589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3301:25:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11590,
                        "nodeType": "ExpressionStatement",
                        "src": "3301:25:79"
                      },
                      {
                        "expression": {
                          "id": 11598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 11591,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11582,
                            "src": "3336:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 11595,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11578,
                                  "src": "3360:4:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 11596,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "3360:11:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 11594,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "3346:13:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (uint256[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 11592,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3350:7:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 11593,
                                "nodeType": "ArrayTypeName",
                                "src": "3350:9:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                  "typeString": "uint256[]"
                                }
                              }
                            },
                            "id": 11597,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3346:26:79",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "src": "3336:36:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 11599,
                        "nodeType": "ExpressionStatement",
                        "src": "3336:36:79"
                      },
                      {
                        "expression": {
                          "id": 11607,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 11600,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11582,
                              "src": "3382:7:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 11605,
                            "indexExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 11604,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 11601,
                                  "name": "amounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11582,
                                  "src": "3390:7:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 11602,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "3390:14:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 11603,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3407:1:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "3390:18:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3382:27:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 11606,
                            "name": "amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11575,
                            "src": "3412:9:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3382:39:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 11608,
                        "nodeType": "ExpressionStatement",
                        "src": "3382:39:79"
                      },
                      {
                        "body": {
                          "id": 11652,
                          "nodeType": "Block",
                          "src": "3477:186:79",
                          "statements": [
                            {
                              "assignments": [
                                11623,
                                11625
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 11623,
                                  "mutability": "mutable",
                                  "name": "reserveIn",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 11652,
                                  "src": "3492:17:79",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 11622,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3492:7:79",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 11625,
                                  "mutability": "mutable",
                                  "name": "reserveOut",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 11652,
                                  "src": "3511:18:79",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 11624,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3511:7:79",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 11637,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 11627,
                                    "name": "factory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11573,
                                    "src": "3545:7:79",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 11628,
                                      "name": "path",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11578,
                                      "src": "3554:4:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 11632,
                                    "indexExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 11631,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 11629,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11610,
                                        "src": "3559:1:79",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 11630,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3563:1:79",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "3559:5:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3554:11:79",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 11633,
                                      "name": "path",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11578,
                                      "src": "3567:4:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 11635,
                                    "indexExpression": {
                                      "id": 11634,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11610,
                                      "src": "3572:1:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3567:7:79",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 11626,
                                  "name": "getReserves",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11453,
                                  "src": "3533:11:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (address,address,address) view returns (uint256,uint256)"
                                  }
                                },
                                "id": 11636,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3533:42:79",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3491:84:79"
                            },
                            {
                              "expression": {
                                "id": 11650,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 11638,
                                    "name": "amounts",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11582,
                                    "src": "3589:7:79",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 11642,
                                  "indexExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 11641,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 11639,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11610,
                                      "src": "3597:1:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 11640,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3601:1:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "3597:5:79",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3589:14:79",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "baseExpression": {
                                        "id": 11644,
                                        "name": "amounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11582,
                                        "src": "3618:7:79",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 11646,
                                      "indexExpression": {
                                        "id": 11645,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11610,
                                        "src": "3626:1:79",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "3618:10:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "id": 11647,
                                      "name": "reserveIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11623,
                                      "src": "3630:9:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "id": 11648,
                                      "name": "reserveOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11625,
                                      "src": "3641:10:79",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 11643,
                                    "name": "getAmountIn",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11571,
                                    "src": "3606:11:79",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 11649,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3606:46:79",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3589:63:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 11651,
                              "nodeType": "ExpressionStatement",
                              "src": "3589:63:79"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 11616,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11610,
                            "src": "3465:1:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 11617,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3469:1:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3465:5:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11653,
                        "initializationExpression": {
                          "assignments": [
                            11610
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 11610,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 11653,
                              "src": "3436:9:79",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 11609,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "3436:7:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 11615,
                          "initialValue": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 11614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 11611,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11578,
                                "src": "3448:4:79",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 11612,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "3448:11:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 11613,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3462:1:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "3448:15:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "3436:27:79"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 11620,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": false,
                            "src": "3472:3:79",
                            "subExpression": {
                              "id": 11619,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11610,
                              "src": "3472:1:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 11621,
                          "nodeType": "ExpressionStatement",
                          "src": "3472:3:79"
                        },
                        "nodeType": "ForStatement",
                        "src": "3431:232:79"
                      }
                    ]
                  },
                  "id": 11655,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmountsIn",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11579,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11573,
                        "mutability": "mutable",
                        "name": "factory",
                        "nodeType": "VariableDeclaration",
                        "scope": 11655,
                        "src": "3162:15:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11572,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3162:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11575,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 11655,
                        "src": "3187:17:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11574,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3187:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11578,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 11655,
                        "src": "3214:21:79",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 11576,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3214:7:79",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 11577,
                          "nodeType": "ArrayTypeName",
                          "src": "3214:9:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3152:89:79"
                  },
                  "returnParameters": {
                    "id": 11583,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11582,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nodeType": "VariableDeclaration",
                        "scope": 11655,
                        "src": "3265:24:79",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 11580,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3265:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 11581,
                          "nodeType": "ArrayTypeName",
                          "src": "3265:9:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3264:26:79"
                  },
                  "scope": 11656,
                  "src": "3131:538:79",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 11657,
              "src": "218:3453:79"
            }
          ],
          "src": "45:3627:79"
        },
        "id": 79
      },
      "contracts/libraries/Constants.sol": {
        "ast": {
          "absolutePath": "contracts/libraries/Constants.sol",
          "exportedSymbols": {
            "Constants": [
              11678
            ]
          },
          "id": 11679,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11658,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:80"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 11659,
                "nodeType": "StructuredDocumentation",
                "src": "70:77:80",
                "text": "@title Constant state\n @notice Constant state used by the swap router"
              },
              "fullyImplemented": true,
              "id": 11678,
              "linearizedBaseContracts": [
                11678
              ],
              "name": "Constants",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "documentation": {
                    "id": 11660,
                    "nodeType": "StructuredDocumentation",
                    "src": "171:89:80",
                    "text": "@dev Used for identifying cases when this contract's balance of a token is to be used"
                  },
                  "id": 11663,
                  "mutability": "constant",
                  "name": "CONTRACT_BALANCE",
                  "nodeType": "VariableDeclaration",
                  "scope": 11678,
                  "src": "265:46:80",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11661,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "265:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30",
                    "id": 11662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "310:1:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 11664,
                    "nodeType": "StructuredDocumentation",
                    "src": "318:85:80",
                    "text": "@dev Used as a flag for identifying msg.sender, saves gas by sending more 0 bytes"
                  },
                  "id": 11670,
                  "mutability": "constant",
                  "name": "MSG_SENDER",
                  "nodeType": "VariableDeclaration",
                  "scope": 11678,
                  "src": "408:49:80",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11665,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "408:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": {
                    "arguments": [
                      {
                        "hexValue": "31",
                        "id": 11668,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "455:1:80",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 11667,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "447:7:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 11666,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "447:7:80",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 11669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "447:10:80",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 11671,
                    "nodeType": "StructuredDocumentation",
                    "src": "464:88:80",
                    "text": "@dev Used as a flag for identifying address(this), saves gas by sending more 0 bytes"
                  },
                  "id": 11677,
                  "mutability": "constant",
                  "name": "ADDRESS_THIS",
                  "nodeType": "VariableDeclaration",
                  "scope": 11678,
                  "src": "557:51:80",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11672,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "557:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": {
                    "arguments": [
                      {
                        "hexValue": "32",
                        "id": 11675,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "606:1:80",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 11674,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "598:7:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 11673,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "598:7:80",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 11676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "598:10:80",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "scope": 11679,
              "src": "147:464:80"
            }
          ],
          "src": "45:567:80"
        },
        "id": 80
      },
      "contracts/libraries/PoolTicksCounter.sol": {
        "ast": {
          "absolutePath": "contracts/libraries/PoolTicksCounter.sol",
          "exportedSymbols": {
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "PoolTicksCounter": [
              11986
            ]
          },
          "id": 11987,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11680,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:81"
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "id": 11681,
              "nodeType": "ImportDirective",
              "scope": 11987,
              "sourceUnit": 28,
              "src": "71:69:81",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "fullyImplemented": true,
              "id": 11986,
              "linearizedBaseContracts": [
                11986
              ],
              "name": "PoolTicksCounter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 11955,
                    "nodeType": "Block",
                    "src": "817:3126:81",
                    "statements": [
                      {
                        "assignments": [
                          11694
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11694,
                            "mutability": "mutable",
                            "name": "wordPosLower",
                            "nodeType": "VariableDeclaration",
                            "scope": 11955,
                            "src": "827:18:81",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            },
                            "typeName": {
                              "id": 11693,
                              "name": "int16",
                              "nodeType": "ElementaryTypeName",
                              "src": "827:5:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int16",
                                "typeString": "int16"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11695,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "827:18:81"
                      },
                      {
                        "assignments": [
                          11697
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11697,
                            "mutability": "mutable",
                            "name": "wordPosHigher",
                            "nodeType": "VariableDeclaration",
                            "scope": 11955,
                            "src": "855:19:81",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            },
                            "typeName": {
                              "id": 11696,
                              "name": "int16",
                              "nodeType": "ElementaryTypeName",
                              "src": "855:5:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int16",
                                "typeString": "int16"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11698,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "855:19:81"
                      },
                      {
                        "assignments": [
                          11700
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11700,
                            "mutability": "mutable",
                            "name": "bitPosLower",
                            "nodeType": "VariableDeclaration",
                            "scope": 11955,
                            "src": "884:17:81",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 11699,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "884:5:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11701,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "884:17:81"
                      },
                      {
                        "assignments": [
                          11703
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11703,
                            "mutability": "mutable",
                            "name": "bitPosHigher",
                            "nodeType": "VariableDeclaration",
                            "scope": 11955,
                            "src": "911:18:81",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 11702,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "911:5:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11704,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "911:18:81"
                      },
                      {
                        "assignments": [
                          11706
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11706,
                            "mutability": "mutable",
                            "name": "tickBeforeInitialized",
                            "nodeType": "VariableDeclaration",
                            "scope": 11955,
                            "src": "939:26:81",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 11705,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "939:4:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11707,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "939:26:81"
                      },
                      {
                        "assignments": [
                          11709
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11709,
                            "mutability": "mutable",
                            "name": "tickAfterInitialized",
                            "nodeType": "VariableDeclaration",
                            "scope": 11955,
                            "src": "975:25:81",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 11708,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "975:4:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11710,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "975:25:81"
                      },
                      {
                        "id": 11876,
                        "nodeType": "Block",
                        "src": "1011:1887:81",
                        "statements": [
                          {
                            "assignments": [
                              11712
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 11712,
                                "mutability": "mutable",
                                "name": "wordPos",
                                "nodeType": "VariableDeclaration",
                                "scope": 11876,
                                "src": "1128:13:81",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int16",
                                  "typeString": "int16"
                                },
                                "typeName": {
                                  "id": 11711,
                                  "name": "int16",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1128:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int16",
                                    "typeString": "int16"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 11724,
                            "initialValue": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  },
                                  "id": 11722,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        },
                                        "id": 11719,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 11715,
                                          "name": "tickBefore",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 11686,
                                          "src": "1151:10:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "id": 11716,
                                              "name": "self",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 11684,
                                              "src": "1164:4:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                "typeString": "contract IAstraCLPool"
                                              }
                                            },
                                            "id": 11717,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "tickSpacing",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 320,
                                            "src": "1164:16:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_view$__$returns$_t_int24_$",
                                              "typeString": "function () view external returns (int24)"
                                            }
                                          },
                                          "id": 11718,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "1164:18:81",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        },
                                        "src": "1151:31:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      }
                                    ],
                                    "id": 11720,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "1150:33:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">>",
                                  "rightExpression": {
                                    "hexValue": "38",
                                    "id": 11721,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1187:1:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    "value": "8"
                                  },
                                  "src": "1150:38:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                ],
                                "id": 11714,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1144:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int16_$",
                                  "typeString": "type(int16)"
                                },
                                "typeName": {
                                  "id": 11713,
                                  "name": "int16",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1144:5:81",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 11723,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1144:45:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int16",
                                "typeString": "int16"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1128:61:81"
                          },
                          {
                            "assignments": [
                              11726
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 11726,
                                "mutability": "mutable",
                                "name": "bitPos",
                                "nodeType": "VariableDeclaration",
                                "scope": 11876,
                                "src": "1203:12:81",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "typeName": {
                                  "id": 11725,
                                  "name": "uint8",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1203:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 11738,
                            "initialValue": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  },
                                  "id": 11736,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        },
                                        "id": 11733,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 11729,
                                          "name": "tickBefore",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 11686,
                                          "src": "1225:10:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "id": 11730,
                                              "name": "self",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 11684,
                                              "src": "1238:4:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                "typeString": "contract IAstraCLPool"
                                              }
                                            },
                                            "id": 11731,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "tickSpacing",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 320,
                                            "src": "1238:16:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_view$__$returns$_t_int24_$",
                                              "typeString": "function () view external returns (int24)"
                                            }
                                          },
                                          "id": 11732,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "1238:18:81",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        },
                                        "src": "1225:31:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      }
                                    ],
                                    "id": 11734,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "1224:33:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "hexValue": "323536",
                                    "id": 11735,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1260:3:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    },
                                    "value": "256"
                                  },
                                  "src": "1224:39:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                ],
                                "id": 11728,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1218:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint8_$",
                                  "typeString": "type(uint8)"
                                },
                                "typeName": {
                                  "id": 11727,
                                  "name": "uint8",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1218:5:81",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 11737,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1218:46:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1203:61:81"
                          },
                          {
                            "assignments": [
                              11740
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 11740,
                                "mutability": "mutable",
                                "name": "wordPosAfter",
                                "nodeType": "VariableDeclaration",
                                "scope": 11876,
                                "src": "1279:18:81",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int16",
                                  "typeString": "int16"
                                },
                                "typeName": {
                                  "id": 11739,
                                  "name": "int16",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1279:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int16",
                                    "typeString": "int16"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 11752,
                            "initialValue": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  },
                                  "id": 11750,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        },
                                        "id": 11747,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 11743,
                                          "name": "tickAfter",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 11688,
                                          "src": "1307:9:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "id": 11744,
                                              "name": "self",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 11684,
                                              "src": "1319:4:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                "typeString": "contract IAstraCLPool"
                                              }
                                            },
                                            "id": 11745,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "tickSpacing",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 320,
                                            "src": "1319:16:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_view$__$returns$_t_int24_$",
                                              "typeString": "function () view external returns (int24)"
                                            }
                                          },
                                          "id": 11746,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "1319:18:81",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        },
                                        "src": "1307:30:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      }
                                    ],
                                    "id": 11748,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "1306:32:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">>",
                                  "rightExpression": {
                                    "hexValue": "38",
                                    "id": 11749,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1342:1:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    "value": "8"
                                  },
                                  "src": "1306:37:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                ],
                                "id": 11742,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1300:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int16_$",
                                  "typeString": "type(int16)"
                                },
                                "typeName": {
                                  "id": 11741,
                                  "name": "int16",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1300:5:81",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 11751,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1300:44:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int16",
                                "typeString": "int16"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1279:65:81"
                          },
                          {
                            "assignments": [
                              11754
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 11754,
                                "mutability": "mutable",
                                "name": "bitPosAfter",
                                "nodeType": "VariableDeclaration",
                                "scope": 11876,
                                "src": "1358:17:81",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "typeName": {
                                  "id": 11753,
                                  "name": "uint8",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1358:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 11766,
                            "initialValue": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  },
                                  "id": 11764,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        },
                                        "id": 11761,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 11757,
                                          "name": "tickAfter",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 11688,
                                          "src": "1385:9:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "id": 11758,
                                              "name": "self",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 11684,
                                              "src": "1397:4:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                "typeString": "contract IAstraCLPool"
                                              }
                                            },
                                            "id": 11759,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "tickSpacing",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 320,
                                            "src": "1397:16:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_view$__$returns$_t_int24_$",
                                              "typeString": "function () view external returns (int24)"
                                            }
                                          },
                                          "id": 11760,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "1397:18:81",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        },
                                        "src": "1385:30:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      }
                                    ],
                                    "id": 11762,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "1384:32:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "hexValue": "323536",
                                    "id": 11763,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1419:3:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    },
                                    "value": "256"
                                  },
                                  "src": "1384:38:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                ],
                                "id": 11756,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1378:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint8_$",
                                  "typeString": "type(uint8)"
                                },
                                "typeName": {
                                  "id": 11755,
                                  "name": "uint8",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1378:5:81",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 11765,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1378:45:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1358:65:81"
                          },
                          {
                            "expression": {
                              "id": 11796,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 11767,
                                "name": "tickAfterInitialized",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11709,
                                "src": "1803:20:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 11795,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 11790,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 11779,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 11776,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "arguments": [
                                                  {
                                                    "id": 11770,
                                                    "name": "wordPosAfter",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11740,
                                                    "src": "1860:12:81",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_int16",
                                                      "typeString": "int16"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_int16",
                                                      "typeString": "int16"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 11768,
                                                    "name": "self",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11684,
                                                    "src": "1844:4:81",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                      "typeString": "contract IAstraCLPool"
                                                    }
                                                  },
                                                  "id": 11769,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberName": "tickBitmap",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 430,
                                                  "src": "1844:15:81",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$_t_int16_$returns$_t_uint256_$",
                                                    "typeString": "function (int16) view external returns (uint256)"
                                                  }
                                                },
                                                "id": 11771,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1844:29:81",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "&",
                                              "rightExpression": {
                                                "components": [
                                                  {
                                                    "commonType": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    },
                                                    "id": 11774,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                      "hexValue": "31",
                                                      "id": 11772,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "number",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "1877:1:81",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_1_by_1",
                                                        "typeString": "int_const 1"
                                                      },
                                                      "value": "1"
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "<<",
                                                    "rightExpression": {
                                                      "id": 11773,
                                                      "name": "bitPosAfter",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 11754,
                                                      "src": "1882:11:81",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint8",
                                                        "typeString": "uint8"
                                                      }
                                                    },
                                                    "src": "1877:16:81",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  }
                                                ],
                                                "id": 11775,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "1876:18:81",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "src": "1844:50:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 11777,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "1843:52:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                          "hexValue": "30",
                                          "id": 11778,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1898:1:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        },
                                        "src": "1843:56:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      }
                                    ],
                                    "id": 11780,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "1842:58:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        },
                                        "id": 11788,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_int24",
                                                "typeString": "int24"
                                              },
                                              "id": 11785,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "id": 11781,
                                                "name": "tickAfter",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11688,
                                                "src": "1922:9:81",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_int24",
                                                  "typeString": "int24"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "%",
                                              "rightExpression": {
                                                "arguments": [],
                                                "expression": {
                                                  "argumentTypes": [],
                                                  "expression": {
                                                    "id": 11782,
                                                    "name": "self",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11684,
                                                    "src": "1934:4:81",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                      "typeString": "contract IAstraCLPool"
                                                    }
                                                  },
                                                  "id": 11783,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberName": "tickSpacing",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 320,
                                                  "src": "1934:16:81",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$__$returns$_t_int24_$",
                                                    "typeString": "function () view external returns (int24)"
                                                  }
                                                },
                                                "id": 11784,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1934:18:81",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_int24",
                                                  "typeString": "int24"
                                                }
                                              },
                                              "src": "1922:30:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int24",
                                                "typeString": "int24"
                                              }
                                            }
                                          ],
                                          "id": 11786,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "1921:32:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "hexValue": "30",
                                          "id": 11787,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1957:1:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        },
                                        "src": "1921:37:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      }
                                    ],
                                    "id": 11789,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "1920:39:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "1842:117:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      },
                                      "id": 11793,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 11791,
                                        "name": "tickBefore",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11686,
                                        "src": "1980:10:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">",
                                      "rightExpression": {
                                        "id": 11792,
                                        "name": "tickAfter",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11688,
                                        "src": "1993:9:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      },
                                      "src": "1980:22:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "id": 11794,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1979:24:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "1842:161:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1803:200:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 11797,
                            "nodeType": "ExpressionStatement",
                            "src": "1803:200:81"
                          },
                          {
                            "expression": {
                              "id": 11827,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 11798,
                                "name": "tickBeforeInitialized",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11706,
                                "src": "2227:21:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 11826,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 11821,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 11810,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 11807,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "arguments": [
                                                  {
                                                    "id": 11801,
                                                    "name": "wordPos",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11712,
                                                    "src": "2285:7:81",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_int16",
                                                      "typeString": "int16"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_int16",
                                                      "typeString": "int16"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 11799,
                                                    "name": "self",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11684,
                                                    "src": "2269:4:81",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                      "typeString": "contract IAstraCLPool"
                                                    }
                                                  },
                                                  "id": 11800,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberName": "tickBitmap",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 430,
                                                  "src": "2269:15:81",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$_t_int16_$returns$_t_uint256_$",
                                                    "typeString": "function (int16) view external returns (uint256)"
                                                  }
                                                },
                                                "id": 11802,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2269:24:81",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "&",
                                              "rightExpression": {
                                                "components": [
                                                  {
                                                    "commonType": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    },
                                                    "id": 11805,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                      "hexValue": "31",
                                                      "id": 11803,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "number",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "2297:1:81",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_1_by_1",
                                                        "typeString": "int_const 1"
                                                      },
                                                      "value": "1"
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "<<",
                                                    "rightExpression": {
                                                      "id": 11804,
                                                      "name": "bitPos",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 11726,
                                                      "src": "2302:6:81",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint8",
                                                        "typeString": "uint8"
                                                      }
                                                    },
                                                    "src": "2297:11:81",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  }
                                                ],
                                                "id": 11806,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "2296:13:81",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "src": "2269:40:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 11808,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "2268:42:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                          "hexValue": "30",
                                          "id": 11809,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "2313:1:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        },
                                        "src": "2268:46:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      }
                                    ],
                                    "id": 11811,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "2267:48:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        },
                                        "id": 11819,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_int24",
                                                "typeString": "int24"
                                              },
                                              "id": 11816,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "id": 11812,
                                                "name": "tickBefore",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11686,
                                                "src": "2337:10:81",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_int24",
                                                  "typeString": "int24"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "%",
                                              "rightExpression": {
                                                "arguments": [],
                                                "expression": {
                                                  "argumentTypes": [],
                                                  "expression": {
                                                    "id": 11813,
                                                    "name": "self",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11684,
                                                    "src": "2350:4:81",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                                      "typeString": "contract IAstraCLPool"
                                                    }
                                                  },
                                                  "id": 11814,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberName": "tickSpacing",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 320,
                                                  "src": "2350:16:81",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$__$returns$_t_int24_$",
                                                    "typeString": "function () view external returns (int24)"
                                                  }
                                                },
                                                "id": 11815,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2350:18:81",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_int24",
                                                  "typeString": "int24"
                                                }
                                              },
                                              "src": "2337:31:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int24",
                                                "typeString": "int24"
                                              }
                                            }
                                          ],
                                          "id": 11817,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "2336:33:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int24",
                                            "typeString": "int24"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "hexValue": "30",
                                          "id": 11818,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "2373:1:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        },
                                        "src": "2336:38:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      }
                                    ],
                                    "id": 11820,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "2335:40:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "2267:108:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      },
                                      "id": 11824,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 11822,
                                        "name": "tickBefore",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11686,
                                        "src": "2396:10:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 11823,
                                        "name": "tickAfter",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11688,
                                        "src": "2409:9:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      },
                                      "src": "2396:22:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "id": 11825,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "2395:24:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "2267:152:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2227:192:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 11828,
                            "nodeType": "ExpressionStatement",
                            "src": "2227:192:81"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 11840,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_int16",
                                  "typeString": "int16"
                                },
                                "id": 11831,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 11829,
                                  "name": "wordPos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11712,
                                  "src": "2438:7:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int16",
                                    "typeString": "int16"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 11830,
                                  "name": "wordPosAfter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11740,
                                  "src": "2448:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int16",
                                    "typeString": "int16"
                                  }
                                },
                                "src": "2438:22:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 11838,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_int16",
                                        "typeString": "int16"
                                      },
                                      "id": 11834,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 11832,
                                        "name": "wordPos",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11712,
                                        "src": "2465:7:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int16",
                                          "typeString": "int16"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "id": 11833,
                                        "name": "wordPosAfter",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11740,
                                        "src": "2476:12:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int16",
                                          "typeString": "int16"
                                        }
                                      },
                                      "src": "2465:23:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      },
                                      "id": 11837,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 11835,
                                        "name": "bitPos",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11726,
                                        "src": "2492:6:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "id": 11836,
                                        "name": "bitPosAfter",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11754,
                                        "src": "2502:11:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "src": "2492:21:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "2465:48:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 11839,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2464:50:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2438:76:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 11874,
                              "nodeType": "Block",
                              "src": "2705:183:81",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 11860,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 11858,
                                      "name": "wordPosLower",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11694,
                                      "src": "2723:12:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int16",
                                        "typeString": "int16"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "id": 11859,
                                      "name": "wordPosAfter",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11740,
                                      "src": "2738:12:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int16",
                                        "typeString": "int16"
                                      }
                                    },
                                    "src": "2723:27:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int16",
                                      "typeString": "int16"
                                    }
                                  },
                                  "id": 11861,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2723:27:81"
                                },
                                {
                                  "expression": {
                                    "id": 11864,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 11862,
                                      "name": "bitPosLower",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11700,
                                      "src": "2768:11:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "id": 11863,
                                      "name": "bitPosAfter",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11754,
                                      "src": "2782:11:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "2768:25:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "id": 11865,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2768:25:81"
                                },
                                {
                                  "expression": {
                                    "id": 11868,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 11866,
                                      "name": "wordPosHigher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11697,
                                      "src": "2811:13:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int16",
                                        "typeString": "int16"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "id": 11867,
                                      "name": "wordPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11712,
                                      "src": "2827:7:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int16",
                                        "typeString": "int16"
                                      }
                                    },
                                    "src": "2811:23:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int16",
                                      "typeString": "int16"
                                    }
                                  },
                                  "id": 11869,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2811:23:81"
                                },
                                {
                                  "expression": {
                                    "id": 11872,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 11870,
                                      "name": "bitPosHigher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11703,
                                      "src": "2852:12:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "id": 11871,
                                      "name": "bitPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11726,
                                      "src": "2867:6:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "2852:21:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "id": 11873,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2852:21:81"
                                }
                              ]
                            },
                            "id": 11875,
                            "nodeType": "IfStatement",
                            "src": "2434:454:81",
                            "trueBody": {
                              "id": 11857,
                              "nodeType": "Block",
                              "src": "2516:183:81",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 11843,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 11841,
                                      "name": "wordPosLower",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11694,
                                      "src": "2534:12:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int16",
                                        "typeString": "int16"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "id": 11842,
                                      "name": "wordPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11712,
                                      "src": "2549:7:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int16",
                                        "typeString": "int16"
                                      }
                                    },
                                    "src": "2534:22:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int16",
                                      "typeString": "int16"
                                    }
                                  },
                                  "id": 11844,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2534:22:81"
                                },
                                {
                                  "expression": {
                                    "id": 11847,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 11845,
                                      "name": "bitPosLower",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11700,
                                      "src": "2574:11:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "id": 11846,
                                      "name": "bitPos",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11726,
                                      "src": "2588:6:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "2574:20:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "id": 11848,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2574:20:81"
                                },
                                {
                                  "expression": {
                                    "id": 11851,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 11849,
                                      "name": "wordPosHigher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11697,
                                      "src": "2612:13:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int16",
                                        "typeString": "int16"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "id": 11850,
                                      "name": "wordPosAfter",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11740,
                                      "src": "2628:12:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int16",
                                        "typeString": "int16"
                                      }
                                    },
                                    "src": "2612:28:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int16",
                                      "typeString": "int16"
                                    }
                                  },
                                  "id": 11852,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2612:28:81"
                                },
                                {
                                  "expression": {
                                    "id": 11855,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 11853,
                                      "name": "bitPosHigher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11703,
                                      "src": "2658:12:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "id": 11854,
                                      "name": "bitPosAfter",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11754,
                                      "src": "2673:11:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "2658:26:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "id": 11856,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2658:26:81"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "assignments": [
                          11878
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11878,
                            "mutability": "mutable",
                            "name": "mask",
                            "nodeType": "VariableDeclaration",
                            "scope": 11955,
                            "src": "3087:12:81",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 11877,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3087:7:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11886,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 11881,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3107:7:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 11880,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3107:7:81",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  }
                                ],
                                "id": 11879,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "3102:4:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 11882,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3102:13:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint256",
                                "typeString": "type(uint256)"
                              }
                            },
                            "id": 11883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "3102:17:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "id": 11884,
                            "name": "bitPosLower",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11700,
                            "src": "3123:11:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "3102:32:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3087:47:81"
                      },
                      {
                        "body": {
                          "id": 11937,
                          "nodeType": "Block",
                          "src": "3182:535:81",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_int16",
                                  "typeString": "int16"
                                },
                                "id": 11892,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 11890,
                                  "name": "wordPosLower",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11694,
                                  "src": "3314:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int16",
                                    "typeString": "int16"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 11891,
                                  "name": "wordPosHigher",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11697,
                                  "src": "3330:13:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int16",
                                    "typeString": "int16"
                                  }
                                },
                                "src": "3314:29:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 11910,
                              "nodeType": "IfStatement",
                              "src": "3310:125:81",
                              "trueBody": {
                                "id": 11909,
                                "nodeType": "Block",
                                "src": "3345:90:81",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 11907,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 11893,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11878,
                                        "src": "3363:4:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 11906,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 11894,
                                          "name": "mask",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 11878,
                                          "src": "3370:4:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&",
                                        "rightExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 11904,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "expression": {
                                                  "arguments": [
                                                    {
                                                      "id": 11897,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "ElementaryTypeNameExpression",
                                                      "src": "3383:7:81",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint256_$",
                                                        "typeString": "type(uint256)"
                                                      },
                                                      "typeName": {
                                                        "id": 11896,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3383:7:81",
                                                        "typeDescriptions": {}
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_type$_t_uint256_$",
                                                        "typeString": "type(uint256)"
                                                      }
                                                    ],
                                                    "id": 11895,
                                                    "name": "type",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -27,
                                                    "src": "3378:4:81",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                      "typeString": "function () pure"
                                                    }
                                                  },
                                                  "id": 11898,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "3378:13:81",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                                    "typeString": "type(uint256)"
                                                  }
                                                },
                                                "id": 11899,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "max",
                                                "nodeType": "MemberAccess",
                                                "src": "3378:17:81",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": ">>",
                                              "rightExpression": {
                                                "components": [
                                                  {
                                                    "commonType": {
                                                      "typeIdentifier": "t_uint8",
                                                      "typeString": "uint8"
                                                    },
                                                    "id": 11902,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                      "hexValue": "323535",
                                                      "id": 11900,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "number",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "3400:3:81",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_255_by_1",
                                                        "typeString": "int_const 255"
                                                      },
                                                      "value": "255"
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                      "id": 11901,
                                                      "name": "bitPosHigher",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 11703,
                                                      "src": "3406:12:81",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint8",
                                                        "typeString": "uint8"
                                                      }
                                                    },
                                                    "src": "3400:18:81",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint8",
                                                      "typeString": "uint8"
                                                    }
                                                  }
                                                ],
                                                "id": 11903,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "3399:20:81",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              },
                                              "src": "3378:41:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 11905,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "3377:43:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "3370:50:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3363:57:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 11908,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3363:57:81"
                                  }
                                ]
                              }
                            },
                            {
                              "assignments": [
                                11912
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 11912,
                                  "mutability": "mutable",
                                  "name": "masked",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 11937,
                                  "src": "3449:14:81",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 11911,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3449:7:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 11919,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 11918,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 11915,
                                      "name": "wordPosLower",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11694,
                                      "src": "3482:12:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int16",
                                        "typeString": "int16"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int16",
                                        "typeString": "int16"
                                      }
                                    ],
                                    "expression": {
                                      "id": 11913,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11684,
                                      "src": "3466:4:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                        "typeString": "contract IAstraCLPool"
                                      }
                                    },
                                    "id": 11914,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "tickBitmap",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 430,
                                    "src": "3466:15:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_int16_$returns$_t_uint256_$",
                                      "typeString": "function (int16) view external returns (uint256)"
                                    }
                                  },
                                  "id": 11916,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3466:29:81",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "id": 11917,
                                  "name": "mask",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11878,
                                  "src": "3498:4:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3466:36:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3449:53:81"
                            },
                            {
                              "expression": {
                                "id": 11924,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 11920,
                                  "name": "initializedTicksCrossed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11691,
                                  "src": "3516:23:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 11922,
                                      "name": "masked",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11912,
                                      "src": "3556:6:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 11921,
                                    "name": "countOneBits",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11985,
                                    "src": "3543:12:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint16_$",
                                      "typeString": "function (uint256) pure returns (uint16)"
                                    }
                                  },
                                  "id": 11923,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3543:20:81",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "src": "3516:47:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 11925,
                              "nodeType": "ExpressionStatement",
                              "src": "3516:47:81"
                            },
                            {
                              "expression": {
                                "id": 11927,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "3577:14:81",
                                "subExpression": {
                                  "id": 11926,
                                  "name": "wordPosLower",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11694,
                                  "src": "3577:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int16",
                                    "typeString": "int16"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int16",
                                  "typeString": "int16"
                                }
                              },
                              "id": 11928,
                              "nodeType": "ExpressionStatement",
                              "src": "3577:14:81"
                            },
                            {
                              "expression": {
                                "id": 11935,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 11929,
                                  "name": "mask",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11878,
                                  "src": "3682:4:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 11932,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "3694:7:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        },
                                        "typeName": {
                                          "id": 11931,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "3694:7:81",
                                          "typeDescriptions": {}
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        }
                                      ],
                                      "id": 11930,
                                      "name": "type",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -27,
                                      "src": "3689:4:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 11933,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3689:13:81",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_meta_type_t_uint256",
                                      "typeString": "type(uint256)"
                                    }
                                  },
                                  "id": 11934,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "max",
                                  "nodeType": "MemberAccess",
                                  "src": "3689:17:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3682:24:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 11936,
                              "nodeType": "ExpressionStatement",
                              "src": "3682:24:81"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int16",
                            "typeString": "int16"
                          },
                          "id": 11889,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 11887,
                            "name": "wordPosLower",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11694,
                            "src": "3151:12:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 11888,
                            "name": "wordPosHigher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11697,
                            "src": "3167:13:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "src": "3151:29:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11938,
                        "nodeType": "WhileStatement",
                        "src": "3144:573:81"
                      },
                      {
                        "condition": {
                          "id": 11939,
                          "name": "tickAfterInitialized",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11709,
                          "src": "3731:20:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11945,
                        "nodeType": "IfStatement",
                        "src": "3727:79:81",
                        "trueBody": {
                          "id": 11944,
                          "nodeType": "Block",
                          "src": "3753:53:81",
                          "statements": [
                            {
                              "expression": {
                                "id": 11942,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 11940,
                                  "name": "initializedTicksCrossed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11691,
                                  "src": "3767:23:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "31",
                                  "id": 11941,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3794:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "3767:28:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 11943,
                              "nodeType": "ExpressionStatement",
                              "src": "3767:28:81"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "id": 11946,
                          "name": "tickBeforeInitialized",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11706,
                          "src": "3820:21:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11952,
                        "nodeType": "IfStatement",
                        "src": "3816:80:81",
                        "trueBody": {
                          "id": 11951,
                          "nodeType": "Block",
                          "src": "3843:53:81",
                          "statements": [
                            {
                              "expression": {
                                "id": 11949,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 11947,
                                  "name": "initializedTicksCrossed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11691,
                                  "src": "3857:23:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "31",
                                  "id": 11948,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3884:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "3857:28:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 11950,
                              "nodeType": "ExpressionStatement",
                              "src": "3857:28:81"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 11953,
                          "name": "initializedTicksCrossed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11691,
                          "src": "3913:23:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "functionReturnParameters": 11692,
                        "id": 11954,
                        "nodeType": "Return",
                        "src": "3906:30:81"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 11682,
                    "nodeType": "StructuredDocumentation",
                    "src": "173:462:81",
                    "text": "@dev This function counts the number of initialized ticks that would incur a gas cost between tickBefore and tickAfter.\n When tickBefore and/or tickAfter themselves are initialized, the logic over whether we should count them depends on the\n direction of the swap. If we are swapping upwards (tickAfter > tickBefore) we don't want to count tickBefore but we do\n want to count tickAfter. The opposite is true if we are swapping downwards."
                  },
                  "id": 11956,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "countInitializedTicksCrossed",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11689,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11684,
                        "mutability": "mutable",
                        "name": "self",
                        "nodeType": "VariableDeclaration",
                        "scope": 11956,
                        "src": "687:17:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 11683,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "687:12:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11686,
                        "mutability": "mutable",
                        "name": "tickBefore",
                        "nodeType": "VariableDeclaration",
                        "scope": 11956,
                        "src": "714:16:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 11685,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "714:5:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11688,
                        "mutability": "mutable",
                        "name": "tickAfter",
                        "nodeType": "VariableDeclaration",
                        "scope": 11956,
                        "src": "740:15:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 11687,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "740:5:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "677:84:81"
                  },
                  "returnParameters": {
                    "id": 11692,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11691,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossed",
                        "nodeType": "VariableDeclaration",
                        "scope": 11956,
                        "src": "785:30:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 11690,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "785:6:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "784:32:81"
                  },
                  "scope": 11986,
                  "src": "640:3303:81",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 11984,
                    "nodeType": "Block",
                    "src": "4012:134:81",
                    "statements": [
                      {
                        "assignments": [
                          11964
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11964,
                            "mutability": "mutable",
                            "name": "bits",
                            "nodeType": "VariableDeclaration",
                            "scope": 11984,
                            "src": "4022:11:81",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            "typeName": {
                              "id": 11963,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "4022:6:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 11966,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 11965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4036:1:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4022:15:81"
                      },
                      {
                        "body": {
                          "id": 11980,
                          "nodeType": "Block",
                          "src": "4062:57:81",
                          "statements": [
                            {
                              "expression": {
                                "id": 11971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "4076:6:81",
                                "subExpression": {
                                  "id": 11970,
                                  "name": "bits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11964,
                                  "src": "4076:4:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "id": 11972,
                              "nodeType": "ExpressionStatement",
                              "src": "4076:6:81"
                            },
                            {
                              "expression": {
                                "id": 11978,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 11973,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11958,
                                  "src": "4096:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "&=",
                                "rightHandSide": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 11976,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 11974,
                                        "name": "x",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11958,
                                        "src": "4102:1:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 11975,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "4106:1:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "4102:5:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 11977,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4101:7:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4096:12:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 11979,
                              "nodeType": "ExpressionStatement",
                              "src": "4096:12:81"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11969,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 11967,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11958,
                            "src": "4054:1:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 11968,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4059:1:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4054:6:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11981,
                        "nodeType": "WhileStatement",
                        "src": "4047:72:81"
                      },
                      {
                        "expression": {
                          "id": 11982,
                          "name": "bits",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11964,
                          "src": "4135:4:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "functionReturnParameters": 11962,
                        "id": 11983,
                        "nodeType": "Return",
                        "src": "4128:11:81"
                      }
                    ]
                  },
                  "id": 11985,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "countOneBits",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11959,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11958,
                        "mutability": "mutable",
                        "name": "x",
                        "nodeType": "VariableDeclaration",
                        "scope": 11985,
                        "src": "3971:9:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11957,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3971:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3970:11:81"
                  },
                  "returnParameters": {
                    "id": 11962,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11961,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 11985,
                        "src": "4004:6:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 11960,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "4004:6:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4003:8:81"
                  },
                  "scope": 11986,
                  "src": "3949:197:81",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 11987,
              "src": "142:4006:81"
            }
          ],
          "src": "45:4104:81"
        },
        "id": 81
      },
      "contracts/test/ImmutableStateTest.sol": {
        "ast": {
          "absolutePath": "contracts/test/ImmutableStateTest.sol",
          "exportedSymbols": {
            "IImmutableState": [
              8694
            ],
            "ImmutableState": [
              7710
            ],
            "ImmutableStateTest": [
              12004
            ]
          },
          "id": 12005,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11988,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:82"
            },
            {
              "absolutePath": "contracts/base/ImmutableState.sol",
              "file": "../base/ImmutableState.sol",
              "id": 11989,
              "nodeType": "ImportDirective",
              "scope": 12005,
              "sourceUnit": 7711,
              "src": "70:36:82",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 11990,
                    "name": "ImmutableState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7710,
                    "src": "139:14:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ImmutableState_$7710",
                      "typeString": "contract ImmutableState"
                    }
                  },
                  "id": 11991,
                  "nodeType": "InheritanceSpecifier",
                  "src": "139:14:82"
                }
              ],
              "contractDependencies": [
                7710,
                8694
              ],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 12004,
              "linearizedBaseContracts": [
                12004,
                7710,
                8694
              ],
              "name": "ImmutableStateTest",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 12002,
                    "nodeType": "Block",
                    "src": "273:2:82",
                    "statements": []
                  },
                  "id": 12003,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 11998,
                          "name": "_factoryClassic",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11993,
                          "src": "238:15:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 11999,
                          "name": "_positionManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11995,
                          "src": "255:16:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 12000,
                      "modifierName": {
                        "id": 11997,
                        "name": "ImmutableState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7710,
                        "src": "223:14:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ImmutableState_$7710_$",
                          "typeString": "type(contract ImmutableState)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "223:49:82"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11996,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11993,
                        "mutability": "mutable",
                        "name": "_factoryClassic",
                        "nodeType": "VariableDeclaration",
                        "scope": 12003,
                        "src": "172:23:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11992,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "172:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11995,
                        "mutability": "mutable",
                        "name": "_positionManager",
                        "nodeType": "VariableDeclaration",
                        "scope": 12003,
                        "src": "197:24:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11994,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "197:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "171:51:82"
                  },
                  "returnParameters": {
                    "id": 12001,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "273:0:82"
                  },
                  "scope": 12004,
                  "src": "160:115:82",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 12005,
              "src": "108:169:82"
            }
          ],
          "src": "45:233:82"
        },
        "id": 82
      },
      "contracts/test/MockTimeSwapRouter.sol": {
        "ast": {
          "absolutePath": "contracts/test/MockTimeSwapRouter.sol",
          "exportedSymbols": {
            "ApproveAndCall": [
              7679
            ],
            "AstraClassicLibrary": [
              11656
            ],
            "BlockTimestamp": [
              1918
            ],
            "BytesLib": [
              3178
            ],
            "CLSwapRouter": [
              6841
            ],
            "CallbackValidation": [
              3240
            ],
            "ClassicSwapRouter": [
              7241
            ],
            "Constants": [
              11678
            ],
            "FullMath": [
              913
            ],
            "IApproveAndCall": [
              8555
            ],
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "IAstraCLSwapCallback": [
              41
            ],
            "IAstraPair": [
              4481
            ],
            "ICLSwapRouter": [
              8643
            ],
            "IClassicSwapRouter": [
              8678
            ],
            "IERC165": [
              4940
            ],
            "IERC20": [
              5876
            ],
            "IERC20Permit": [
              4928
            ],
            "IERC20PermitAllowed": [
              3042
            ],
            "IERC721": [
              5992
            ],
            "IERC721Enumerable": [
              6023
            ],
            "IERC721Metadata": [
              6050
            ],
            "IERC721Permit": [
              2647
            ],
            "IImmutableState": [
              8694
            ],
            "IMulticall": [
              2662
            ],
            "IMulticallExtended": [
              8789
            ],
            "INonfungiblePositionManager": [
              2856
            ],
            "IOracleSlippage": [
              8818
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "IPeripheryPayments": [
              2898
            ],
            "IPeripheryPaymentsExtended": [
              8853
            ],
            "IPeripheryPaymentsWithFee": [
              2931
            ],
            "IPeripheryPaymentsWithFeeExtended": [
              8885
            ],
            "IPoolInitializer": [
              2950
            ],
            "ISAMB": [
              3059
            ],
            "ISelfPermit": [
              3018
            ],
            "ISwapRouter02": [
              9053
            ],
            "ImmutableState": [
              7710
            ],
            "LowGasSafeMath": [
              1043
            ],
            "MockTimeSwapRouter02": [
              12050
            ],
            "Multicall": [
              2003
            ],
            "MulticallExtended": [
              7766
            ],
            "OracleLibrary": [
              3829
            ],
            "OracleSlippage": [
              8300
            ],
            "Path": [
              3962
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PeripheryPayments": [
              2244
            ],
            "PeripheryPaymentsExtended": [
              8380
            ],
            "PeripheryPaymentsWithFee": [
              2425
            ],
            "PeripheryPaymentsWithFeeExtended": [
              8435
            ],
            "PeripheryValidation": [
              2445
            ],
            "PeripheryValidationExtended": [
              8459
            ],
            "PoolAddress": [
              4054
            ],
            "SafeCast": [
              1113
            ],
            "SelfPermit": [
              2612
            ],
            "SwapRouter02": [
              7285
            ],
            "TickMath": [
              1904
            ],
            "TransferHelper": [
              4225
            ]
          },
          "id": 12051,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12006,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:83"
            },
            {
              "id": 12007,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:19:83"
            },
            {
              "absolutePath": "contracts/SwapRouter02.sol",
              "file": "../SwapRouter02.sol",
              "id": 12008,
              "nodeType": "ImportDirective",
              "scope": 12051,
              "sourceUnit": 7286,
              "src": "84:29:83",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 12009,
                    "name": "SwapRouter02",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7285,
                    "src": "148:12:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SwapRouter02_$7285",
                      "typeString": "contract SwapRouter02"
                    }
                  },
                  "id": 12010,
                  "nodeType": "InheritanceSpecifier",
                  "src": "148:12:83"
                }
              ],
              "contractDependencies": [
                41,
                1918,
                2003,
                2034,
                2244,
                2425,
                2445,
                2612,
                2662,
                2872,
                2898,
                2931,
                3018,
                6841,
                7241,
                7285,
                7679,
                7710,
                7766,
                8300,
                8380,
                8435,
                8459,
                8555,
                8643,
                8678,
                8694,
                8789,
                8818,
                8853,
                8885,
                9053
              ],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 12050,
              "linearizedBaseContracts": [
                12050,
                7285,
                2612,
                7766,
                8459,
                2445,
                7679,
                6841,
                8300,
                1918,
                2003,
                7241,
                8435,
                2425,
                8380,
                8885,
                2931,
                2244,
                2034,
                2872,
                8818,
                8853,
                2898,
                7710,
                8694,
                9053,
                3018,
                8789,
                2662,
                8555,
                8643,
                41,
                8678
              ],
              "name": "MockTimeSwapRouter02",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 12012,
                  "mutability": "mutable",
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 12050,
                  "src": "167:12:83",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12011,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "167:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 12029,
                    "nodeType": "Block",
                    "src": "387:2:83",
                    "statements": []
                  },
                  "id": 12030,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 12023,
                          "name": "_factoryClassic",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12014,
                          "src": "334:15:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 12024,
                          "name": "factoryCL",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12016,
                          "src": "351:9:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 12025,
                          "name": "_positionManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12018,
                          "src": "362:16:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 12026,
                          "name": "_SAMB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12020,
                          "src": "380:5:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 12027,
                      "modifierName": {
                        "id": 12022,
                        "name": "SwapRouter02",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7285,
                        "src": "321:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SwapRouter02_$7285_$",
                          "typeString": "type(contract SwapRouter02)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "321:65:83"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12021,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12014,
                        "mutability": "mutable",
                        "name": "_factoryClassic",
                        "nodeType": "VariableDeclaration",
                        "scope": 12030,
                        "src": "207:23:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12013,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "207:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12016,
                        "mutability": "mutable",
                        "name": "factoryCL",
                        "nodeType": "VariableDeclaration",
                        "scope": 12030,
                        "src": "240:17:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12015,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "240:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12018,
                        "mutability": "mutable",
                        "name": "_positionManager",
                        "nodeType": "VariableDeclaration",
                        "scope": 12030,
                        "src": "267:24:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12017,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "267:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12020,
                        "mutability": "mutable",
                        "name": "_SAMB",
                        "nodeType": "VariableDeclaration",
                        "scope": 12030,
                        "src": "301:13:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12019,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "301:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "197:123:83"
                  },
                  "returnParameters": {
                    "id": 12028,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "387:0:83"
                  },
                  "scope": 12050,
                  "src": "186:203:83",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1917
                  ],
                  "body": {
                    "id": 12038,
                    "nodeType": "Block",
                    "src": "463:28:83",
                    "statements": [
                      {
                        "expression": {
                          "id": 12036,
                          "name": "time",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12012,
                          "src": "480:4:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 12035,
                        "id": 12037,
                        "nodeType": "Return",
                        "src": "473:11:83"
                      }
                    ]
                  },
                  "id": 12039,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_blockTimestamp",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 12032,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "436:8:83"
                  },
                  "parameters": {
                    "id": 12031,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "419:2:83"
                  },
                  "returnParameters": {
                    "id": 12035,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12034,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 12039,
                        "src": "454:7:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12033,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "454:7:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "453:9:83"
                  },
                  "scope": 12050,
                  "src": "395:96:83",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 12048,
                    "nodeType": "Block",
                    "src": "538:29:83",
                    "statements": [
                      {
                        "expression": {
                          "id": 12046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 12044,
                            "name": "time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12012,
                            "src": "548:4:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 12045,
                            "name": "_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12041,
                            "src": "555:5:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "548:12:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 12047,
                        "nodeType": "ExpressionStatement",
                        "src": "548:12:83"
                      }
                    ]
                  },
                  "functionSelector": "3beb26c4",
                  "id": 12049,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setTime",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12042,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12041,
                        "mutability": "mutable",
                        "name": "_time",
                        "nodeType": "VariableDeclaration",
                        "scope": 12049,
                        "src": "514:13:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12040,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "514:7:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "513:15:83"
                  },
                  "returnParameters": {
                    "id": 12043,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "538:0:83"
                  },
                  "scope": 12050,
                  "src": "497:70:83",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 12051,
              "src": "115:454:83"
            }
          ],
          "src": "39:531:83"
        },
        "id": 83
      },
      "contracts/test/OracleSlippageTest.sol": {
        "ast": {
          "absolutePath": "contracts/test/OracleSlippageTest.sol",
          "exportedSymbols": {
            "BlockTimestamp": [
              1918
            ],
            "BytesLib": [
              3178
            ],
            "FullMath": [
              913
            ],
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "IOracleSlippage": [
              8818
            ],
            "IPeripheryImmutableState": [
              2872
            ],
            "OracleLibrary": [
              3829
            ],
            "OracleSlippage": [
              8300
            ],
            "OracleSlippageTest": [
              12206
            ],
            "Path": [
              3962
            ],
            "PeripheryImmutableState": [
              2034
            ],
            "PoolAddress": [
              4054
            ],
            "TickMath": [
              1904
            ]
          },
          "id": 12207,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12052,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:23:84"
            },
            {
              "id": 12053,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "69:19:84"
            },
            {
              "absolutePath": "contracts/base/OracleSlippage.sol",
              "file": "../base/OracleSlippage.sol",
              "id": 12054,
              "nodeType": "ImportDirective",
              "scope": 12207,
              "sourceUnit": 8301,
              "src": "90:36:84",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 12055,
                    "name": "OracleSlippage",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8300,
                    "src": "159:14:84",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_OracleSlippage_$8300",
                      "typeString": "contract OracleSlippage"
                    }
                  },
                  "id": 12056,
                  "nodeType": "InheritanceSpecifier",
                  "src": "159:14:84"
                }
              ],
              "contractDependencies": [
                1918,
                2034,
                2872,
                8300,
                8818
              ],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 12206,
              "linearizedBaseContracts": [
                12206,
                8300,
                1918,
                2034,
                2872,
                8818
              ],
              "name": "OracleSlippageTest",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 12064,
                  "mutability": "mutable",
                  "name": "pools",
                  "nodeType": "VariableDeclaration",
                  "scope": 12206,
                  "src": "180:85:84",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$_$_$",
                    "typeString": "mapping(address => mapping(address => mapping(uint24 => contract IAstraCLPool)))"
                  },
                  "typeName": {
                    "id": 12063,
                    "keyType": {
                      "id": 12057,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "188:7:84",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "180:71:84",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$_$_$",
                      "typeString": "mapping(address => mapping(address => mapping(uint24 => contract IAstraCLPool)))"
                    },
                    "valueType": {
                      "id": 12062,
                      "keyType": {
                        "id": 12058,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "207:7:84",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "199:51:84",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$_$",
                        "typeString": "mapping(address => mapping(uint24 => contract IAstraCLPool))"
                      },
                      "valueType": {
                        "id": 12061,
                        "keyType": {
                          "id": 12059,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "226:6:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "nodeType": "Mapping",
                        "src": "218:31:84",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$",
                          "typeString": "mapping(uint24 => contract IAstraCLPool)"
                        },
                        "valueType": {
                          "id": 12060,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "236:12:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        }
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 12066,
                  "mutability": "mutable",
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 12206,
                  "src": "271:21:84",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12065,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "271:7:84",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 12077,
                    "nodeType": "Block",
                    "src": "387:2:84",
                    "statements": []
                  },
                  "id": 12078,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 12073,
                          "name": "_factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12068,
                          "src": "369:8:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 12074,
                          "name": "_WETH9",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12070,
                          "src": "379:6:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 12075,
                      "modifierName": {
                        "id": 12072,
                        "name": "PeripheryImmutableState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2034,
                        "src": "345:23:84",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PeripheryImmutableState_$2034_$",
                          "typeString": "type(contract PeripheryImmutableState)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "345:41:84"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12071,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12068,
                        "mutability": "mutable",
                        "name": "_factory",
                        "nodeType": "VariableDeclaration",
                        "scope": 12078,
                        "src": "311:16:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12067,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "311:7:84",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12070,
                        "mutability": "mutable",
                        "name": "_WETH9",
                        "nodeType": "VariableDeclaration",
                        "scope": 12078,
                        "src": "329:14:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12069,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "329:7:84",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "310:34:84"
                  },
                  "returnParameters": {
                    "id": 12076,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "387:0:84"
                  },
                  "scope": 12206,
                  "src": "299:90:84",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 12087,
                    "nodeType": "Block",
                    "src": "436:29:84",
                    "statements": [
                      {
                        "expression": {
                          "id": 12085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 12083,
                            "name": "time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12066,
                            "src": "446:4:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 12084,
                            "name": "_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12080,
                            "src": "453:5:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "446:12:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 12086,
                        "nodeType": "ExpressionStatement",
                        "src": "446:12:84"
                      }
                    ]
                  },
                  "functionSelector": "3beb26c4",
                  "id": 12088,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setTime",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12081,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12080,
                        "mutability": "mutable",
                        "name": "_time",
                        "nodeType": "VariableDeclaration",
                        "scope": 12088,
                        "src": "412:13:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12079,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "412:7:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "411:15:84"
                  },
                  "returnParameters": {
                    "id": 12082,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "436:0:84"
                  },
                  "scope": 12206,
                  "src": "395:70:84",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    1917
                  ],
                  "body": {
                    "id": 12096,
                    "nodeType": "Block",
                    "src": "539:28:84",
                    "statements": [
                      {
                        "expression": {
                          "id": 12094,
                          "name": "time",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12066,
                          "src": "556:4:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 12093,
                        "id": 12095,
                        "nodeType": "Return",
                        "src": "549:11:84"
                      }
                    ]
                  },
                  "id": 12097,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_blockTimestamp",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 12090,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "512:8:84"
                  },
                  "parameters": {
                    "id": 12089,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "495:2:84"
                  },
                  "returnParameters": {
                    "id": 12093,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12092,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 12097,
                        "src": "530:7:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12091,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "530:7:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "529:9:84"
                  },
                  "scope": 12206,
                  "src": "471:96:84",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 12128,
                    "nodeType": "Block",
                    "src": "708:99:84",
                    "statements": [
                      {
                        "expression": {
                          "id": 12116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 12108,
                                  "name": "pools",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12064,
                                  "src": "718:5:84",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$_$_$",
                                    "typeString": "mapping(address => mapping(address => mapping(uint24 => contract IAstraCLPool)))"
                                  }
                                },
                                "id": 12112,
                                "indexExpression": {
                                  "id": 12109,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12101,
                                  "src": "724:7:84",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "718:14:84",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$_$",
                                  "typeString": "mapping(address => mapping(uint24 => contract IAstraCLPool))"
                                }
                              },
                              "id": 12113,
                              "indexExpression": {
                                "id": 12110,
                                "name": "tokenOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12103,
                                "src": "733:8:84",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "718:24:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$",
                                "typeString": "mapping(uint24 => contract IAstraCLPool)"
                              }
                            },
                            "id": 12114,
                            "indexExpression": {
                              "id": 12111,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12105,
                              "src": "743:3:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "718:29:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 12115,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12099,
                            "src": "750:4:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            }
                          },
                          "src": "718:36:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "id": 12117,
                        "nodeType": "ExpressionStatement",
                        "src": "718:36:84"
                      },
                      {
                        "expression": {
                          "id": 12126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 12118,
                                  "name": "pools",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12064,
                                  "src": "764:5:84",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$_$_$",
                                    "typeString": "mapping(address => mapping(address => mapping(uint24 => contract IAstraCLPool)))"
                                  }
                                },
                                "id": 12122,
                                "indexExpression": {
                                  "id": 12119,
                                  "name": "tokenOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12103,
                                  "src": "770:8:84",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "764:15:84",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$_$",
                                  "typeString": "mapping(address => mapping(uint24 => contract IAstraCLPool))"
                                }
                              },
                              "id": 12123,
                              "indexExpression": {
                                "id": 12120,
                                "name": "tokenIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12101,
                                "src": "780:7:84",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "764:24:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$",
                                "typeString": "mapping(uint24 => contract IAstraCLPool)"
                              }
                            },
                            "id": 12124,
                            "indexExpression": {
                              "id": 12121,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12105,
                              "src": "789:3:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "764:29:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 12125,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12099,
                            "src": "796:4:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            }
                          },
                          "src": "764:36:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "id": 12127,
                        "nodeType": "ExpressionStatement",
                        "src": "764:36:84"
                      }
                    ]
                  },
                  "functionSelector": "0f64f6a9",
                  "id": 12129,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "registerPool",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12106,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12099,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 12129,
                        "src": "604:17:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 12098,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "604:12:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12101,
                        "mutability": "mutable",
                        "name": "tokenIn",
                        "nodeType": "VariableDeclaration",
                        "scope": 12129,
                        "src": "631:15:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12100,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "631:7:84",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12103,
                        "mutability": "mutable",
                        "name": "tokenOut",
                        "nodeType": "VariableDeclaration",
                        "scope": 12129,
                        "src": "656:16:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12102,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "656:7:84",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12105,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 12129,
                        "src": "682:10:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 12104,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "682:6:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "594:104:84"
                  },
                  "returnParameters": {
                    "id": 12107,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "708:0:84"
                  },
                  "scope": 12206,
                  "src": "573:234:84",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    7917
                  ],
                  "body": {
                    "id": 12151,
                    "nodeType": "Block",
                    "src": "962:50:84",
                    "statements": [
                      {
                        "expression": {
                          "id": 12149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 12141,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12139,
                            "src": "972:4:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 12142,
                                  "name": "pools",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12064,
                                  "src": "979:5:84",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$_$_$",
                                    "typeString": "mapping(address => mapping(address => mapping(uint24 => contract IAstraCLPool)))"
                                  }
                                },
                                "id": 12144,
                                "indexExpression": {
                                  "id": 12143,
                                  "name": "tokenA",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12131,
                                  "src": "985:6:84",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "979:13:84",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$_$",
                                  "typeString": "mapping(address => mapping(uint24 => contract IAstraCLPool))"
                                }
                              },
                              "id": 12146,
                              "indexExpression": {
                                "id": 12145,
                                "name": "tokenB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12133,
                                "src": "993:6:84",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "979:21:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint24_$_t_contract$_IAstraCLPool_$27_$",
                                "typeString": "mapping(uint24 => contract IAstraCLPool)"
                              }
                            },
                            "id": 12148,
                            "indexExpression": {
                              "id": 12147,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12135,
                              "src": "1001:3:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "979:26:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                              "typeString": "contract IAstraCLPool"
                            }
                          },
                          "src": "972:33:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "id": 12150,
                        "nodeType": "ExpressionStatement",
                        "src": "972:33:84"
                      }
                    ]
                  },
                  "id": 12152,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolAddress",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 12137,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "925:8:84"
                  },
                  "parameters": {
                    "id": 12136,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12131,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "scope": 12152,
                        "src": "846:14:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12130,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "846:7:84",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12133,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "scope": 12152,
                        "src": "870:14:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12132,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "870:7:84",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12135,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "scope": 12152,
                        "src": "894:10:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 12134,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "894:6:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "836:74:84"
                  },
                  "returnParameters": {
                    "id": 12140,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12139,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 12152,
                        "src": "943:17:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 12138,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "943:12:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "942:19:84"
                  },
                  "scope": 12206,
                  "src": "813:199:84",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 12165,
                    "nodeType": "Block",
                    "src": "1176:60:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12162,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12154,
                              "src": "1224:4:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            ],
                            "id": 12161,
                            "name": "getBlockStartingAndCurrentTick",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7889,
                            "src": "1193:30:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_contract$_IAstraCLPool_$27_$returns$_t_int24_$_t_int24_$",
                              "typeString": "function (contract IAstraCLPool) view returns (int24,int24)"
                            }
                          },
                          "id": 12163,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1193:36:84",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int24_$_t_int24_$",
                            "typeString": "tuple(int24,int24)"
                          }
                        },
                        "functionReturnParameters": 12160,
                        "id": 12164,
                        "nodeType": "Return",
                        "src": "1186:43:84"
                      }
                    ]
                  },
                  "functionSelector": "ac810c6c",
                  "id": 12166,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "testGetBlockStartingAndCurrentTick",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12155,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12154,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 12166,
                        "src": "1062:17:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 12153,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "1062:12:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1061:19:84"
                  },
                  "returnParameters": {
                    "id": 12160,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12157,
                        "mutability": "mutable",
                        "name": "blockStartingTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 12166,
                        "src": "1128:23:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 12156,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1128:5:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12159,
                        "mutability": "mutable",
                        "name": "currentTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 12166,
                        "src": "1153:17:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 12158,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1153:5:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1127:44:84"
                  },
                  "scope": 12206,
                  "src": "1018:218:84",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 12182,
                    "nodeType": "Block",
                    "src": "1420:59:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12178,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12168,
                              "src": "1455:4:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 12179,
                              "name": "secondsAgo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12170,
                              "src": "1461:10:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 12177,
                            "name": "getSyntheticTicks",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              8090,
                              8234
                            ],
                            "referencedDeclaration": 8090,
                            "src": "1437:17:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_uint32_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (bytes memory,uint32) view returns (int256,int256)"
                            }
                          },
                          "id": 12180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1437:35:84",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "functionReturnParameters": 12176,
                        "id": 12181,
                        "nodeType": "Return",
                        "src": "1430:42:84"
                      }
                    ]
                  },
                  "functionSelector": "eaea4bfc",
                  "id": 12183,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "testGetSyntheticTicks",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12171,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12168,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "scope": 12183,
                        "src": "1273:17:84",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 12167,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1273:5:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12170,
                        "mutability": "mutable",
                        "name": "secondsAgo",
                        "nodeType": "VariableDeclaration",
                        "scope": 12183,
                        "src": "1292:17:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 12169,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1292:6:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1272:38:84"
                  },
                  "returnParameters": {
                    "id": 12176,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12173,
                        "mutability": "mutable",
                        "name": "syntheticAverageTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 12183,
                        "src": "1358:27:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 12172,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1358:6:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12175,
                        "mutability": "mutable",
                        "name": "syntheticCurrentTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 12183,
                        "src": "1387:27:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 12174,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1387:6:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1357:58:84"
                  },
                  "scope": 12206,
                  "src": "1242:237:84",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 12204,
                    "nodeType": "Block",
                    "src": "1708:69:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12199,
                              "name": "paths",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12186,
                              "src": "1743:5:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes memory[] memory"
                              }
                            },
                            {
                              "id": 12200,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12189,
                              "src": "1750:7:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                "typeString": "uint128[] memory"
                              }
                            },
                            {
                              "id": 12201,
                              "name": "secondsAgo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12191,
                              "src": "1759:10:84",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes memory[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                "typeString": "uint128[] memory"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 12198,
                            "name": "getSyntheticTicks",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              8090,
                              8234
                            ],
                            "referencedDeclaration": 8234,
                            "src": "1725:17:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint128_$dyn_memory_ptr_$_t_uint32_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (bytes memory[] memory,uint128[] memory,uint32) view returns (int256,int256)"
                            }
                          },
                          "id": 12202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1725:45:84",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "functionReturnParameters": 12197,
                        "id": 12203,
                        "nodeType": "Return",
                        "src": "1718:52:84"
                      }
                    ]
                  },
                  "functionSelector": "1d31557e",
                  "id": 12205,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "testGetSyntheticTicks",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12192,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12186,
                        "mutability": "mutable",
                        "name": "paths",
                        "nodeType": "VariableDeclaration",
                        "scope": 12205,
                        "src": "1525:20:84",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 12184,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "1525:5:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 12185,
                          "nodeType": "ArrayTypeName",
                          "src": "1525:7:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12189,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nodeType": "VariableDeclaration",
                        "scope": 12205,
                        "src": "1555:24:84",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                          "typeString": "uint128[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 12187,
                            "name": "uint128",
                            "nodeType": "ElementaryTypeName",
                            "src": "1555:7:84",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "id": 12188,
                          "nodeType": "ArrayTypeName",
                          "src": "1555:9:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                            "typeString": "uint128[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12191,
                        "mutability": "mutable",
                        "name": "secondsAgo",
                        "nodeType": "VariableDeclaration",
                        "scope": 12205,
                        "src": "1589:17:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 12190,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1589:6:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1515:97:84"
                  },
                  "returnParameters": {
                    "id": 12197,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12194,
                        "mutability": "mutable",
                        "name": "averageSyntheticAverageTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 12205,
                        "src": "1636:34:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 12193,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1636:6:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12196,
                        "mutability": "mutable",
                        "name": "averageSyntheticCurrentTick",
                        "nodeType": "VariableDeclaration",
                        "scope": 12205,
                        "src": "1672:34:84",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 12195,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1672:6:84",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1635:72:84"
                  },
                  "scope": 12206,
                  "src": "1485:292:84",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 12207,
              "src": "128:1651:84"
            }
          ],
          "src": "45:1735:84"
        },
        "id": 84
      },
      "contracts/test/PoolTicksCounterTest.sol": {
        "ast": {
          "absolutePath": "contracts/test/PoolTicksCounterTest.sol",
          "exportedSymbols": {
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "PoolTicksCounter": [
              11986
            ],
            "PoolTicksCounterTest": [
              12232
            ]
          },
          "id": 12233,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "id": 12208,
              "nodeType": "ImportDirective",
              "scope": 12233,
              "sourceUnit": 28,
              "src": "45:69:85",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "id": 12209,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "116:24:85"
            },
            {
              "absolutePath": "contracts/libraries/PoolTicksCounter.sol",
              "file": "../libraries/PoolTicksCounter.sol",
              "id": 12210,
              "nodeType": "ImportDirective",
              "scope": 12233,
              "sourceUnit": 11987,
              "src": "142:43:85",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 12232,
              "linearizedBaseContracts": [
                12232
              ],
              "name": "PoolTicksCounterTest",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 12213,
                  "libraryName": {
                    "id": 12211,
                    "name": "PoolTicksCounter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 11986,
                    "src": "229:16:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PoolTicksCounter_$11986",
                      "typeString": "library PoolTicksCounter"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "223:40:85",
                  "typeName": {
                    "id": 12212,
                    "name": "IAstraCLPool",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27,
                    "src": "250:12:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                      "typeString": "contract IAstraCLPool"
                    }
                  }
                },
                {
                  "body": {
                    "id": 12230,
                    "nodeType": "Block",
                    "src": "446:80:85",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12226,
                              "name": "tickBefore",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12217,
                              "src": "497:10:85",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            {
                              "id": 12227,
                              "name": "tickAfter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12219,
                              "src": "509:9:85",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              },
                              {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            ],
                            "expression": {
                              "id": 12224,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12215,
                              "src": "463:4:85",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 12225,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "countInitializedTicksCrossed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11956,
                            "src": "463:33:85",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_contract$_IAstraCLPool_$27_$_t_int24_$_t_int24_$returns$_t_uint32_$bound_to$_t_contract$_IAstraCLPool_$27_$",
                              "typeString": "function (contract IAstraCLPool,int24,int24) view returns (uint32)"
                            }
                          },
                          "id": 12228,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "463:56:85",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "functionReturnParameters": 12223,
                        "id": 12229,
                        "nodeType": "Return",
                        "src": "456:63:85"
                      }
                    ]
                  },
                  "functionSelector": "4c5b941c",
                  "id": 12231,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "countInitializedTicksCrossed",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12220,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12215,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 12231,
                        "src": "316:17:85",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                          "typeString": "contract IAstraCLPool"
                        },
                        "typeName": {
                          "id": 12214,
                          "name": "IAstraCLPool",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 27,
                          "src": "316:12:85",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                            "typeString": "contract IAstraCLPool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12217,
                        "mutability": "mutable",
                        "name": "tickBefore",
                        "nodeType": "VariableDeclaration",
                        "scope": 12231,
                        "src": "343:16:85",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 12216,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "343:5:85",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12219,
                        "mutability": "mutable",
                        "name": "tickAfter",
                        "nodeType": "VariableDeclaration",
                        "scope": 12231,
                        "src": "369:15:85",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 12218,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "369:5:85",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "306:84:85"
                  },
                  "returnParameters": {
                    "id": 12223,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12222,
                        "mutability": "mutable",
                        "name": "initializedTicksCrossed",
                        "nodeType": "VariableDeclaration",
                        "scope": 12231,
                        "src": "414:30:85",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 12221,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "414:6:85",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "413:32:85"
                  },
                  "scope": 12232,
                  "src": "269:257:85",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 12233,
              "src": "187:341:85"
            }
          ],
          "src": "45:484:85"
        },
        "id": 85
      },
      "contracts/test/TestAstraCLCallee.sol": {
        "ast": {
          "absolutePath": "contracts/test/TestAstraCLCallee.sol",
          "exportedSymbols": {
            "IAstraCLPool": [
              27
            ],
            "IAstraCLPoolActions": [
              137
            ],
            "IAstraCLPoolDerivedState": [
              168
            ],
            "IAstraCLPoolEvents": [
              287
            ],
            "IAstraCLPoolImmutables": [
              327
            ],
            "IAstraCLPoolOwnerActions": [
              353
            ],
            "IAstraCLPoolState": [
              461
            ],
            "IAstraCLSwapCallback": [
              41
            ],
            "IERC20": [
              5876
            ],
            "SafeCast": [
              1113
            ],
            "TestAstraCLCallee": [
              12431
            ]
          },
          "id": 12432,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12234,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:86"
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/callback/IAstraCLSwapCallback.sol",
              "id": 12235,
              "nodeType": "ImportDirective",
              "scope": 12432,
              "sourceUnit": 42,
              "src": "64:86:86",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol",
              "file": "@airdao/astra-cl-core/contracts/libraries/SafeCast.sol",
              "id": 12236,
              "nodeType": "ImportDirective",
              "scope": 12432,
              "sourceUnit": 1114,
              "src": "151:64:86",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "file": "@airdao/astra-cl-core/contracts/interfaces/IAstraCLPool.sol",
              "id": 12237,
              "nodeType": "ImportDirective",
              "scope": 12432,
              "sourceUnit": 28,
              "src": "216:69:86",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 12238,
              "nodeType": "ImportDirective",
              "scope": 12432,
              "sourceUnit": 5877,
              "src": "286:56:86",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 12239,
                    "name": "IAstraCLSwapCallback",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 41,
                    "src": "374:20:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAstraCLSwapCallback_$41",
                      "typeString": "contract IAstraCLSwapCallback"
                    }
                  },
                  "id": 12240,
                  "nodeType": "InheritanceSpecifier",
                  "src": "374:20:86"
                }
              ],
              "contractDependencies": [
                41
              ],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 12431,
              "linearizedBaseContracts": [
                12431,
                41
              ],
              "name": "TestAstraCLCallee",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 12243,
                  "libraryName": {
                    "id": 12241,
                    "name": "SafeCast",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1113,
                    "src": "407:8:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeCast_$1113",
                      "typeString": "library SafeCast"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "401:27:86",
                  "typeName": {
                    "id": 12242,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "420:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "body": {
                    "id": 12271,
                    "nodeType": "Block",
                    "src": "584:122:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12258,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12249,
                              "src": "618:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "74727565",
                              "id": 12259,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "629:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 12260,
                                  "name": "amount0In",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12247,
                                  "src": "635:9:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 12261,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1112,
                                "src": "635:18:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 12262,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "635:20:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "id": 12263,
                              "name": "sqrtPriceLimitX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12251,
                              "src": "657:17:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 12266,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "687:3:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 12267,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "687:10:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "expression": {
                                  "id": 12264,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "676:3:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 12265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "676:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 12268,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "676:22:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 12255,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12245,
                                  "src": "607:4:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 12254,
                                "name": "IAstraCLPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27,
                                "src": "594:12:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "type(contract IAstraCLPool)"
                                }
                              },
                              "id": 12256,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "594:18:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 12257,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 118,
                            "src": "594:23:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            }
                          },
                          "id": 12269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "594:105:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "id": 12270,
                        "nodeType": "ExpressionStatement",
                        "src": "594:105:86"
                      }
                    ]
                  },
                  "functionSelector": "6dfc0ddb",
                  "id": 12272,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swapExact0For1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12252,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12245,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 12272,
                        "src": "467:12:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12244,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "467:7:86",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12247,
                        "mutability": "mutable",
                        "name": "amount0In",
                        "nodeType": "VariableDeclaration",
                        "scope": 12272,
                        "src": "489:17:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12246,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "489:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12249,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 12272,
                        "src": "516:17:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "516:7:86",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12251,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 12272,
                        "src": "543:25:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 12250,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "543:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "457:117:86"
                  },
                  "returnParameters": {
                    "id": 12253,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "584:0:86"
                  },
                  "scope": 12431,
                  "src": "434:272:86",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 12301,
                    "nodeType": "Block",
                    "src": "863:124:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12287,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12278,
                              "src": "897:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "74727565",
                              "id": 12288,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "908:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "id": 12292,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "914:22:86",
                              "subExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 12289,
                                    "name": "amount1Out",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12276,
                                    "src": "915:10:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 12290,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toInt256",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1112,
                                  "src": "915:19:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256) pure returns (int256)"
                                  }
                                },
                                "id": 12291,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "915:21:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "id": 12293,
                              "name": "sqrtPriceLimitX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12280,
                              "src": "938:17:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 12296,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "968:3:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 12297,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "968:10:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "expression": {
                                  "id": 12294,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "957:3:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 12295,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "957:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 12298,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "957:22:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 12284,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12274,
                                  "src": "886:4:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 12283,
                                "name": "IAstraCLPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27,
                                "src": "873:12:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "type(contract IAstraCLPool)"
                                }
                              },
                              "id": 12285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "873:18:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 12286,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 118,
                            "src": "873:23:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            }
                          },
                          "id": 12299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "873:107:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "id": 12300,
                        "nodeType": "ExpressionStatement",
                        "src": "873:107:86"
                      }
                    ]
                  },
                  "functionSelector": "bac7bf78",
                  "id": 12302,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swap0ForExact1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12281,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12274,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 12302,
                        "src": "745:12:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12273,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "745:7:86",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12276,
                        "mutability": "mutable",
                        "name": "amount1Out",
                        "nodeType": "VariableDeclaration",
                        "scope": 12302,
                        "src": "767:18:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12275,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "767:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12278,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 12302,
                        "src": "795:17:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12277,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "795:7:86",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12280,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 12302,
                        "src": "822:25:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 12279,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "822:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "735:118:86"
                  },
                  "returnParameters": {
                    "id": 12282,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "863:0:86"
                  },
                  "scope": 12431,
                  "src": "712:275:86",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 12330,
                    "nodeType": "Block",
                    "src": "1143:123:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12317,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12308,
                              "src": "1177:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "66616c7365",
                              "id": 12318,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1188:5:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 12319,
                                  "name": "amount1In",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12306,
                                  "src": "1195:9:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 12320,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1112,
                                "src": "1195:18:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 12321,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1195:20:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "id": 12322,
                              "name": "sqrtPriceLimitX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12310,
                              "src": "1217:17:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 12325,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "1247:3:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 12326,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "1247:10:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "expression": {
                                  "id": 12323,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1236:3:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 12324,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "1236:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 12327,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1236:22:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 12314,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12304,
                                  "src": "1166:4:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 12313,
                                "name": "IAstraCLPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27,
                                "src": "1153:12:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "type(contract IAstraCLPool)"
                                }
                              },
                              "id": 12315,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1153:18:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 12316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 118,
                            "src": "1153:23:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            }
                          },
                          "id": 12328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1153:106:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "id": 12329,
                        "nodeType": "ExpressionStatement",
                        "src": "1153:106:86"
                      }
                    ]
                  },
                  "functionSelector": "e2be9109",
                  "id": 12331,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swapExact1For0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12311,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12304,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 12331,
                        "src": "1026:12:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12303,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1026:7:86",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12306,
                        "mutability": "mutable",
                        "name": "amount1In",
                        "nodeType": "VariableDeclaration",
                        "scope": 12331,
                        "src": "1048:17:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12305,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1048:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12308,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 12331,
                        "src": "1075:17:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12307,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1075:7:86",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12310,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 12331,
                        "src": "1102:25:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 12309,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1102:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1016:117:86"
                  },
                  "returnParameters": {
                    "id": 12312,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1143:0:86"
                  },
                  "scope": 12431,
                  "src": "993:273:86",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 12360,
                    "nodeType": "Block",
                    "src": "1423:125:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12346,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12337,
                              "src": "1457:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "66616c7365",
                              "id": 12347,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1468:5:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            {
                              "id": 12351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "1475:22:86",
                              "subExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 12348,
                                    "name": "amount0Out",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12335,
                                    "src": "1476:10:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 12349,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "toInt256",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1112,
                                  "src": "1476:19:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256) pure returns (int256)"
                                  }
                                },
                                "id": 12350,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1476:21:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "id": 12352,
                              "name": "sqrtPriceLimitX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12339,
                              "src": "1499:17:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 12355,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "1529:3:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 12356,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "1529:10:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "expression": {
                                  "id": 12353,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1518:3:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 12354,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "1518:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 12357,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1518:22:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 12343,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12333,
                                  "src": "1446:4:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 12342,
                                "name": "IAstraCLPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27,
                                "src": "1433:12:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                  "typeString": "type(contract IAstraCLPool)"
                                }
                              },
                              "id": 12344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1433:18:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                "typeString": "contract IAstraCLPool"
                              }
                            },
                            "id": 12345,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 118,
                            "src": "1433:23:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$_t_int256_$_t_uint160_$_t_bytes_memory_ptr_$returns$_t_int256_$_t_int256_$",
                              "typeString": "function (address,bool,int256,uint160,bytes memory) external returns (int256,int256)"
                            }
                          },
                          "id": 12358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1433:108:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                            "typeString": "tuple(int256,int256)"
                          }
                        },
                        "id": 12359,
                        "nodeType": "ExpressionStatement",
                        "src": "1433:108:86"
                      }
                    ]
                  },
                  "functionSelector": "f603482c",
                  "id": 12361,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swap1ForExact0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12340,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12333,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "scope": 12361,
                        "src": "1305:12:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12332,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1305:7:86",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12335,
                        "mutability": "mutable",
                        "name": "amount0Out",
                        "nodeType": "VariableDeclaration",
                        "scope": 12361,
                        "src": "1327:18:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12334,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1327:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12337,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "scope": 12361,
                        "src": "1355:17:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12336,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1355:7:86",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12339,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "VariableDeclaration",
                        "scope": 12361,
                        "src": "1382:25:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 12338,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1382:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1295:118:86"
                  },
                  "returnParameters": {
                    "id": 12341,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1423:0:86"
                  },
                  "scope": 12431,
                  "src": "1272:276:86",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    40
                  ],
                  "body": {
                    "id": 12429,
                    "nodeType": "Block",
                    "src": "1694:381:86",
                    "statements": [
                      {
                        "assignments": [
                          12372
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 12372,
                            "mutability": "mutable",
                            "name": "sender",
                            "nodeType": "VariableDeclaration",
                            "scope": 12429,
                            "src": "1704:14:86",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 12371,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1704:7:86",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 12380,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 12375,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12367,
                              "src": "1732:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 12377,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1739:7:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 12376,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1739:7:86",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "id": 12378,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1738:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              }
                            ],
                            "expression": {
                              "id": 12373,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "1721:3:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 12374,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "1721:10:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 12379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1721:27:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1704:44:86"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 12383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 12381,
                            "name": "amount0Delta",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12363,
                            "src": "1763:12:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 12382,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1778:1:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1763:16:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 12427,
                          "nodeType": "Block",
                          "src": "1909:160:86",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 12406,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 12404,
                                      "name": "amount1Delta",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12365,
                                      "src": "1930:12:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 12405,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1945:1:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1930:16:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 12403,
                                  "name": "assert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -3,
                                  "src": "1923:6:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 12407,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1923:24:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 12408,
                              "nodeType": "ExpressionStatement",
                              "src": "1923:24:86"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 12418,
                                    "name": "sender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12372,
                                    "src": "2016:6:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 12419,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "2024:3:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 12420,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "2024:10:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "id": 12423,
                                        "name": "amount1Delta",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12365,
                                        "src": "2044:12:86",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      ],
                                      "id": 12422,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2036:7:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 12421,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2036:7:86",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 12424,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2036:21:86",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "arguments": [
                                              {
                                                "expression": {
                                                  "id": 12411,
                                                  "name": "msg",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -15,
                                                  "src": "1981:3:86",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                  }
                                                },
                                                "id": 12412,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "1981:10:86",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address_payable",
                                                  "typeString": "address payable"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address_payable",
                                                  "typeString": "address payable"
                                                }
                                              ],
                                              "id": 12410,
                                              "name": "IAstraCLPool",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 27,
                                              "src": "1968:12:86",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                                "typeString": "type(contract IAstraCLPool)"
                                              }
                                            },
                                            "id": 12413,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1968:24:86",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                              "typeString": "contract IAstraCLPool"
                                            }
                                          },
                                          "id": 12414,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "token1",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 308,
                                          "src": "1968:31:86",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                            "typeString": "function () view external returns (address)"
                                          }
                                        },
                                        "id": 12415,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1968:33:86",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 12409,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5876,
                                      "src": "1961:6:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 12416,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1961:41:86",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$5876",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 12417,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transferFrom",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5857,
                                  "src": "1961:54:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,address,uint256) external returns (bool)"
                                  }
                                },
                                "id": 12425,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1961:97:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 12426,
                              "nodeType": "ExpressionStatement",
                              "src": "1961:97:86"
                            }
                          ]
                        },
                        "id": 12428,
                        "nodeType": "IfStatement",
                        "src": "1759:310:86",
                        "trueBody": {
                          "id": 12402,
                          "nodeType": "Block",
                          "src": "1781:122:86",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 12393,
                                    "name": "sender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12372,
                                    "src": "1850:6:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 12394,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "1858:3:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 12395,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "1858:10:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "id": 12398,
                                        "name": "amount0Delta",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12363,
                                        "src": "1878:12:86",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      ],
                                      "id": 12397,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "1870:7:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 12396,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1870:7:86",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 12399,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1870:21:86",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "arguments": [
                                              {
                                                "expression": {
                                                  "id": 12386,
                                                  "name": "msg",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -15,
                                                  "src": "1815:3:86",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                  }
                                                },
                                                "id": 12387,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "1815:10:86",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address_payable",
                                                  "typeString": "address payable"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address_payable",
                                                  "typeString": "address payable"
                                                }
                                              ],
                                              "id": 12385,
                                              "name": "IAstraCLPool",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 27,
                                              "src": "1802:12:86",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_IAstraCLPool_$27_$",
                                                "typeString": "type(contract IAstraCLPool)"
                                              }
                                            },
                                            "id": 12388,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1802:24:86",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IAstraCLPool_$27",
                                              "typeString": "contract IAstraCLPool"
                                            }
                                          },
                                          "id": 12389,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "token0",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 302,
                                          "src": "1802:31:86",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                            "typeString": "function () view external returns (address)"
                                          }
                                        },
                                        "id": 12390,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1802:33:86",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 12384,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5876,
                                      "src": "1795:6:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$5876_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 12391,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1795:41:86",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$5876",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 12392,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transferFrom",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5857,
                                  "src": "1795:54:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,address,uint256) external returns (bool)"
                                  }
                                },
                                "id": 12400,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1795:97:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 12401,
                              "nodeType": "ExpressionStatement",
                              "src": "1795:97:86"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "functionSelector": "11c17848",
                  "id": 12430,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "astraCLSwapCallback",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 12369,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1685:8:86"
                  },
                  "parameters": {
                    "id": 12368,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12363,
                        "mutability": "mutable",
                        "name": "amount0Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 12430,
                        "src": "1592:19:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 12362,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1592:6:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12365,
                        "mutability": "mutable",
                        "name": "amount1Delta",
                        "nodeType": "VariableDeclaration",
                        "scope": 12430,
                        "src": "1621:19:86",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 12364,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1621:6:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12367,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 12430,
                        "src": "1650:19:86",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 12366,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1650:5:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1582:93:86"
                  },
                  "returnParameters": {
                    "id": 12370,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1694:0:86"
                  },
                  "scope": 12431,
                  "src": "1554:521:86",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 12432,
              "src": "344:1733:86"
            }
          ],
          "src": "39:2039:86"
        },
        "id": 86
      },
      "contracts/test/TestERC20.sol": {
        "ast": {
          "absolutePath": "contracts/test/TestERC20.sol",
          "exportedSymbols": {
            "Context": [
              6073
            ],
            "Counters": [
              6123
            ],
            "ECDSA": [
              4597
            ],
            "EIP712": [
              4746
            ],
            "ERC20": [
              5798
            ],
            "ERC20Permit": [
              4892
            ],
            "IERC20": [
              5876
            ],
            "IERC20Permit": [
              4928
            ],
            "SafeMath": [
              5295
            ],
            "TestERC20": [
              12456
            ]
          },
          "id": 12457,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12433,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:87"
            },
            {
              "absolutePath": "@openzeppelin/contracts/drafts/ERC20Permit.sol",
              "file": "@openzeppelin/contracts/drafts/ERC20Permit.sol",
              "id": 12434,
              "nodeType": "ImportDirective",
              "scope": 12457,
              "sourceUnit": 4893,
              "src": "64:56:87",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 12435,
                    "name": "ERC20Permit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4892,
                    "src": "144:11:87",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Permit_$4892",
                      "typeString": "contract ERC20Permit"
                    }
                  },
                  "id": 12436,
                  "nodeType": "InheritanceSpecifier",
                  "src": "144:11:87"
                }
              ],
              "contractDependencies": [
                4746,
                4892,
                4928,
                5798,
                5876,
                6073
              ],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 12456,
              "linearizedBaseContracts": [
                12456,
                4892,
                4746,
                4928,
                5798,
                5876,
                6073
              ],
              "name": "TestERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 12454,
                    "nodeType": "Block",
                    "src": "250:48:87",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 12449,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "266:3:87",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 12450,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "266:10:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 12451,
                              "name": "amountToMint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12438,
                              "src": "278:12:87",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 12448,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5674,
                            "src": "260:5:87",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 12452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "260:31:87",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 12453,
                        "nodeType": "ExpressionStatement",
                        "src": "260:31:87"
                      }
                    ]
                  },
                  "id": 12455,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "hexValue": "54657374204552433230",
                          "id": 12441,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "202:12:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_59dbbb5a111c0b89d8aaed45107e7abbc3d86a3266b13d6715a938843248b158",
                            "typeString": "literal_string \"Test ERC20\""
                          },
                          "value": "Test ERC20"
                        },
                        {
                          "hexValue": "54455354",
                          "id": 12442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "216:6:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_852daa74cc3c31fe64542bb9b8764cfb91cc30f9acf9389071ffb44a9eefde46",
                            "typeString": "literal_string \"TEST\""
                          },
                          "value": "TEST"
                        }
                      ],
                      "id": 12443,
                      "modifierName": {
                        "id": 12440,
                        "name": "ERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5798,
                        "src": "196:5:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC20_$5798_$",
                          "typeString": "type(contract ERC20)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "196:27:87"
                    },
                    {
                      "arguments": [
                        {
                          "hexValue": "54657374204552433230",
                          "id": 12445,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "236:12:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_59dbbb5a111c0b89d8aaed45107e7abbc3d86a3266b13d6715a938843248b158",
                            "typeString": "literal_string \"Test ERC20\""
                          },
                          "value": "Test ERC20"
                        }
                      ],
                      "id": 12446,
                      "modifierName": {
                        "id": 12444,
                        "name": "ERC20Permit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4892,
                        "src": "224:11:87",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC20Permit_$4892_$",
                          "typeString": "type(contract ERC20Permit)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "224:25:87"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12439,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12438,
                        "mutability": "mutable",
                        "name": "amountToMint",
                        "nodeType": "VariableDeclaration",
                        "scope": 12455,
                        "src": "174:20:87",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12437,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "174:7:87",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "173:22:87"
                  },
                  "returnParameters": {
                    "id": 12447,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "250:0:87"
                  },
                  "scope": 12456,
                  "src": "162:136:87",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 12457,
              "src": "122:178:87"
            }
          ],
          "src": "39:262:87"
        },
        "id": 87
      },
      "contracts/test/TestMulticallExtended.sol": {
        "ast": {
          "absolutePath": "contracts/test/TestMulticallExtended.sol",
          "exportedSymbols": {
            "BlockTimestamp": [
              1918
            ],
            "IMulticall": [
              2662
            ],
            "IMulticallExtended": [
              8789
            ],
            "Multicall": [
              2003
            ],
            "MulticallExtended": [
              7766
            ],
            "PeripheryValidation": [
              2445
            ],
            "PeripheryValidationExtended": [
              8459
            ],
            "TestMulticallExtended": [
              12506
            ]
          },
          "id": 12507,
          "license": "UNLICENSED",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12458,
              "literals": [
                "solidity",
                "=",
                "0.7",
                ".6"
              ],
              "nodeType": "PragmaDirective",
              "src": "39:23:88"
            },
            {
              "id": 12459,
              "literals": [
                "abicoder",
                "v2"
              ],
              "nodeType": "PragmaDirective",
              "src": "63:19:88"
            },
            {
              "absolutePath": "contracts/base/MulticallExtended.sol",
              "file": "../base/MulticallExtended.sol",
              "id": 12460,
              "nodeType": "ImportDirective",
              "scope": 12507,
              "sourceUnit": 7767,
              "src": "84:39:88",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 12461,
                    "name": "MulticallExtended",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7766,
                    "src": "159:17:88",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MulticallExtended_$7766",
                      "typeString": "contract MulticallExtended"
                    }
                  },
                  "id": 12462,
                  "nodeType": "InheritanceSpecifier",
                  "src": "159:17:88"
                }
              ],
              "contractDependencies": [
                1918,
                2003,
                2445,
                2662,
                7766,
                8459,
                8789
              ],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 12506,
              "linearizedBaseContracts": [
                12506,
                7766,
                8459,
                2445,
                1918,
                2003,
                8789,
                2662
              ],
              "name": "TestMulticallExtended",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 12464,
                  "mutability": "mutable",
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 12506,
                  "src": "183:12:88",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12463,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "183:7:88",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1917
                  ],
                  "body": {
                    "id": 12472,
                    "nodeType": "Block",
                    "src": "270:28:88",
                    "statements": [
                      {
                        "expression": {
                          "id": 12470,
                          "name": "time",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12464,
                          "src": "287:4:88",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 12469,
                        "id": 12471,
                        "nodeType": "Return",
                        "src": "280:11:88"
                      }
                    ]
                  },
                  "id": 12473,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_blockTimestamp",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 12466,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "243:8:88"
                  },
                  "parameters": {
                    "id": 12465,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "226:2:88"
                  },
                  "returnParameters": {
                    "id": 12469,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12468,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 12473,
                        "src": "261:7:88",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12467,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "261:7:88",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "260:9:88"
                  },
                  "scope": 12506,
                  "src": "202:96:88",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 12482,
                    "nodeType": "Block",
                    "src": "345:29:88",
                    "statements": [
                      {
                        "expression": {
                          "id": 12480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 12478,
                            "name": "time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12464,
                            "src": "355:4:88",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 12479,
                            "name": "_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12475,
                            "src": "362:5:88",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "355:12:88",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 12481,
                        "nodeType": "ExpressionStatement",
                        "src": "355:12:88"
                      }
                    ]
                  },
                  "functionSelector": "3beb26c4",
                  "id": 12483,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setTime",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12476,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12475,
                        "mutability": "mutable",
                        "name": "_time",
                        "nodeType": "VariableDeclaration",
                        "scope": 12483,
                        "src": "321:13:88",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12474,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "321:7:88",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "320:15:88"
                  },
                  "returnParameters": {
                    "id": 12477,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "345:0:88"
                  },
                  "scope": 12506,
                  "src": "304:70:88",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "canonicalName": "TestMulticallExtended.Tuple",
                  "id": 12488,
                  "members": [
                    {
                      "constant": false,
                      "id": 12485,
                      "mutability": "mutable",
                      "name": "a",
                      "nodeType": "VariableDeclaration",
                      "scope": 12488,
                      "src": "403:9:88",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 12484,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "403:7:88",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 12487,
                      "mutability": "mutable",
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 12488,
                      "src": "422:9:88",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 12486,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "422:7:88",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Tuple",
                  "nodeType": "StructDefinition",
                  "scope": 12506,
                  "src": "380:58:88",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 12504,
                    "nodeType": "Block",
                    "src": "543:44:88",
                    "statements": [
                      {
                        "expression": {
                          "id": 12502,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 12497,
                            "name": "tuple",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12495,
                            "src": "553:5:88",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Tuple_$12488_memory_ptr",
                              "typeString": "struct TestMulticallExtended.Tuple memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 12499,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12490,
                                "src": "571:1:88",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 12500,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12492,
                                "src": "577:1:88",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 12498,
                              "name": "Tuple",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12488,
                              "src": "561:5:88",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Tuple_$12488_storage_ptr_$",
                                "typeString": "type(struct TestMulticallExtended.Tuple storage pointer)"
                              }
                            },
                            "id": 12501,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "names": [
                              "b",
                              "a"
                            ],
                            "nodeType": "FunctionCall",
                            "src": "561:19:88",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Tuple_$12488_memory_ptr",
                              "typeString": "struct TestMulticallExtended.Tuple memory"
                            }
                          },
                          "src": "553:27:88",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Tuple_$12488_memory_ptr",
                            "typeString": "struct TestMulticallExtended.Tuple memory"
                          }
                        },
                        "id": 12503,
                        "nodeType": "ExpressionStatement",
                        "src": "553:27:88"
                      }
                    ]
                  },
                  "functionSelector": "3b16a6a3",
                  "id": 12505,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionThatReturnsTuple",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12493,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12490,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 12505,
                        "src": "478:9:88",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12489,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "478:7:88",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12492,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 12505,
                        "src": "489:9:88",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12491,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "489:7:88",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "477:22:88"
                  },
                  "returnParameters": {
                    "id": 12496,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12495,
                        "mutability": "mutable",
                        "name": "tuple",
                        "nodeType": "VariableDeclaration",
                        "scope": 12505,
                        "src": "523:18:88",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Tuple_$12488_memory_ptr",
                          "typeString": "struct TestMulticallExtended.Tuple"
                        },
                        "typeName": {
                          "id": 12494,
                          "name": "Tuple",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 12488,
                          "src": "523:5:88",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Tuple_$12488_storage_ptr",
                            "typeString": "struct TestMulticallExtended.Tuple"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "522:20:88"
                  },
                  "scope": 12506,
                  "src": "444:143:88",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 12507,
              "src": "125:464:88"
            }
          ],
          "src": "39:551:88"
        },
        "id": 88
      }
    }
  }
}
